<?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>kotlin &#8211; Mahdi Tajik</title>
	<atom:link href="http://www.mahditajik.ir/tag/kotlin/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:15:15 +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>kotlin &#8211; Mahdi Tajik</title>
	<link>http://www.mahditajik.ir</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>tailrec در Kotlin چیست؟</title>
		<link>http://www.mahditajik.ir/tailrec-%d8%af%d8%b1%da%a9%d8%a7%d8%aa%d9%84%db%8c%d9%86-%da%86%db%8c%d8%b3%d8%aa/</link>
					<comments>http://www.mahditajik.ir/tailrec-%d8%af%d8%b1%da%a9%d8%a7%d8%aa%d9%84%db%8c%d9%86-%da%86%db%8c%d8%b3%d8%aa/#respond</comments>
		
		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Sun, 03 Dec 2017 07:29:52 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[#تابع]]></category>
		<category><![CDATA[#کاتلین]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[tailrec]]></category>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2701</guid>

					<description><![CDATA[<p>امکانات بسیار زیادی در Kotlin قرار گرفته تا بتواند به زبان رسمی Android مبدل گردد. tailrec یکی از آنهاست. این امکان در توابع بازگشتی کاربرد دارد. همانطور که می دانید استفاده از توابع بازگشتی معمولاً روشی نا صحصیح است که با مقیم شدن در حافظه تا تمام شدن تمامی مراحل، می تواند باعث stack overflow ...</p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/tailrec-%d8%af%d8%b1%da%a9%d8%a7%d8%aa%d9%84%db%8c%d9%86-%da%86%db%8c%d8%b3%d8%aa/">tailrec در Kotlin چیست؟</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-2704" src="http://www.mahditajik.ir/wp-content/uploads/2017/12/tailrec.jpg" alt="" width="800" height="486" srcset="http://www.mahditajik.ir/wp-content/uploads/2017/12/tailrec.jpg 800w, http://www.mahditajik.ir/wp-content/uploads/2017/12/tailrec-300x182.jpg 300w, http://www.mahditajik.ir/wp-content/uploads/2017/12/tailrec-768x467.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" />امکانات بسیار زیادی در <strong>Kotlin</strong> قرار گرفته تا بتواند به زبان رسمی <strong>Android</strong> مبدل گردد. <strong>tailrec</strong> یکی از آنهاست. این امکان در توابع بازگشتی کاربرد دارد. همانطور که می دانید استفاده از توابع بازگشتی معمولاً روشی نا صحصیح است که با مقیم شدن در حافظه تا تمام شدن تمامی مراحل، می تواند باعث <strong>stack overflow</strong> گردد و در طراحی الگوریتم روشی <strong>brutal</strong> است. این امکان وجود دارد تا توابع برگشتی را با استفاده از حلقه بهینه کرد.</p>
<p style="text-align: justify;">با گذاشتن <strong>tailrec</strong> در اول تابع بازگشتی، <strong>kotlin</strong> خودش آن را هنگام کامپایل کردن در صورت برقرار بودن شرایط، پیاده سازی آن تابع را با حلقه انجام داده و کد را بهینه می کند. به عنوان نمونه به تابع فاکتوریل زیر توجه کنید:</p>
<pre class="crayon-plain-tag">fun fact(x: Long): Long {
    tailrec fun factTail(y: Long, z: Long): Long {
        return if (y == 0L) z
        else {
            return factTail(y - 1, y * z)
        }
    }
    return factTail(x, 1)
}</pre>
<p style="text-align: justify;">برای صدا زدن کافیست:</p>
<pre class="crayon-plain-tag">logg("$5! : ${fact(5)}")</pre>
<p style="text-align: justify;">استفاده از <strong>tailrec</strong> شرایط دارد از قبیل اینکه بعد از صدا زدن <strong>recursive</strong> نباید متد دیگری وجود داشته باشد و یا مثلا اینکه درون بلاک های<strong> try/catch/finally</strong> نمی توان استفاده کرد. مثال کامل <strong>Kotlin</strong> را می توانید در لینک ذیل مشاهده کنید.</p>
<p><a href="https://github.com/mahdit83/KotlinExample" target="_blank" rel="noopener noreferrer"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-2146" src="http://www.mahditajik.ir/wp-content/uploads/2016/12/github_download.png" alt="github_download" width="230" height="70" /></a>منبع: <span style="color: #ff9900;"><a style="color: #ff9900;" href="http://www.biitecode.ir" target="_blank" rel="noopener">بایت کد</a></span></p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/tailrec-%d8%af%d8%b1%da%a9%d8%a7%d8%aa%d9%84%db%8c%d9%86-%da%86%db%8c%d8%b3%d8%aa/">tailrec در Kotlin چیست؟</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://www.mahditajik.ir/tailrec-%d8%af%d8%b1%da%a9%d8%a7%d8%aa%d9%84%db%8c%d9%86-%da%86%db%8c%d8%b3%d8%aa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
