فهرست
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 در کاتلین
closure ها در کاتلین
خب حالا که با چند تا از ویژگی های Lambda آشنا شدین خوبه که سراغ بحث دیگه ای به نام Closure ها بریم:
fun unaryOperation(x:Int,op: (Int) -> Int){
op(x)
}
fun outsideFunction() {
val number = 10
unaryOperation(20) { it * number }
}
یک تابع نوشتیم که یک تابع High-Order داخلش استفاده شده. (همون unaryOperation که توی جلسه قبلی ساختیمش) و دیدین که این تابع High-Order به متغیر خارج عبارت لاندایی که تعریف کردیم دسترسی داره! و اگه با IntelliJ IDEA این کد رو بزنین متوجه میشین که با نگه داشتن موشواره بر روی number بهمون میگه که “variable captured in a closure” و درواقع این بهمون میفهمونه که ما به مقدار متغییری دسترسی داشتیم که خارج عبارت lambda تعریف شده و مشکلی هم نداره.
بذارین یه حلقه for داشته باشیم
fun unaryOperation(x:Int,op: (Int) -> Int){
op(x)
}
fun outsideFunction() {
for (number in 1..30) {
unaryOperation(20) {
println(number)
it * number
}
}
}
fun main(args: Array<String>){
outsideFunction()
}
که بیاد و در هر مرتبه اجرا مقدار number رو پرینت کنه. اگه توی main تابع outsideFunction رو صدا بزنیم متوجه میشیم که مقادیر تغییر میکنن و لازم به گفتنه که در بعضی زبانها اینجوری تعریف شدن که مقدار متغییرها ثابت بمونن ولی در کاتلین میتونن تغییر کنند.