خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

توابع پیکان در مقابل توابع معمولی در جاوا اسکریپت

به غیر از نحو، تفاوت های بیشتری بین این دو وجود دارد.

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

در ابتدا از کلمه کلیدی تابع استفاده می شد و بعداً سینتکس فلش ایجاد شد. اگرچه در دسترسی به دامنه متفاوت است، اما کلمه کلیدی تابع و نحو فلش نتایج مشابهی ایجاد می کنند.

ناتوانی در تمایز بین این دو ممکن است مشکلاتی ایجاد کند و منجر به استفاده نادرست شود. برای توسعه‌دهنده‌های JS مدرن این یک ضرورت است که بفهمد هر اعلان تابع چگونه بر دامنه و دید تأثیر می‌گذارد.

توابع پیکان جاوا اسکریپت چیست؟

توابع پیکان جاوا اسکریپت روشی جایگزین برای تعریف توابعی است که از کلمه کلیدی تابع پیش فرض استفاده نمی کنند:

function logMessage(message) {
    console.log(message);
}

const logMessage = (message) => {
    console.log(message);
}

const logMessage = message => console.log(message);

در بالا، می‌توانید پیام مشابهی را ببینید که به سه روش مختلف نوشته شده است. اولی از روش اعلان تابع منظم استفاده می کند. دو مورد بعدی دو راه برای استفاده از عملکردهای پیکان ES6 را نشان می دهد.

جاوا اسکریپت برای اولین بار با انتشار استانداردهای ECMAScript 2015 از دستور تابع پیکان استفاده کرد. توابع Arrow یک راه ساده و مختصر برای ایجاد سریع توابع و یک راه حل جالب برای چندین مشکل دامنه طولانی مدت در جاوا اسکریپت ارائه می دهد.

این ویژگی‌ها به سرعت عملکردهای پیکان را در میان بسیاری از توسعه‌دهندگان محبوب کرد. برنامه نویسانی که به دنبال یک پایگاه کد جاوا اسکریپت مدرن هستند به همان اندازه توابع معمولی را پیدا می کنند.

توابع پیکان چه تفاوتی با توابع معمولی در جاوا اسکریپت دارند؟

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

مطلب مرتبط:   نحوه ارسال ایمیل در Node.js با استفاده از Sendinblue API

با وجود شباهت‌های بین این دو، تفاوت‌هایی وجود دارد که توسعه‌دهندگان باید از آن‌ها آگاه باشند.

تفاوت در محدوده

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

قبل از ES6، تعداد قابل توجهی راه حل وجود داشت که آیتم ها را به سطوح بالاتری از دامنه برای استفاده در تماس های پاسخ می داد. این هک‌ها کار می‌کردند، اما درک آن‌ها اغلب دشوار بود و می‌توانستند با بازنویسی متغیرهای خاصی مشکل ایجاد کنند.

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

این به توابع اجازه می‌دهد تا بدون از دست دادن دسترسی به زمینه‌ای که رویداد اصلی در آن فراخوانی شده است، به‌عنوان فراخوانی استفاده شوند. به عنوان یک آزمایش ساده برای نشان دادن این اصل در عمل، می‌توانید یک عملکرد پیام‌رسانی تأخیر مانند زیر را تنظیم کنید:

function delayedMessage(message, delay) {
 
    setTimeout(function(message) {
        console.log(message);
    }, delay);

}

delayedMessage("Hello World", 1000);

عملکرد ساده است، پیام را می پذیرد و تاخیر را در میلی ثانیه می پذیرد. پس از عبور از تاخیر، باید پیام را به کنسول وارد کند. با این حال، هنگامی که کد اجرا می شود، به جای پیامی که ارسال شده است، undefined به کنسول وارد می شود.

مطلب مرتبط:   مقدمه ای بر کارکنان سرویس جاوا اسکریپت

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

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

function delayedMessage(message, delay) {
 
    setTimeout(() => {
        console.log(message);
    }, delay);

}

delayedMessage("Hello World", 1000);

اکنون، هنگام اجرا، تابع delayedMessage پیام را ثبت می کند. علاوه بر این، این اجازه می دهد تا چندین پیام با تاخیرهای مختلف در صف قرار گیرند و همه آنها همچنان در زمان درست رخ می دهند.

این به دلیل این واقعیت است که هر بار از delayedMessage استفاده می شود، محدوده خود را با کپی خود از تابع پیکان داخلی ایجاد می کند.

خوانایی کد

در حالی که توابع فلش به عنوان پاسخ به تماس مفید هستند، برای تمیز و مختصر نگه داشتن کد نیز استفاده می شوند. در بخش بالا می بینید که استفاده از یک تابع فلش به راحتی مشخص می کند که با فراخوانی تابع delayedMessage چه اتفاقی می افتد.

همانطور که توابع پیچیده تر می شوند، داشتن کمی وضوح می تواند کد را بسیار خواناتر کند. هنگام نوشتن اشیاء، این می تواند کد را هنگام اضافه کردن توابع کوتاه ساده تر کند:

class counter {
    _count = 0;
    increment = () => {
        this._count += 1;
    }
    decrement = () => {
        this._count -= 1;
    }
    count = () => {
        return this._count;
    }
}

let ct = new counter();

نقش در برنامه نویسی شی گرا

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

class orderLineItem {
    _LineItemID = 0;
    _Product = {};
    _Qty = 1;

    constructor(product) {
        this._LineItemID = crypto.randomUUID();
        this._Product = product
    }

    changeLineItemQuantity = (newQty) => {
        this._Qty = newQty;
    }
}

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

مطلب مرتبط:   نحوه ایجاد درخواست HTTP در Go

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

چه زمانی باید از توابع پیکان جاوا اسکریپت استفاده کنید؟

توابع پیکان جاوا اسکریپت یک ویژگی فوق العاده قدرتمند است که به توسعه دهندگان کنترل بسیار بیشتری بر روی محدوده دسترسی یک تابع می دهد. دانستن اینکه چه زمانی یک callback باید به محدوده والد خود دسترسی داشته باشد و چه زمانی نباید دسترسی داشته باشد، می‌تواند به توسعه‌دهنده کمک کند تا از کدام نوع اعلان استفاده کند.

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

توسعه‌دهندگان JS باید از تفاوت‌های بین این دو نحو آگاه باشند و هنگام اعلام توابع خود به این نکته توجه داشته باشند که کدام نحو مناسب است.