خانه » Kotlin » اندروید با kotlin » اندروید با kotlin قسمت سوم – Kotlin Syntax (توابع Functions)

اندروید با kotlin قسمت سوم – Kotlin Syntax (توابع Functions)

در قسمت قبلی آموزش :اندروید با kotlin قسمت دوم – Kotlin Syntax (کلاس Class) با تعریف کلاس ها در کاتلین آشنا شدیم

در این پست با توابع در کاتلین آشنا می شویم

 

توابع در کاتلین Functions in kotlin

 

fun aFunction(x: Int, y: Int): Int {
    return x + y
}

fun aFunctionWithExplicitReturnType(x: Int, y: Int): Unit {
    println("sum of $x and $y is ${x + y}")
}

fun aFunctionWithoutReduntant(x: Int, y: Int) {
    println("sum of $x and $y is ${x + y}")
}

fun aFunctionAsExpression(x: Int, y: Int) = x + y

نمونه چند متد رو در بالا می بینیم

 

در کاتلین مقدار بازگشتی تابع در انتهای اون مشخص شده، برعکس Java که مقدار بازگشتی در ابتدا تعریف میشه.

برای شروع نوشتن یک تابع از عبارت fun در ابتدا استفاده می کنیم و سپس نام تابع را می نویسیم، به صورت پیش فرض تمام توابع در کاتلین public هستند، مگر اینکه قصد تغییر دسترسی اون رو داشته باشید که میتونید از protected یا private هم استفاده کنید.

بعد از نام تابع در داخل پرانتز مانند جاوا، مقادیر ورودی مشخص می شود، که باز هم برعکس جاوا نوع مقادیر بعد از اسم متغیر ورودی می آید، مثلا در مثال بالا، x:Int که متغیر x از نوع Int رو مشخص می کنه. و بعد از پرانتز : و سپس نوع خروجی تابع

اگر نوع بازگشتی تابع رو مشخص نکنیم، به صورت پیش فرض ، مقدار Unit رو بر می گرداند، که شبیه به void در جاوا هست، نوشتن نوع بازگشتی Unit هم در توابع اجباری نیست و اگر نوشته نشود به صورت پیش فرض Unit در نظر گرفته می شود.

 

یکی دیگر از قابلیت های توابع ، نمونه آخری مثال بالا هست، جایی که نوع مقدار بازگشتی تعریف نشده، و حتی از {} هم استفاده نشده و در عوض از = استفاده شده، این حالت در واقع به صورت خودکار کاتلین مقدار بازگشتی مقابل = رو تشخیص می دهد و مقدار بازگشتی برابر نوع باز گشتی عبارتی هست که نوشته شده، این نوع نوشتن کمی برای ما که جاوا کار کردیم در ابتدا سخت هست، اما کم کم میتونه یه جاهایی به درد بخوره.

 

خوب حالا میریم سر جذابیت های کاتلین در توابع

شما میتونید تابع اول رو به صورت زیر هم بنویسید:

fun sum(x: Int = 5, y: Int = 6): Int {
    return x + y
}

حالا میتونید تابع زیر رو به صورت های زیر صدا بزنید و نتیجه ها رو ببینید :

sum(1,2) 
// x = 1 , y = 2 => response = 3


sum(1)
// x = 1 , y = 6 => response = 7


sum()
// x = 5 , y = 6 => response = 11

sum(y = 5)
// x = 5 , y = 5 => response = 10

sum(y = 5, x = 8)
// x = 8 , y = 5 => response = 13

در بالا ما این متد رو به ۵ حالت صدا زدیم:

در حالت اول ، مانند توابع معمولی ۲ مقدار x و  y را به تابع دادیم و خروجی مورد نظر رو گرفتیم.

در حالت دوم، در اینجا فقط مقدار x رو دادیم و مقداری برای y مشخص نکردیم، اما خطا نگرفتیم و با کمال تعجب ، تابع خروجی داره ؟!!! چرا ؟!
خوب ما در تعریف تابع یک مقدار پیش فرض برای x و y تعریف کردیم x:Int = 5 و y:Int = 6 در واقع بعد از تعریف نوع، مقدار پیش فرض رو هم مشخص کردیم.

در حالت سوم، در اینجا هم نه برای x مقدار دادیم و نه برای y که در این صورت مقادیر پیش فرض استفاده می شوند و نتیجه ۵ + ۶ = ۱۱ می شود.

