توابع در زبان Dart — راهنمای مقدماتی

۳۴۵ بازدید
آخرین به‌روزرسانی: ۲۹ شهریور ۱۴۰۲
زمان مطالعه: ۳ دقیقه
توابع در زبان Dart — راهنمای مقدماتی

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

ساختار توابع در زبان Dart

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

توابع معمولاً با ساختار زیر ایجاد می‌شوند:

1void printName(String name) {
2  print(name)
3}

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

printName نام تابع است. این نامی است که از آن در ادامه استفاده خواهیم کرد. نام تابع باید کارکرد تابع را توصیف کند.

(String name) درون پرانتزها قرار دارد و نوع پارامتر تابع و نام آن را توصیف می‌کند. پارامترها متغیرهایی هستند که درون تابع تعریف می‌شوند. به مثال کلاسیک زیر توجه کنید:

1Integer sum(Integer a,Integer b) {
2	return a+b;
3}

این تابع به جمع زدن دو عدد صحیح کمک می‌کند. مقدار اول و مقدار دوم ارائه شده‌اند و مجموع این دو عدد از سوی تابع بازگشت می‌یابد. می‌توان از آن به صورت زیر استفاده کرد:

1String result = sum(2+2);
2print(result);
3
4//Result from the execution: 4

در کد فوق یک متغیر به نام result ایجاد کردیم که نتیجه به دست آمده از تابع sum را ذخیره می‌کند. در ادامه مقدار آن را که 4 است پرینت می‌کنیم.

به طور خلاصه می‌توان عملکرد یک تابع را به دستگاه بستنی‌ساز تشبیه کرد. ما موارد لازم (پارامترها) را به آن می‌دهیم و یک بستنی خوشمزه از آن پس می‌گیریم. به مثال زیر توجه کنید:

1AwesomeIceCream IceCreamMachine(String flavourExtract,Double coupsOfMilk,Integer sugarCup){
2	return AwesomeIceCream(flavourExtract,coupsOfMilk,sugarCup)
3}

در این مثال پیشرفته‌تر، یک تابع به نام IceCreamMachine ایجاد کرده‌ایم که یک شیء AwesomeIceCream بازگشت می‌دهد. شیء وهله‌ای از کلاس است. به خاطر داشته باشید که AwesomeIceCream یک شیء مانند نوع داده Strings ،Integer یا Double است.

تابع Arrow

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

1void printName(String name) => print(name);

این شیوه موجب کوچک ماندن تابع می‌شود و خوانایی کد را افزایش می‌دهد. در ادامه مثال‌های قبلی خود را به ساختار تابع arrow تبدیل می‌کنیم.

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

1Integer sum(Integer a,Integer b) => a+b;

اکنون شاید بپرسید چرا تابع ice cream machine را به ساختار arrow تبدیل نکردیم؟

تابع بی‌نام

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

1var icecreamFlavours = ['chocolate', 'vanilla', 'orange'];
2icecreamFlavours.forEach((item) {
3  print('We have the $item flavour');
4});

نکته: کار تابع forEachFunction این است که کد درون خود را برای هر عنصر در لیست اجرا می‌کند.

خروجی کد فوق به صورت زیر است:

We have the chocolate flavour
We have the vanilla flavour
We have the orange flavor

تابع ()forEach یک پارامتر می‌گیرد. منظور از تابع در Dart چیزی مانند انواع دیگر است.

در مورد تابع بی‌نام، از ساختار زیر استفاده می‌کنیم:

1(parameterName) {
2  Body of the function
3}

اگر همچنان سردرگم هستید، می‌توانید آن را به عنوان اختصاری برای مثال زیر ببینید:

فرض کنید لیستی دارید که می‌خواهید با تعریف چرخه تکرار روی آن آیتم‌هایی را پرینت کنید، اما نمی‌خواهید آیتم‌ها را در همان متدی که هم اینک قرار دارید پرینت کنید. به کدی مانند زیر نیاز داریم:

1var list = List.from([1, 2, 3, 4, 5, 6]);
2list.forEach(
3//Here we should print our items
4);

از آنجا که می‌خواهیم منطق را در متد دیگر خود داشته باشیم، می‌توانیم یک تابع به نام ()getPrintElementFunction ایجاد کنیم:

1void function; getPrintElementFunction() {
2  return (item) {
3    print("The number is $item");
4  };
5}

این تابع یک تابع بازگشت می‌دهد. این تابع کاملاً نادر است. می‌توانید از این تابع به صورت زیر درون متد forEach استفاده کنید:

1list.forEach(getPrintElementFunction());

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

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
swlh
نظر شما چیست؟

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