فهرست
1 - مقدمه
2 - مبانی کاتلین
3 - کد نویسی مقدماتی کاتلین
5.3 اضافه کردن پکیج ها در کاتلین و خلاصه بخش سوم
4 - توابع
2.4 تابع با پارامترهای پیشفرض و نامیده شده
3.4 تابع با پرامترهای نامحدود و خلاصه بخش چهارم
5 - کلاس ها
3.5 visibility modifier ها در کاتلین
6.5 Object ها در کاتلین و خلاصه بخش پنج
6 - ارث بری
2.6 کارکردن با کلاس های abstract در کاتلین
3.6 کلاس های interface در کاتلین
4.6 نگاه کوتاه به generic ها و خلاصه بخش شش
7 - کارکردن با Null ها
1.7 null safety و خلاصه بخش هفت
8 - نکات اضافه
7.8 annotation ها در کاتلین و خلاصه بخش هشت
9 - نگاه functionalای
4.9 عبارت های الحاقی در کاتلین و خلاصه بخش نهم
10 - قابلیت همکاری و Interoperability
2.10 صحبت کردن با جاوا از کاتلین
3.10 کار کردن با null ها از جاوا
4.10 صحبت کردن با کاتلین از جاوا
5.10 توابع و خصیصه های درجه اول
6.10 توابع الحاقی کاتلین از جاوا
7.10 همکاری با جاوا 7 و 8 و خلاصه بخش دهم
11 - کتابخانه استاندارد
1.11 کتابخانه استاندارد کاتلین و کارکردن با کالکشن ها در کاتلین
2.11 مرور کوتاه بر روی filtering و mapping و flatmapping در کاتلین
عبارت های شرطی در کاتلین
مثل بقیه زبان های برنامه نویسی کاتلین هم از عبارات شرطی نیز استفاده میکنه ولی با مقداری تفاوت که در ادامه میبینیم:
var myString= "Not Empty"
if(myString != ""){
println("Not Empty")
}else if (myString.startsWith("a")){
println("Starts With A")
}else{
println("Is Empty")
}
خب تا اینجا که مثل بقیه زبون ها عمل کردیم، ولی یکی از ویژگی های کاتلین اینه که میتونه به عنوان یک عبارت بیان بشه، قطعه کد زیر رو نگاه کنید:
var result = if(myString != ""){
println("Not Empty")
}else {
println("Starts With A")
}
println(result)
اگر این رو اجرا کنیم برنامه خروجی زیر رو میده
چرا kotlin.Unit ؟ درواقع Unit د رکاتلین به مانند void میمونه. ولی من گفتم که کاتلین این اجازه رو میده که بتونیم از if به صورت یک عبارت شرطی استفاده کنیم، خب باید توجه کنیم که اگر if بدین صورت استفاده بشه، کاتلین اخرین خط رو به عنوان مقدار برمیگردونه، یعنی اگر بخواهم به هدف دلخواهمون برسیم باید کد رو به صورت زیر تغییر بدیم:
var result = if(myString != ""){
"Not Empty"
}else {
"Starts With A"
}
println(result)
توجه کنین که مقدار اخرین خط بازگردادنده بشه، پس اگر بعد از “Not Empty” مقدار 20 گذاشته شود، جواب 20 برگردانده میشود.
بیاین یک نکته دیگه رو هم بگم. اگه عبارت بالا رو به این صورت بنویسم
var result = if(myString != ""){
20
}else {
"Starts With A"
}
println(result)
متوجه میشیم که کاپایلر یک اخطار میده و میگه result رو به Any کست میکنه!! در واقع Any یک کلاس بالایی است که دیگر شی ها از اون ارث بری شدند( اگر با مفهوم ارث بری اشنا نیستید، بعدا در مورد اون ها صحبت خواهیم کرد) و در واقع این اخطار به ما اینو میگه : “ ایا خبر داری که این عبارت شرطیت یک جا Int بر میگردونه و یک جای دیگه String ؟”
نکته دیگه باید توجه کنید اینه که وقتی داریم مقدار یک if رو به یک متغیر نسبت میدیم حتما باید برای تمامی شرایط مقداری برگردونیم.مثلا اگر به صورت زیر بنویسیم
var result = if(myString != ""){
20
}
println(result)
متوجه میشیم که برناممون با ارور مواجه میشه، و اونم دلیلش اینه که کامپایلر نمیدونه که اگر مثلا myString ==”” بود چه عملی رو انجام بده.
همانند if ما یک عبارت دیگه داریم به نام when که تقریبا به مانند case در زبون های دیگه میمونه.
var result = "Value"
when(result){
is String -> println("Excellent")
"Value" -> println("It's a Value")
}
مثلا عبارت بالا زو مد نظر بگیرین، اومدم نوشتم اگه result یک String بود عبارت اول رو چاپ کنه و اگر برابر بود با “Value” عبارت دوم رو. خب به نظرتون اگه این کد رو اجرا کنم خروجی چی میشه ؟
همینطور که میبینین عبارت “Excellent” چاپ شد. در واقع وقتی در داخل when به یکی از جواب ها برسیم کامپایلر دیگه خط های پایین رو نگاه نمیکنه و سریع break میکنه.
همانند if ، when هم میتونه عبارت شرطی باشه و نتیجش رو به یک متغییر پاس بدیم.
var result = "Value"
val whenValue = when(result){
"Value" -> {
println("It's a Value")
println("Second statement")
}
is String -> println("Excellent")
}
println(whenValue)
عبارت بالا رو مینویسیم، دقیقا به مانند if ، ولی وقتی این کد ر اجرا میکنیم با ارور مواجه میشیم. اینجا هم مثل if کامپایلر برمیگرده میگه “ من میدونم اگه برابر “Value” بود چیکار کنم، میدونم اگه String بود چیکار کنم ولی اگه توی وضعیت دیگه ای بود چیکار کنم ؟ مشکل را با استفاده از کلید واژه else رفع میکنم، بدین صورت
var result = "Value"
val whenValue = when(result){
"Value" -> {
println("It's a Value")
println("Second statement")
}
is String -> println("Excellent")
else -> println("It came to this?")
}
println(whenValue)
البته همینطور ک متوجه شدین، اگر این برنامه رو اجرا کنیم مقدار Unit برگردانده میشود و دلیل ان هم واضح است چرا که ما هنوز چیزی در اخرین خط شرط هامون برنگردوندیم!
var result = "Value"
val whenValue = when(result){
"Value" -> {
println("It's a Value")
println("Second statement")
"Here"
}
is String -> {
println("Excellent")
"And Here"
}
else -> {
println("It came to this?")
"and what about here?"
}
}
println(whenValue)