در حالت چهارم، امکان دارد زمانی تصمیم داشته باشید فقط مقدار آخر رو مقدار دهی کنید، در اینجا یه اتفاق جدید می بینیم و اینکه در مقدار ورودی ، مشخص می کنیم که این مقدار متعلق به کدام متغیر هست y=5 که یعنی برای x از مقدار پیش فرض استفاده بکن و برای y از مقدار ۵ که خب نتیجه ۵ + ۵ = ۱۰ می شود

و در حالت پنجم، با مشخص کردن مقادیر برای متغیر ها، جای ورودی هارو تغییر دادیم، این حالت برای زمانی که قصد مقدار دهی به تابعی داریم که مثلا ۵ مقدار false می گیرد و یک مقدار عددی و حسابی کد رو شلوغ و ناخوانا می کند بسیار مفید هست، میتونید در ابتدا مقدار رو مشخص کرده، و مقادیر false رو هم مشخص کنید که به کدام متغییر ها می دهید، اینجوری یکم کد بیشتر میشه اما خواناییش بالا میره.

 

 

Extension Function

یکی دیگه از امکانات مهیج و جالب کاتلین Extension Function هست.

خوب این چیه ؟

فرض کنید بتونید به یه کلاس که از قبل تعریف شده، متد جدیدی اضافه کنید، بدون اینکه مجبور باشید از اون کلاس ارث بری کنید، مثلا فکر کنید قصد داریم به کلاس Activity یک متد به اسم toast() اضافه کنیم که زمانی که هرجای اکتیویتی عبارت toast(“Sample message”) رو تایپ کردیم، پیغام رو به ما نشون بده و نیاز نباشه هر متد طولانی Toast.makeText رو صدا بزنیم.

خوب این کار به صورت زیر انجام میشه:

fun Activity.toast(message: String) {

Toast.makeText(this, message, android.widget.Toast.LENGTH_SHORT).show()

}

کافیه یک فایل کاتلین به هر اسمی در پروژه ایجاد کنید و ۳ خط کد بالا رو به اون اضافه کنید.

حالا در هرجای اکتیویتی toastرو تایپ کنید متد جدیدی دارید.

 

چطور کار می کند ؟! ، اگر به تعریف این متد دقت کنید، همه چیز مانند نوشتن یک متد معمولی در کاتلین هست، به جز اینکه پیش از اسم تابع، اسم کلاسی که قصد اضافه کردن متد رو به اون داریم نوشته میشه در اینجا Activity.toast

یا مثلا مثال زیر :

fun Int.percent(value: Int): Int {
    return (this * value) / 100
}

با این کد میتونیم به کلاس Int متد percent رو اضافه کینم:

حالا اگر بنویسیم

 ۸۰۰٫percent(25)

مقدار بازگشتی درواقع ۸۰۰*۲۵ / ۱۰۰ برابر ۲۰۰ است ( در این متد this در واقع به مقدار کلاس که اینجا ۸۰۰ هست بر می گردد و در مقدار ورودی تابع value ضرب می شود و سپس به ۱۰۰ تقسیم می شود.

 

 

امیدوارم این آموزش هم به دردتون بخوره، لطفا کامنت بزارید و اگر سوالی دارید میتونید اینجا و یا در انجمن سایت بپرسید.

 

قسمت بعدی آموزش : اندروید با kotlin قسمت چهارم – Kotlin Syntax (متغیرها Variables)

 

لینک آموزش مرتبط: https://medium.com/@jcmsalves/kotlin-syntax-part-i-why-am-i-excluded-86772a61fade

برچسب ها:
پست قبلی
پست بعدی

درباره ایلیا عابدینی

برنامه نویس اندروید و کارشناس مهندسی پزشکی، نفر سوم مسابقه برنامه نویسی اندروید http://www.schallenge.ir ، از سال 92 برنامه نویسی اندروید رو شروع کردم و در حال حاضر در شرکت ارتباط کنترل فراگستر در حال توسعه اپلیکیشن های اندرویدی می باشدم ، این وبلاگ رو ساختم تا تجربیات روزانه و مفید خودم رو داخل اون بزارم. رزومه : iact.ir/cv

2 دیدگاه

  1. بی نهایت سپاس از اینکه دانش تون را به اشتراک میگذارید
    خیلی عالی توضیح میدین

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نمی شود.علامت دارها لازمند. *

*

رفتن به بالا