java 8 lambda expression

20
By : Rabei Dogho Technical Diploma in Computer Engineering techniques with 96.29 rate 2 nd year Computer and Automatic Control Engineering – Tishreen University JAVA 8 Lambda Expression Spring Workshop 2015 - Java 8 Lambda Expression 1 Basic Concepts …

Upload: rabei-dogho

Post on 31-Jul-2015

49 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Java 8 lambda expression

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 …

Page 2: Java 8 lambda expression

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

Page 3: Java 8 lambda expression

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 « (الواجهات الوظيفية « و سوف يتم شرح فكرة مبسطة عنها

التي تساعدك ليس فقط في كتابة أكواد أقصر بل في إضفاء المزيد من الوضوح في التفكير بتصميم األغراض و

التوابع .

Page 4: Java 8 lambda expression

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

Page 5: Java 8 lambda expression

Spring Workshop 2015 - Java 8 Lambda Expression 5

: الوسطاءo توضع الوسطاء بين قوسين و يفصل بينها بواسطة فاصلة

.o يمكن أن تستقبلLambda Expression أي عدد من

الوسطاء.o نمط الوسطاء يمكن أن يصرح بوضوح أو أن يستنتج

تلقائيا من ضمن سياق المقطع البرمجي .o إذا أردت تقديم الئحة وسطاء فارغة يمكنك ذلك بواسطة

قوسين فارغين .o عند وجود نوع وسيط واحد يستنتج من ضمن السياق

ليس إلزاميا استخدام األقواس .

Lambda Parameters:

Page 6: Java 8 lambda expression

Spring Workshop 2015 - Java 8 Lambda Expression 6

: جسم التعبيرo جسمLambda Expression يمكن أن يحتوي على أي عدد

من التعليمات .o عندما يكون هناك تعليمة واحدة قوسا الكتلة }{ غير ضروريان

Lambdaو نمط اإلعادة للتوابع المجهولة المقدمة بواسطة ال Expression. هو نفسه ما يقوم جسم التعبير بإعادته

o عندما ال يعيد التعبير شيئا يستنتج تلقائيا أنه من النوعvoid. obreak و continue مسموحتا االستخدام ضمن الحلقات في

جسم التعبير .o إذا كان الجسم يعيد قيمة فكل مسار تحكم ( المسارات

throwالشرطية ) يجب أن يعيد قيمة ما أو أن يرمي إستثناء ( exception(

Lambda Body:

Page 7: Java 8 lambda expression

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! ")}

Page 8: Java 8 lambda expression

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)

Page 9: Java 8 lambda expression

Lambda Expression Examples :

Spring Workshop 2015 - Java 8 Lambda Expression 9

: شرح األمثلةبإعطاء هذا التعبير سلسة 7)

) يطبع هذه السلسة S(محرفية إلى الخرج القياسي حيث أن نمط إعادة التعبير هنا هو من

) .voidالنوع (بدون إعطاء هذا التعبير أي 8)

Helloوسيط يطبع عبارة “World إلى الخرج القياسي ”!

و نمط اإلعادة هنا هو من النوع )void. (

Page 10: Java 8 lambda expression

Lambda Expression

Spring Workshop 2015 - Java 8 Lambda Expression 10

و اآلن بعد أن عرفنا ما هيتعابير الالمبدا و كيفية

صياغتها و شرحنا بعض األمثلة المبسطة عنها سوف نناقش من خالل مثال عملي

أهمية استخدامها ضمن سياق البرنامج و آلية استخدامها مع

الواجهات الوظيفية Functional Interface .

وقبل البدء بذلك سوف نوضح بعض المفاهيم المرتبطة مع

استخدام تعابير الالمبدا.

Page 11: Java 8 lambda expression

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;

}

Page 12: Java 8 lambda expression

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();

}

Page 13: Java 8 lambda expression

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);

}

Page 14: Java 8 lambda expression

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);

}

Page 15: Java 8 lambda expression

The Type of Lambda Expression

Spring Workshop 2015 - Java 8 Lambda Expression 15

ماهو نمط تعابير الالمبدا ؟ في الجافا نقدم تعابير الالمبدا كأغراض ، و لذلك يجب أن

يحددو إلى نمط بيانات معروف ك واجهة وظيفية و هذا يسمى نمط الهدف .

و بما أن الواجهات الوظيفية يمكنها فقط أن تحتوي علىطريقة مجردة واحدة ، فإن أنواع وسطاء تعبير الالمبدا

يجب أن يراسلو الوسطاء في تلك الطريقة ، و نمط اإلعادة لتعبير الالمبدا يجب أن يراسل نمط إعادة تلك الطريقة ،

كما أنه رمي أي استثناء من قبل تعبير الالمبدا يجب أن ) لتلك الطريقة throws(يكون مسموحا بوساطة الصيغة

في الواجهة الوظيفية . األمثلة التالية هي عبارة عن أمثلة لتعابير المبدا محددين إلى

نمط هدف :

Page 16: Java 8 lambda expression

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!"); };

Page 17: Java 8 lambda expression

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!");

}

};

Page 18: Java 8 lambda expression

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.

Page 19: Java 8 lambda expression

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");

}

});

Page 20: Java 8 lambda expression

Lambda Expression Examples

Spring Workshop 2015 - Java 8 Lambda Expression 20

// Lambdas Listener :

testButton.addActionListener(e -> {

System.out.println("Click Detected by Lambda Listner");

});