<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>لامبدا اکسپرشن &#8211; Mahdi Tajik</title>
	<atom:link href="http://www.mahditajik.ir/tag/%d9%84%d8%a7%d9%85%d8%a8%d8%af%d8%a7-%d8%a7%da%a9%d8%b3%d9%be%d8%b1%d8%b4%d9%86/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mahditajik.ir</link>
	<description>I&#039;m Mahdi Tajik. I am project manager and Full-stack Android developer. welcome to my personal website.</description>
	<lastBuildDate>Thu, 29 Nov 2018 14:21:51 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.6</generator>

<image>
	<url>http://www.mahditajik.ir/wp-content/uploads/2015/03/cropped-sample-logo-MT-2-32x32.png</url>
	<title>لامبدا اکسپرشن &#8211; Mahdi Tajik</title>
	<link>http://www.mahditajik.ir</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Lambda Expression چیست و چگونه در جاوا استفاده می شود</title>
		<link>http://www.mahditajik.ir/lambda-expression/</link>
					<comments>http://www.mahditajik.ir/lambda-expression/#comments</comments>
		
		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Tue, 05 Jul 2016 09:58:43 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[expression]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[lambda]]></category>
		<category><![CDATA[جاوا]]></category>
		<category><![CDATA[لامبدا اکسپرشن]]></category>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=1948</guid>

					<description><![CDATA[<p>لامبدا اکسپرشن امکان مهم و جدیدی است که در جاوا ۸ اضافه شده است که قبلا در C# مطرح شده بود. توسط لامبدا می توانیم توابعی را بصورت بی نام به همراه بدنه آن تعریف کنیم که مزایای گوناگونی از قبیل مختصر کردن کد، کم کردن تعداد فایل های .java پروژه را داراست. همچنین در ...</p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/lambda-expression/">Lambda Expression چیست و چگونه در جاوا استفاده می شود</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1959" src="http://www.mahditajik.ir/wp-content/uploads/2016/07/lambda-expression.jpg" alt="lambda expression" width="800" height="486" srcset="http://www.mahditajik.ir/wp-content/uploads/2016/07/lambda-expression.jpg 800w, http://www.mahditajik.ir/wp-content/uploads/2016/07/lambda-expression-300x182.jpg 300w, http://www.mahditajik.ir/wp-content/uploads/2016/07/lambda-expression-768x467.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p style="text-align: justify;">لامبدا اکسپرشن امکان مهم و جدیدی است که در جاوا ۸ اضافه شده است که قبلا در C# مطرح شده بود. توسط لامبدا می توانیم توابعی را بصورت بی نام به همراه بدنه آن تعریف کنیم که مزایای گوناگونی از قبیل مختصر کردن کد، کم کردن تعداد فایل های .java پروژه را داراست. همچنین در هنگامی که می خواهیم از تابعی بر اساس شرایط استفاده کنیم و قابل استفاده است و یا مثلا در شرایط خاصی که نیاز به کلاس مشخصی داریم. فرض کنید در Runtime  بر اساس رفتار کاربر قرار است توابع مختلفی ایجاد شود. همچنین می توان برای پاس دادن یک اینترفیس به یک تابع از لامبدا استفاده کرد که در آخرین مثال به آن اشاره می کنم.</p>
<p style="text-align: justify;">لامبدا را به روش های گوناگونی می توان نوشت که در ادامه توضیح خواهم داد ولی روش کلی آن بصورت زیر است:</p>
<pre class="crayon-plain-tag">parameter -&gt; expression body</pre>
<p style="text-align: justify;">قسمت اول همانطور که مشخص است پارامترهای ورودی و بخش دوم بدنه می باشد.</p>
<p style="text-align: justify;">برای استفاده از امکانات Lambda Expression در Android Studio باید فایل Gradle را بصورت زیر تغییر دهید:</p>
<pre class="crayon-plain-tag">apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '24.0.0'
    defaultConfig {
        applicationId "com.example.mtajik.accounttest"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        //for using java 8 and it's features like lambda expressions
        jackOptions { enabled true }


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main {
            aidl.srcDirs = ['src/main/aidl']
        }
    }


    //for using java 8 and it's features like lambda expressions
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }
}


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}</pre>
<p style="text-align: justify;">در کلاس زیر مثال چند توع لامبدا را خواهید دید. لامبدا اکسپرشن با نوع ورودی و بدون نوع ورودی، با بلاکی از کد و غیره.</p>
<pre class="crayon-plain-tag">1.  () -&gt; 5                                // takes no value and returns 5
2.  x -&gt; 2 * x                         // takes a number and returns the result of doubling it
3.  (x, y) -&gt; x – y                           // takes two numbers and returns their difference
4.  (int x, int y) -&gt; x + y                 // takes two integers and returns their sum
5.  (String s) -&gt; System.out.print(s)     // takes a string and prints it to console without returning anything</pre>
<p style="text-align: justify;">به مثال های زیر را اجرا کرده و خروجی را ملاحظه نمایید:</p>
<pre class="crayon-plain-tag">public class Java8Tester {
    public static void main(String args[]){
        Java8Tester tester = new Java8Tester();

        //with type declaration
        MathOperation addition = (int a, int b) -&gt; a + b;

        //with out type declaration
        MathOperation subtraction = (a, b) -&gt; a - b;

        //with return statement along with curly braces
        MathOperation multiplication = (int a, int b) -&gt; { return a * b; };

        //without return statement and without curly braces
        MathOperation division = (int a, int b) -&gt; 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));

        //with parenthesis
        GreetingService greetService1 = message -&gt;
                System.out.println("Hello " + message);

        //without parenthesis
        GreetingService greetService2 = (message) -&gt; {
            System.out.println("Hello my friend " + message);
            return;
        } ;

        //---without Lambda Expression
        GreetingService greetService3WithOutLambda = new GreetingService() {
            @Override
            public void sayMessage(String message) {
                System.out.println("Hello my friend " + message);
            }
        };

        greetService1.sayMessage("mahdi");
        greetService2.sayMessage("mahdi");
        greetService3WithOutLambda.sayMessage("mahdi");

        //sorting with Lambda Expression
        List&lt;String&gt; list = Arrays.asList("looooong", "short", "tiny" );
        Collections.sort(list, (String s1, String s2) -&gt; s1.length() + s2.length());
        System.out.println(list);

    }

    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);
    }
}</pre>
<p style="text-align: justify;">همانطور که ملاحظه می کنید اینترفیس هایی داریم که تعریف بدنه تابع های آن را با لامبدا اکسپرشن انجام دادیم. نمونه بدون لامبدااکسپرشن تابع greetiservice3WithoutLambda می باشد. همچنین با استفاده از لامبدا می توانید از روش مرتب سازی بالا نیز استفاده کنید. ( به قسمت sort توجه کنید)  که برخلاف روش های گذشته بسیار ساده تر است. یعنی به جای نوشتن کلاس comparator به صورت مجزا، آن را بصورت لامبدا اکسپرشن در خود ورودی تولید کردیم.</p>
<p style="text-align: justify;">یا اینکه بجای کد زیر :</p>
<pre class="crayon-plain-tag">LiveViewManager.registerView(QKPreference.HIDE_AVATAR_CONVERSATIONS, this, new LiveView() {
    @Override
    public void refresh(String key) {
        holder.mAvatarView.setVisibility(mContext.getBoolean(QKPreference.HIDE_AVATAR_CONVERSATIONS) ? View.GONE : View.VISIBLE);
    }
});</pre>
<p style="text-align: justify;">بنویسم:</p>
<pre class="crayon-plain-tag">LiveViewManager.registerView(QKPreference.HIDE_AVATAR_CONVERSATIONS, this, key -&gt;
        holder.mAvatarView.setVisibility(mContext.getBoolean(QKPreference.HIDE_AVATAR_CONVERSATIONS) ? View.GONE : View.VISIBLE));</pre>
<p style="text-align: justify;">همانطور که دیدید به جای new کردن Interface و سپس پاس دادن آن به تابع، بصورت مستقیم با لامبدا پاس دادیم.</p>
<p>&nbsp;</p>
<p>منبع: <a href="http://www.biitecode.ir" target="_blank" rel="noopener">بایت کد</a></p>
<p>&nbsp;</p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/lambda-expression/">Lambda Expression چیست و چگونه در جاوا استفاده می شود</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://www.mahditajik.ir/lambda-expression/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
