آموزش: lambda ، قابلیتی فوق العاده در جاوا 8
جاوا در دهه ی 90 میلادی توسط جیمزگاسلینگ طراحی شد ، زبانی که از همون ابتدا تا به امروز شی گرای محض بود! یعنی برای هرکاری مجبور بودید در قالب کلاس و آبجکت ها با بلاک های کد کار کنید اما در آخرین نسخه از این زبان قدرتمند یعنی جاوا 8 ویژگی های جالبی اضافه شده یکی از این ویژگی ها عبارات لامبدا یا (lambda expression) هست این ویژگی زبان جاوا رو از شی گرایی محض خارج میکنه و اون رو به زبان های تابعی یا (functional programming language) نزدیک میکنه زبان هایی مثل جاوااسکریپت و ...
قبل از توضیح بیشتر لامبدا اول نگاهی میکنیم به anonymous inner class ها
btn.setOnClickListener(new OnClickListener(){
@override
public void onClick(View v){
//
}
});
این تکه کد کاملا آشناست.به این ساختار anonymous inner class میگن یعنی کلاس داخلی بی نام
علت نام گذاری: چون داخل متد setOnClickListener ، به عنوان پارامتر ورودی یک اینترفیس رو درون یک بلاک که اسمی نداره پیاده سازی کردیم ، اون بلاک میشه کلاس ما ، اسمم که نداره ، داخل کلاس اصلیمونم که هست.
و برای انجام این رویداد یعنی رویداد کلیک شدن از این کلاس بی نام یک شی هم ساختیم
new OnClickListener(){...}
همه اینا رو گفتم تا به این نکته برسیم که شما در جاوا عملا بدون ساخت آبجکت از کلاسها و یا پیاده سازی اینترفیس ها نمیتونید هیچ کاری کنید و حتما باید در این ساختار عمل کنید.
خب لامبدا اومده ما رو از شر anonymous inner class ها خلاص کنه:) ، همون کد رویداد کلیک کردن رو اگر بخوایم با لامبدا بنویسیم میشه این:
btn.setOnClickListener((View v) -> { // do something here });
دیگه نیازی به ساخت آبجکت و پیاده سازی متد onClick نیست میبینید که چقدر خلاصه تر ، خوانا تر و سریع هست!
بزارید یک مثال دیگه هم بزنیم:
در جاواهای قبل تر از 8 برای مرتب سازی یک آرایه اینطوری می نوشتیم:
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, new Comparator<String>() { @Override public int compare(String a, String b) { return b.compareTo(a); } });
با استفاده از متد استاتیک sort کلاس Collections میتونیم آرایه رو مرتب کنیم ، که پارامتر اول لیست آرایه و پارامتر دوم یک interface و یا همون کلاس بی نام رو میگیره...
همین کد در جاوا 8 و با لامبدا اینطوری نوشته میشه:
Collections.sort(names, (String a, String b) -> { return b.compareTo(a); });
واقعا عالیه ، از اینم میتونه خلاصه تر بشه:
Collections.sort(names, (String a, String b) -> b.compareTo(a));
و حتی بیشتر!!:
Collections.sort(names, (a, b) -> b.compareTo(a));
به طور کلی سینتاکس عبارات لامبدا به این شکل هست:
(parameters) -> body
- تعریف نوع داده ی پارامترها اختیاری است
- گذاشتن پرانتز اختیاری است
- گذاشتن کلمه ی کلیدی return اختیاری است
اما خبر بد اینه که هنوز اندروید از جاوا 8 به طور رسمی پشتیبانی نمیکنه و اما اینجا یک راه غیر رسمی برای پشتیبانی از جاوا 8 در اندروید گفته شده.
کاربردهای لامبدا بسیار گسترده تر از این موردی هست که اشاره شد این مطلب فقط جهت آشنایی و معرفی این ویژگی جالب جاوا 8 بود
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .