مشخصات مقاله
-
530
-
0.0
-
2692
-
0
-
0
عبارت لامبدا Java 8
عبارت های لامبدا Java 8
عبارت های لامبدا در Javaی 8 معرفی شده اند و به یکی از بزرگترین امکانات آن معروف هستند. این عبارت ها برنامه نویسی تابعی را تسهیل می کنند و برنامه نویسی را تا حد زیادی آسان می کنند.
سینتکس
عبارت های لامبدا با سینتکس زیر مشخص می شوند.
parameter -> expression body
در ادامه مشخصه های مهم یک عبارت لامبدا را می توانید مشاهده کنید.
- اختیاری نوع: نیازی به اعلان نوع پارامتر وجود ندارد. کامپایلر می تواند نوع پارامتر را از مقدار آن استنتاج کند.
- پرانتز اختیاری در اطراف پارامتر: نیازی به اعلان یک پارامتر واحد در پرانتز نیست. برای چندین پارامتر پرانتزها الزامی هستند.
- آکولاد اختیاری: نیازی به استفاده از آکولاد در بدنه ی عبارت نیست؛ به شرط آن که این بدنه تنها شامل یک دستور باشد.
- واژه ی کلیدی return اختیاری: کامپایلر به صورت خودکار مقدار را برگشت می دهد، به شرط آن که بدنه عبارت واحدی برای برگشت این مقدار داشته باشد. برای نشان دادن این که عبارت مقداری را برگشت می دهد، باید از آکولاد استفاده کرد.
مثالی برای عبارت های لامبدا در Java 8
به انتخاب خود با استفاده از یکی از ویرایشگرها برنامه ی Javaی زیر را مثلا در C:\> JAVA ایجاد کنید.
Java8Tester.java
public class Java8Tester {
public static void main(String args[]) {
Java8Tester tester = new Java8Tester();
//with type declaration
MathOperation addition = (int a, int b) -> a + b;
//with out type declaration
MathOperation subtraction = (a, b) -> a - b;
//with return statement along with curly braces
MathOperation multiplication = (int a, int b) -> { return a * b; };
//without return statement and without curly braces
MathOperation division = (int a, int b) -> a / b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
System.out.println("10 / 5 = " + tester.operate(10, 5, division));
//without parenthesis
GreetingService greetService1 = message ->
System.out.println("Hello " + message);
//with parenthesis
GreetingService greetService2 = (message) ->
System.out.println("Hello " + message);
greetService1.sayMessage("Mahesh");
greetService2.sayMessage("Suresh");
}
interface MathOperation {
int operation(int a, int b);
}
interface GreetingService {
void sayMessage(String message);
}
private int operate(int a, int b, MathOperation mathOperation) {
return mathOperation.operation(a, b);
}
}
نتیجه را بررسی کنید
با استفاده از کامپایلر javac مانند زیر این کلاس را کامپایل کنید.
C:\JAVA>javac Java8Tester.java
حالا مانند زیر Java8Tester را اجرا کنید.
C:\JAVA>java Java8Tester
نتیجه باید به صورت زیر باشد.
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
در ادامه نکات مهمی را مشاهده می کنید که باید در مثال بالا به آن ها توجه شود.
- کاربرد اصلی عبارت های لامبدا، تعریف پیاده سازی درون خطی یک رابط تابعی یعنی رابطی که تنها یک متد دارد است. در مثال بالا ما از انواع مختلفی از عبارت های لامبدا استفاده کرده ایم تا متد operation رابط MathOperation تعریف شود. سپس پیاده سازی sayMessage متعلق به GreetingService را تعریف کرده ایم.
- عبارت های لامبدا نیاز به کلاس های بی نام را از بین می برند و قابلیت برنامه نویسی تابعی ساده و در عین حال قدرتمندی را در اختیار Java می گذارند.
دامنه در Java 8
با استفاده از عبارت های لامبدا می توانید به هر متغیر نهایی یا به طور مؤثر به یکی از متغیرهای نهایی (که تنها یک بار تخصیص داده می شود) اشاره کنید. عبارت لامبدا در صورتی که متغیری مقداری را برای بار دوم تخصیص دهد، خطای کامپایلر می دهد.
مثالی برای دامنه
با استفاده از یکی از ویرایشگرهای مورد نظر خود برنامه ی Javaی زیر را مثلا در C:\> JAVA ایجاد کنید.
Java8Tester.java
public class Java8Tester {
final static String salutation = "Hello! ";
public static void main(String args[]) {
GreetingService greetService1 = message ->
System.out.println(salutation + message);
greetService1.sayMessage("Mahesh");
}
interface GreetingService {
void sayMessage(String message);
}
}
نتیجه را بررسی کنید
با استفاده از کامپایلر javac مانند زیر این کلاس را کامپایل کنید.
C:\JAVA>javac Java8Tester.java
حالا مانند زیر Java8Tester را اجرا کنید.
C:\JAVA>java Java8Tester
بعد از انجام این کار نتیجه ی زیر نمایش داده می شود.
Hello! Mahesh
برای مطالعه سرفصل آموزش Java (J2SE) کلیک نمایید .