الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Lambda و Java 8

Featured Replies

بتاريخ:

سلام عليكم

 

مع إطلاق الإصدار الثامن من جافا (java 8) كان أكثر شيء جلب انتباه المطورين هو إضافة تقنية lambda التي هي موجودة في  اللغات التي توصف بأنها  functional

 

أصل المشكلة التي حلتها lambda 

 

في الجافا لا يمكننا أن نمرر باراميتر parametre إلى أي دالة إلا احد اثنين إما : 

      مؤشر (référence)  نحو متغير أولي 

     أو مؤشر نحو كائن

int x;
String y;

ولا يمكننا أن نمرر دالة كبراميتير إلى دالة اخرى

لان الجافا لغة كائنية 100/100 فكل شيء فيها هو كائن

 

 

 

كيف كانت تتعامل الجافا مع مثل هذه المشكلة قبل الإصدار الثامن

 

في الطريقة التقليدية عندما نريد ان نمرر دالة إلى دالة أخرى كنا نقوم بخطوتين

أولا إنشاء interface يحتوي دالة واحدة  (هي التي ستُمرَر)

ثانيا نقوم ب implimentation  للأنترفاس داخل قوسي الدالة الأم

 

وللتوضيح نأخذ المثال الأكثر شهرة في الجافا وهو عندما نريد إنشاء thread

 

من قرأ جيدا فصول الجافا se يعرف أنه إذا اراد إنشاء thread

فإما أن يرث كلاس جديد من الكلاس Thread  وهذ الطريقة ليست مما نحن فيه

وإما أن يقوم ب implimentation لل interface --->Runnable

 

 

هذه هي Runnable Interface

public interface Runnable {

public abstract void run();
}

وهذه هي الطريقة التي وصفتها 

 

public class JavaApplication5
{


      public static void main(String[] args)
      {
Thread th = new Thread(new Runnable()
{
     @Override
     public void run()
     {
System.out.print("Salam ahmed");
     }
});


th.start();


      }


}

الآن  مع التقنية الحديثة صار الأمر اسهل ، فلسنا بحاجة  لل  implimentation  ولا  Override

 

وإليكم  طريقة إنشاء ثريد بالتقنية lambda

public class JavaApplication5
{

public static void main(String[] args)
{
    Thread th2 = new Thread(() -> System.out.println("Salam ahmed !"));
    th2.start();
}
}

هكذا أفضل اليس كذالك

 

 

ما هي lambda ؟

 

Lambda هي دالة مجهولة (anonymous function)

ننشأها لأداء مهمة ما ، وجودها يكون مؤقتا فقط لأداء تلك المهمة

 

 

Syntaxe

 

الكتابة العامة للدالة lambda  هي

(paramètres) -> expression_simple

أو

(paramètres) -> { bloc_d'instructions }

أمثلة ذلك

(x) -> x * 2 #1
(x) -> { return x * 2; } #2
(s) -> { System.out.println(s); } #3
() -> 42 #4 

الأولى  تستقبل الدالة متغير من نوع int وترجع بقيمة واحدة تلقائيا هي قيمة العملية الحسابية وفي هذه الحالة لا نحتاج لا إلى معقوفتين ولا إلى return

الثانية  مثل الأولى إلا اننا استعملنا المعقوفتين { } وفي هذه الحالة يجب وضع الكلمة return

الثالثة تستقبل arg من نوع string ولا ترجع بشيء يعني هي مثل void

الرابعة لا تستقبل اي arg وترجع بثابت هو 42

 

 

 

استعمالات lambda

 

إحدى أكثر الاستعملات التي ستطبق فيها هي ما رايناه سابقا وستستعمل أيضا بكثرة في 

 

 Listener Lambda

 

 

في الطريقة التقليدية كنا نقوم ب impl للأنترفاس ActionListener عند حدث الضغط على زر (button)

هكذا

JButton greeterButton = new JButton("Click me !");
greeterButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(null, "Hello !");
}
});

ومع lambda صارت هكذا 

JButton greeterButton = new JButton("Click me !");
greeterButton.addActionListener( event -> {
JOptionPane.showMessageDialog(null, "Hello !");
});

envet هو البراميتر التي تستقبله الدالة |المجهولة lambda

 

تنبيه : إلى حد الساعة لا يوجد دعم من jdeveloper للجافا 8

مراجع

http://viralpatel.ne...-java-tutorial/

http://blog.zenika.c...8-et-les-Lambda

تم تعديل بواسطة ahmed_ah_sh

بتاريخ:

مع اني ما عندي اي معلومه عن الجافا بس مشكور لجهودك اخي الفاضل :)

بتاريخ:

ربنا يجازيك خير والله

بتاريخ:

معلومات قيمة يا مهندس..

بوووركت

بتاريخ:

مشكور على المعلومات القيَمه

بتاريخ:

جميل مشاركة النقاط الجديدة وإن كنت أرى أن هذه الطريقة لا تجعل الكود واضحاً تماماً ولكن على العموم هي مدعومة ومن أراد استخدامها فلا بأس

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.