مطمئناً هر کسی که به برنامه نویسی علاقهمند است، با مفهوم توابع آشنا است. توابع، یکی از مفاهیم اساسی در زبان برنامه نویسی دارت نیز هستند. در این مقاله، به بررسی انواع توابع در زبان برنامه نویسی Dart میپردازیم.
توابع در دارت میتوانند به دو شکل تعریف شوند: توابع بدون نوع و توابع با نوع. توابع بدون نوع، توابعی هستند که نوع دادهای را برگرداننده خود تعیین نمیکنند. به عبارت دیگر، نوع مقداری که تابع برمیگرداند، به صورت ضمنی تعیین میشود. در مقابل، توابع با نوع نوع مقدار برگردانده شده را به صورت صریح مشخص میکنند.
در زبان برنامه نویسی دارت، توابع میتوانند پارامترهای ورودی داشته باشند. این پارامترها میتوانند به عنوان ورودیهای تابع عمل کنند و مقادیری را دریافت کنند. از طریق این پارامترها، میتوان اطلاعات را به تابع منتقل کرد و در داخل تابع به آنها دسترسی داشت.
توابع در دارت میتوانند به عنوان پارامتری برای توابع دیگر نیز استفاده شوند. این مفهوم به نام توابع بازگشتی (Recursive Functions) شناخته میشود. در توابع بازگشتی، تابع خود را فراخوانی میکند و اجازه میدهد تا تابع به صورت مکرر اجرا شود. این روش میتواند در حل مسائل با ساختار تکراری و تعاملی بسیار مفید باشد.
انواع تابع در دارت
در دارت، توابع به انواع مختلفی دستهبندی میشوند که هر کدام کاربرد خاص خود را دارند. آشنایی با این انواع به شما کمک میکند تا از توابع به طور کارآمدتر و موثرتر در برنامههای خود استفاده کنید.
تابع بدون بازگشت:
این تابع در دارت هیچ مقداری را به عنوان نتیجه عملیات خود باز نمیگردانند و فقط برای انجام عملیاتی مانند چاپ متن یا تغییر متغیرها استفاده میشوند.
function printMessage() {
print("پیام از تابع بدون بازگشت");
}
// فراخوانی تابع
printMessage(); // "پیام از تابع بدون بازگشت" چاپ میشود
تابع با بازگشت:
این تابع در دارت یک مقدار را به عنوان نتیجه عملیات خود باز میگردانند. نوع دادهای مقدار بازگشتی باید با نوع دادهای که در تعریف تابع مشخص شده است مطابقت داشته باشد.
function calculateSum(int num1, int num2) {
return num1 + num2;
}
// فراخوانی تابع و ذخیره نتیجه در متغیر
int sum = calculateSum(10, 5);
print("مجموع: $sum"); // "مجموع: 15" چاپ میشود
تابع بدون پارامتر:
این تابع در دارت هیچ پارامتری را دریافت نمیکنند و از مقادیر پیشفرض یا متغیرهای سراسری استفاده میکنند.
function greet() {
print("سلام از تابع بدون پارامتر!");
}
// فراخوانی تابع
greet(); // "سلام از تابع بدون پارامتر!" چاپ میشود
تابع با پارامترهای اجباری:
این تابع در دارت باید هنگام فراخوانی، پارامترهای مورد نیاز را دریافت کنند. عدم ارسال پارامترها برای این نوع توابع خطا ایجاد میکند.
function calculateArea(double length, double width) {
return length * width;
}
// فراخوانی تابع با ارسال پارامترهای لازم
double rectangleArea = calculateArea(5.0, 3.0);
print("مساحت مستطیل: $rectangleArea"); // "مساحت مستطیل: 15.0" چاپ میشود
// خطا: عدم ارسال پارامتر width
// calculateArea(5.0);
توابع با پارامترهای اختیاری:
این تابع در دارت میتوانند هنگام فراخوانی، پارامترهای اختیاری را دریافت کنند. اگر پارامترهای اختیاری ارسال نشوند، از مقادیر پیشفرض استفاده میشود.
function greetUser([String name = "کاربر پیشفرض"]) {
print("سلام $name به دنیای برنامهنویسی با دارت!");
}
// فراخوانی تابع با نام کاربر
greetUser("علی"); // "سلام علی به دنیای برنامهنویسی با دارت!" چاپ میشود
// فراخوانی تابع بدون ارسال نام
greetUser(); // "سلام کاربر پیشفرض به دنیای برنامهنویسی با دارت!" چاپ میشود
توابع با نامگذاری شده:
در این تابع در دارت، آرگومانها با نام به آنها مقدار داده میشود، که خوانایی کد را افزایش میدهد.
function calculateRectangleArea(double length, {double width = 5.0}) {
return length * width;
}
// فراخوانی تابع با ارسال نام پارامترها
double area = calculateRectangleArea(length: 10.0, width: 2.0);
print("مساحت مستطیل: $area"); // "مساحت مستطیل: 20.0" چاپ میشود
// فراخوانی تابع با ارسال نام فقط یک پارامتر (width پیشفرض استفاده میشود)
double anotherArea = calculateRectangleArea(length: 15.0);
print("مساحت مستطیل دیگر: $anotherArea"); // "مساحت مستطیل دیگر: 75.0" چاپ میشود
توابع تو در تو:
تابعی که در داخل تابع دیگری تعریف شده است. توابع تو در تو میتوانند به متغیرهای محلی تابع بیرونی دسترسی داشته باشند.
function outerFunction() {
int outerVariable = 10;
function innerFunction() {
print("متغیر محلی تابع بیرونی: $outerVariable");
}
innerFunction();
}
// فراخوانی