بتاريخ: 26 مارس 201412 سنة comment_248451 سلام عليكم مع إطلاق الإصدار الثامن من جافا (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 تم تعديل 26 مارس 201412 سنة بواسطة ahmed_ah_sh تقديم بلاغ
بتاريخ: 26 مارس 201412 سنة comment_248460 مع اني ما عندي اي معلومه عن الجافا بس مشكور لجهودك اخي الفاضل تقديم بلاغ
بتاريخ: 4 أبريل 201412 سنة comment_248844 جميل مشاركة النقاط الجديدة وإن كنت أرى أن هذه الطريقة لا تجعل الكود واضحاً تماماً ولكن على العموم هي مدعومة ومن أراد استخدامها فلا بأس تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.