java 8 lambda expression
TRANSCRIPT
By : Rabei Dogho• Technical Diploma in
Computer Engineering techniques with 96.29
rate• 2nd year Computer and
Automatic Control Engineering – Tishreen
University
JAVA 8 Lambda Expression
Spring Workshop 2015 - Java 8 Lambda Expression 1
Basic Concepts …
Contents:
Spring Workshop 2015 - Java 8 Lambda Expression 2
Preface ………………….…………….……….. 3What is a Lambda Expression ...................... 4Lambda Parameters ………………………… 5Lambda Body…………………………………. 6Lambda Expression Examples……………… 7Functional Interface ………………………… 11Functional interface in JAVA 8 …………… 13The Type of Lambda Expression ................. 15Lambda Expression Examples ( Runnable
Lambda , Listener Lambda ) ……………… 16
Preface…
Spring Workshop 2015 - Java 8 Lambda Expression 3
تعابير الالمبدا هي عبارة عن توابع مجهولة االسم و تستخدم , ++C# , C} في العديد من اللغات البرمجية مثل ال
JavaScript , PHP , Ruby , VisualBasic.NET V9} أصبح استخدامها ممكنا في الجافا مع إصدار الJAVA 8
(JDK 8). تستخدم بشكل شائع من أجلFunctional
Programming) و تورث من Functional Interface « (الواجهات الوظيفية « و سوف يتم شرح فكرة مبسطة عنها
التي تساعدك ليس فقط في كتابة أكواد أقصر بل في إضفاء المزيد من الوضوح في التفكير بتصميم األغراض و
التوابع .
What is a Lambda Expression ?
Spring Workshop 2015 - Java 8 Lambda Expression 4
ماهيLambda Expression؟؟؟ هي طريقةMethod. من دون معرف وصول . هي طريقة من دون تحديد نمط القيمة المعادة. كما أنها طريقة من دون اسم هي نقطة قوة ال Lambda Expressionال •
Anonymous Inner Class و ذلك بتحويل عدة أسطر برمجية إلى تعليمة واحدة و هذا يحل المشكلة العمودية التي
بحل أفقي أكثر بساطة.Inner classتواجهنا بسبب ال تتألف من ثالثة أجزاء :Lambda Expressionال •
الئحة الوسطاءرمز السهمالجسم
(int x , int y) -> x+y
Spring Workshop 2015 - Java 8 Lambda Expression 5
: الوسطاءo توضع الوسطاء بين قوسين و يفصل بينها بواسطة فاصلة
.o يمكن أن تستقبلLambda Expression أي عدد من
الوسطاء.o نمط الوسطاء يمكن أن يصرح بوضوح أو أن يستنتج
تلقائيا من ضمن سياق المقطع البرمجي .o إذا أردت تقديم الئحة وسطاء فارغة يمكنك ذلك بواسطة
قوسين فارغين .o عند وجود نوع وسيط واحد يستنتج من ضمن السياق
ليس إلزاميا استخدام األقواس .
Lambda Parameters:
Spring Workshop 2015 - Java 8 Lambda Expression 6
: جسم التعبيرo جسمLambda Expression يمكن أن يحتوي على أي عدد
من التعليمات .o عندما يكون هناك تعليمة واحدة قوسا الكتلة }{ غير ضروريان
Lambdaو نمط اإلعادة للتوابع المجهولة المقدمة بواسطة ال Expression. هو نفسه ما يقوم جسم التعبير بإعادته
o عندما ال يعيد التعبير شيئا يستنتج تلقائيا أنه من النوعvoid. obreak و continue مسموحتا االستخدام ضمن الحلقات في
جسم التعبير .o إذا كان الجسم يعيد قيمة فكل مسار تحكم ( المسارات
throwالشرطية ) يجب أن يعيد قيمة ما أو أن يرمي إستثناء ( exception(
Lambda Body:
Lambda Expression Examples:
Spring Workshop 2015 - Java 8 Lambda Expression 7
: أمثلة متفرقة
1) n -> n%2!=02) ( char c) -> c == y3) ( x , y ) -> x + y4) ( int a, int b) -> a*a + b*b5) () -> 426) () -> { return 3.14}7) ( String S) -> { System.out.println(s)};8) () -> { System.out.println("Hello World! ")}
Lambda Expression Examples :
Spring Workshop 2015 - Java 8 Lambda Expression 8
: شرح األمثلة) ويعيد قيمة n(في هذا المثال يعطى التعبير رقم صحيح 1)
منطقية تحدد ما إذا كان سالب .) و يعيد قيمة cفي هذا المثال يعطى التعبير محرف (2)
” .yمنطقية تحدد ما إذا كان هذا المحرف مساو ل “) و يعيد رقما آخر هو ناتج x,yيعطى التعبير هنا رقمين (3)
جمعهما .) يعيد رقما آخر x,yبإعطاء هذا التعبير عددين صحيحين (4)
) .x,yهو ناتج جمع مربعي العددين ( .42تعبير ال يأخذ أي وسطاء و يعيد العدد الصحيح 5) .3.14تعبير ال يأخذ أي وسطاء و يعيد العدد المضاعف 6)
Lambda Expression Examples :
Spring Workshop 2015 - Java 8 Lambda Expression 9
: شرح األمثلةبإعطاء هذا التعبير سلسة 7)
) يطبع هذه السلسة S(محرفية إلى الخرج القياسي حيث أن نمط إعادة التعبير هنا هو من
) .voidالنوع (بدون إعطاء هذا التعبير أي 8)
Helloوسيط يطبع عبارة “World إلى الخرج القياسي ”!
و نمط اإلعادة هنا هو من النوع )void. (
Lambda Expression
Spring Workshop 2015 - Java 8 Lambda Expression 10
و اآلن بعد أن عرفنا ما هيتعابير الالمبدا و كيفية
صياغتها و شرحنا بعض األمثلة المبسطة عنها سوف نناقش من خالل مثال عملي
أهمية استخدامها ضمن سياق البرنامج و آلية استخدامها مع
الواجهات الوظيفية Functional Interface .
وقبل البدء بذلك سوف نوضح بعض المفاهيم المرتبطة مع
استخدام تعابير الالمبدا.
Functional Interface
Spring Workshop 2015 - Java 8 Lambda Expression 11
الFunctional Interface أو الواجهات الوظيفية هي تحوي طريقة مجردة واحدة Interfaceعبارة عن واجهة
Single أي ( SAMفقط . و كانت تعرف سابقا ب Abstract Method. (
قبل الـJava 8 كان يوجد العديد من الواجهات التي تتوافق مع هذه الفكرة مثل :
public interface Comparator <T>{
int compare(T o1, T o2);
} public interface Callable <V>{
V call() throws Exception;
}
Functional Interface
Spring Workshop 2015 - Java 8 Lambda Expression 12
public interface ActionListener extends EventListener {
public void actionPerformed( ActionEvent e);
} public interface Runnable {
public void run();
}
Java 8 Functional Interface
Spring Workshop 2015 - Java 8 Lambda Expression 13
Java 8 Examples: العديد من الواجهات الوظيفية الجديدة عرفت فيJava 8
للداللة FunctionalInterface@كما أضيفت العالمة على أننا ننوي التصريح عن الواجهة التالية كواجهة وظيفية ،
و هذه بعض األمثلة عن الواجهات الجديدة و التي هي : java.util.functionموجودة ضمن الحزمة
public interface Predicate<T> {
boolean test(T t);
} public interface Function<T , R> {
R apply(T t);
}
Java 8 Functional Interface
Spring Workshop 2015 - Java 8 Lambda Expression 14
public interface Consumer<T> {
void accept(T t);
} public interface Supplier<T> {
T get();
} public interface BinaryOperator<T> {
T apply(T left, T right);
}
The Type of Lambda Expression
Spring Workshop 2015 - Java 8 Lambda Expression 15
ماهو نمط تعابير الالمبدا ؟ في الجافا نقدم تعابير الالمبدا كأغراض ، و لذلك يجب أن
يحددو إلى نمط بيانات معروف ك واجهة وظيفية و هذا يسمى نمط الهدف .
و بما أن الواجهات الوظيفية يمكنها فقط أن تحتوي علىطريقة مجردة واحدة ، فإن أنواع وسطاء تعبير الالمبدا
يجب أن يراسلو الوسطاء في تلك الطريقة ، و نمط اإلعادة لتعبير الالمبدا يجب أن يراسل نمط إعادة تلك الطريقة ،
كما أنه رمي أي استثناء من قبل تعبير الالمبدا يجب أن ) لتلك الطريقة throws(يكون مسموحا بوساطة الصيغة
في الواجهة الوظيفية . األمثلة التالية هي عبارة عن أمثلة لتعابير المبدا محددين إلى
نمط هدف :
Lambda Expression Examples
Spring Workshop 2015 - Java 8 Lambda Expression 16
Predicate<Integer> isOdd = n -> n % 2 != 0; BinaryOperator<Integer> sum = (x, y) -> x + y; Callable<Integer> callMe = () -> 42; Runnable runner= () -> { System.out.println("Hello World!"); };
Lambda Expression Examples
Spring Workshop 2015 - Java 8 Lambda Expression 17
و اآلن من خالل هذا المثال البسيط سوف نوضح الفائدة من استخدام تعابيرالالمبدا :
package com.example.lambda;
public class RunnableTest {
public static void main(String[] args) {
System.out.println("=== RunnableTest ===");
// Anonymous Runnable
Runnable r1 = new Runnable(){
@Override public void run(){
System.out.println("Hello world one!");
}
};
Lambda Expression Examples
Spring Workshop 2015 - Java 8 Lambda Expression 18
// Lambda Runnable
Runnable r2 = () -> {
System.out.println("Hello world two!");
};
// Run me!
r1.run();
r2.run();
}
}
و كيف أن تعابير الالمبدا ساعدتنا r2و ال r1الحظ الفرق بين تعريف ال في تقليص عدد أسطر الشيفرة البرمجية الالزمة اتطبيق الواجهة الوظيفية
Runnable.
Lambda Expression Examples
Spring Workshop 2015 - Java 8 Lambda Expression 19
Listener Lambda:هذين المقطعين البرمجيين يوضحان أهمية تعابير الالمبدا عند معالجة
:swingاألحداث الخاصة بتصميم الواجهات باستخدام
//Anonymous Action Listener:
testButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
System.out.println("Click Detected by Anon Class");
}
});
Lambda Expression Examples
Spring Workshop 2015 - Java 8 Lambda Expression 20
// Lambdas Listener :
testButton.addActionListener(e -> {
System.out.println("Click Detected by Lambda Listner");
});