لامبدا یا تابعهای مرتبط اندروید، ابزاری است که به برنامه نویسان اندروید کمک میکند تا کد خود را کوتاهتر، خواناتر و قابلفهمتر کنند. لامبدا در واقع یک نوع از توابع بدون نام است که به صورت کوتاهتر و جمعوجورتری از توابع عادی نوشته میشوند و عمدتا برای پاس دادن توابع به عنوان پارامتر به توابع دیگر مورد استفاده قرار میگیرد.
در فلاتر نیز میتوان از لامبدا استفاده کرد. برای استفاده از لامبدا در فلاتر ابتدا باید متد مورد نظر را از داخل یک تابع دیگر فراخوانی کرد. سپس میتوانید تابع مورد نظر را با استفاده از لامبدا به صورت زیر نوشته و به متد فرستاده و اجرا کنید:
methodName((param1, param2) => expression);
در کد بالا methodName
نام متدی است که به آن لامبدا ارسال میشود و param1
و param2
پارامترهای ورودی تابع هستند. expression
نیز بیانگر بدنه تابع است.
اگر بدنه تابع تنها یک خط باشد، میتوانید از علامت {}
و return
صرف نظر کنید و به صورت زیر نوشته شود:
methodName((param1, param2) => expression);
در مثال قبل expression
نیز تنها شامل یک عبارت return
است.
اگر بدنه تابع چند خطی باشد، باید از {}
استفاده کنید و تمام خطوط کد باید داخل آن نوشته شوند. به عنوان مثال:
methodName((param1, param2) => {
statement1;
statement2;
return statement3;
});
در مثال بالا statement1
و statement2
دو عبارت میباشند که انجام میدهند و سپس با استفاده از return
عبارت، statement3
به عنوان مقدار بازگشتی تابع برگردانده میشود.
همچنین میتوانید از پارامترهای اختیاری در توابع لامبدا استفاده کنید. برای این کار، باید پارامترهای اختیاری را در داخل پرانتز تعریف کنید و به عنوان پارامترهای تابع در نظر گرفته شوند. به عنوان مثال:
methodName((param1, {param2 = defaultValue}) => expression);
در مثال بالا param2
یک پارامتر اختیاری است که به صورت پیشفرض مقدار defaultValue
را دارد.
در نهایت، لامبداها میتوانند به صورت شرطی نیز نوشته شوند. برای این کار، باید از عبارت if
و else
استفاده کنید. به عنوان مثال:
methodName((param1) => param1 == true ? expression1 : expression2);
در مثال بالا اگر param1
برابر با true
باشد، expression1
اجرا خواهد شد و در غیر این صورت expression2
اجرا خواهد شد.
و در ادامه چند مثال از کاربردهای مختلف لامبداها در زبان Dart :
- مرتب سازی لیست:
List<int> numbers = [3, 1, 4, 1, 5, 9];
// مرتب سازی لیست به صورت صعودی با استفاده از لامبدا
numbers.sort((a, b) => a.compareTo(b));
// مرتب سازی لیست به صورت نزولی با استفاده از لامبدا
numbers.sort((a, b) => b.compareTo(a));
- فیلتر کردن یک لیست:
List<int> numbers = [3, 1, 4, 1, 5, 9];
// فیلتر کردن لیست به صورت حتی با استفاده از لامبدا
List<int> evenNumbers = numbers.where((number) => number % 2 == 0).toList();
// فیلتر کردن لیست به صورت فرد با استفاده از لامبدا
List<int> oddNumbers = numbers.where((number) => number % 2 != 0).toList();
- تعریف تابع با پارامترهای اختیاری:
void printPersonInfo(String name, {int age = 18, String city = 'Tehran'}) {
print('Name: $name, Age: $age, City: $city');
}
// تعریف تابع با استفاده از لامبدا و پارامترهای اختیاری
var printUser = (String name, {int age = 18, String city = 'Tehran'}) =>
print('Name: $name, Age: $age, City: $city');
// فراخوانی تابع با استفاده از لامبدا و پارامترهای اختیاری
printUser('John'); // Name: Erfan, Age: 18, City: Tehran
printUser('Sara', age: 25, city: 'Shiraz'); // Name: Sara, Age: 25, City: Shiraz
- تعریف تابع با شرط:
int maxNumber(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
// تعریف تابع با استفاده از لامبدا و شرط
var max = (int a, int b) => a > b ? a : b;
// فراخوانی تاب
- استفاده از متد forEach برای اجرای عملیات روی تمام المانهای یک لیست:
List<int> numbers = [3, 1, 4, 1, 5, 9];
// استفاده از متد forEach برای اجرای عملیات روی تمام المانهای یک لیست با استفاده از لامبدا
numbers.forEach((number) => print(number));
- تعریف یک رشته فرمت شده:
String formatFullName(String firstName, String lastName) {
return '$firstName $lastName';
}
// تعریف یک رشته فرمت شده با استفاده از لامبدا
var fullName = (String firstName, String lastName) => '$firstName $lastName';
// فراخوانی تابع با استفاده از لامبدا
print(fullName('Erfan', 'Sadi')); // Erfan Sadi
همانطور که مشاهده میکنید، لامبداها میتوانند در بسیاری از موارد مفید باشند و به کمک آنها میتوانید کد خود را کوتاهتر و خواناتر کنید. با یادگیری و استفاده از لامبداها میتوانید بازدهی کار خود را افزایش دهید.با استفاده از لامبداها، میتوانید پرفورمنس بیشتری به برنامهی خود بدهید.