برنامه نویسی

[Vue 3] بیان تابع در مقابل اعلان تابع در تنظیم اسکریپت

جاوا اسکریپت عجیب است. اگر بیش از 5 دقیقه را با زبان گذرانده اید، از قبل می دانید. یکی از سخت‌ترین موضوعاتی که می‌توان به یک مهندس غیر فرانت‌اند توضیح داد، بیان عملکرد و کل ایده توابع شهروندان درجه یک است.

در Vue، تا همین اواخر، تمام توابع داخل گزینه روش ها اعلام می شد که این بحث را بی ربط می کرد. اما با معرفی Composition API در Vue 3، اکنون اعلام یک تابع به هر دو صورت امکان پذیر است.

بیایید تفاوت ها و اینکه کدام یک باید استفاده شود را بررسی کنیم.

tl;dr همین مورد، از اعلان‌های تابع برای خوانایی استفاده کنید

اعلامیه های عملکرد

یک اعلان عملکرد سنتی یا «طبیعی” روشی برای اعلان تابع در زبان های برنامه نویسی غیر کاربردی با کلمه کلیدی تابع شروع می شود و به دنبال آن نام تابع، یک جفت پرانتز و در نهایت یک جفت پرانتز فرفری که بدنه تابع را در بر می گیرد.

در اینجا یک مثال است:

    function greet(name) {
      console.log(`Hello, ${name}!`);
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یکی از ویژگی های مهم اعلان های تابع این است که آنها هستند برافراشته شد به بالاترین حد خود. این بدان معنی است که صرف نظر از جایی که اعلان تابع در کد نوشته شده است، برای فراخوانی در هر جایی در محدوده یکسان در دسترس خواهد بود.

مثلا:

    greet("stranger"); // prints "Hello, stranger!"

    function greet(name) {
      console.log(`Hello, ${name}!`);
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حتی اگر تابع greet() قبل از اینکه در کد تعریف شود فراخوانی می‌شود، اعلان تابع به بالای محدوده بالا می‌رود، بنابراین فراخوانی معتبر است و تبریک به کنسول ثبت می‌شود.

عبارات تابع

از سوی دیگر، یک عبارت تابع عبارتی است که به یک تابع منجر می شود. همچنین از کلمه کلیدی تابع استفاده می کند که به یک متغیر یا ویژگی یک شی اختصاص داده می شود.

در اینجا یک مثال است:

    const greet = function() {
      console.log("Hello!");
    };
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا همان مثال با استفاده از تابع فلش:

    const greet = () => {
      console.log("Hello!");
    };
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یکی از تفاوت های کلیدی بین این دو این است که عبارات تابع بالا نمی روند. آنها فقط پس از تعریف می توانند فراخوانی شوند.

    greet("stranger"); /* "ReferenceError: 
                           Cannot access 'greet' before 
                           initialization  */

    const greet = function(name) {
      console.log(`Hello, ${name}!`);
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

عبارات توابع نیز نسبت به اعلان‌های توابع انعطاف‌پذیرتر هستند، زیرا می‌توانند در زمینه‌های بیشتری استفاده شوند، مانند اینکه به عنوان آرگومان به توابع دیگر منتقل شوند یا به عنوان روشی از یک شی استفاده شوند.

    <button id="myButton">Click me!</button>

    <script>
      const myButton = document.querySelector('#myButton');

      myButton.addEventListener('click', function() {
        console.log('Button clicked!');
      });
    </script>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدتی نه چندان دور بود که عبارات تابع برتر در نظر گرفته می شدند زیرا گستره جهانی را آلوده نمی کردند. اما خوشبختانه، ماژول‌های ES امروزه به طور گسترده مورد استفاده قرار گرفته‌اند و این مشکل دیگر معتبر نیست.

Vue 3 بیان تابع در مقابل اعلان تابع در تنظیم

پس آیا آنها یکسان هستند؟ در واقع، ** بله **! امروزه این در واقع به ترجیح شخصی بستگی دارد که کدام یک را انتخاب کنید. و ترجیح قوی من استفاده از Function Declarations است. برای نشان دادن اینکه چرا یک مؤلفه Vue را با استفاده از هر دو رویکرد بررسی می کنیم.

اعلام عملکرد:

    <script setup>
    import { debounce } from "debounce";
    import { ref, watch } from "vue";

    const searchTerm = ref("");
    const products = ref([]);

    watch(searchTerm, debounce(performSearch, 600));

    async function performSearch() {
      if (searchTerm.value === "") {
        products.value = [];
            return;
      }
      if (searchTerm.value.length < 2) {
        return;
      }
      const searchUrl = getSearchUrl();
      const response = await (await fetch(searchUrl)).json();
      products.value = response.products;
    }

    function getSearchUrl() {
      const url = "https://dummyjson.com/products/search";
        const params = {
        q: searchTerm.value,
            limit: "5"
      };
      const searchParams = new URLSearchParams(params);
      return `${url}?${searchParams}`;
    };

    function clearSearch() {
      searchTerm.value = "";
      products.value = [];
    }

    </script>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیان تابع:

    <script setup>
    import { debounce } from "debounce";
    import { ref, watch } from "vue";

    const searchTerm = ref("");
    const products = ref([]);

    const performSearch = async () => {
      if (searchTerm.value === "") {
        products.value = [];
            return;
      }
      if (searchTerm.value.length < 2) {
        return;
      }

      const searchUrl = getSearchUrl();
      const response = await (await fetch(searchUrl)).json();

      products.value = response.products;
    }

    watch(searchTerm, debounce(performSearch, 600));

    const getSearchUrl = () => {
      const url = "https://dummyjson.com/products/search";
        const params = {
        q: searchTerm.value,
            limit: "5"
      };

      const searchParams = new URLSearchParams(params);
      return `${url}?${searchParams}`;
    };

    const clearSearch = () => {
      searchTerm.value = "";
      products.value = [];
    }

    </script>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همانطور که می دانید، هر چیزی که در تنظیمات اسکریپت اعلام شده است به طور خودکار در قالب موجود است. و شناسایی روش ها از داده ها یا متغیرهای محاسبه شده در هنگام استفاده از Function Declarations بسیار ساده تر است زیرا همه آنها با کلمه کلیدی تابع شروع می شوند. تفاوت ظریف است، اما به هر حال، بهترین کد چیزی است که دیگران به راحتی می توانند آن را درک کنند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا