آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

آموزش: lambda ، قابلیتی فوق العاده در جاوا 8

javac  8 سال پیش  7 سال پیش
+37 0

جاوا در دهه ی 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

  1. تعریف نوع داده ی پارامترها اختیاری است
  2. گذاشتن پرانتز اختیاری است
  3. گذاشتن کلمه ی کلیدی return اختیاری است

اما خبر بد اینه که هنوز اندروید از جاوا 8 به طور رسمی پشتیبانی نمیکنه و اما اینجا یک راه غیر رسمی برای پشتیبانی از جاوا 8 در اندروید گفته شده.

کاربردهای لامبدا بسیار گسترده تر از این موردی هست که اشاره شد این مطلب فقط جهت آشنایی و معرفی این ویژگی جالب جاوا 8 بود

+1 0
ممنون مفید بود ! (8 سال پیش)
0 0
مفید بود ، ممنون (8 سال پیش)
0 0
مطلب خوبی بود مرسی (8 سال پیش)
+1 0
ممنون از وقتی که گذاشتی. خیلی مفید بود... (8 سال پیش)
0 0
خیلی سپاس از وقتی که گذاشتید ، بسیار عالی بود (7 سال پیش)
0 0
متشکر @ javac (7 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .