فهرست
1 - مقدمه
2 - مبانی کاتلین
3 - کد نویسی مقدماتی کاتلین
3.4 ) عبارت های شرطی در کاتلین
3.5 ) اضافه کردن پگیج ها در کاتلین و خلاصه بخض سوم
4 - توابع
4.2 ) تابع با پارامترهای پیشفرض و نامیده شده
4.3 ) تابع با پرامترهای نامحدود و خلاصه بخش چهارم
5 - کلاس ها
5.3 ) visibility modifier ها در کاتلین
5.6 ) Object ها در کاتلین و خلاصه بخش پنج
6 - ارث بری
6.2 ) کارکردن با کلاس های abstract در کاتلین
6.3 ) کلاس های interface در کاتلین
6.4 ) نگاه کوتاه به generic ها و خلاصه بخش شش
7 - کارکردن با Null ها
7.1 ) null safety و خلاصه بخش هفت
8 - نکات اضافه
8.4 ) کار کردن با exception ها
8.6 ) annotation ها در کاتلین و خلاصه بخش هشت
9 - نگاه functionalای
9.2 ) عبارت های لاندا در کاتلین
9.4 ) عبارت های الحاقی در کاتلین و خلاصه بخش نهم
10 - قابلیت همکاری و Interoperability
10.2 ) صحبت کردن با جاوا از کاتلین
10.3 ) کار کردن با null ها از جاوا
10.4 ) صحبت کردن با کاتلین از جاوا
10.5 ) توابع و خصیصه های درجه اول
10.6 ) توابع الحاقی کاتلین از جاوا
10.7 ) همکاری با جاوا 7 و 8 و خلاصه بخش دهم
11 - کتابخانه استاندارد
11.1 ) کتابخانه استاندارد کاتلین و کارکردن با کالکشن ها در کاتلین
11.2 ) مرور کوتاه بر روی filtering و mapping و flatmapping در کاتلین
صحبت کردن با جاوا از کاتلین
برای تمرین این قسمت بهتر است از IntelliJ IDEA استفاده شود
خب بیاین در داخل کاتلین با جاوا صحبت کنیم. توجه داشتین که یک کلاس CustomerJava داشتیم که در واقع یک Java Bean بود.خب حالا بیاین توی یک کلاس کاتلین از این کلاس جاوا یک متغیر بسازیم و بعد به یک خصیصه از اون کلاس جاوا دسترسی داشته باشم
fun main(args: Array<String>) {
val customer = CustomerJava()
println(customer.email)
}
اگه دقت کنین برای استفاده از email نیازی نیست که تابع getEmail رو صدا بزنیم! تنها کاری که لازمه اینه که نام اون متغیر رو صدا بزنیم و کاتلین خودش حدس میزنه که به چی نیاز داریم. البته به این معنی نیست که تابع getEmail رو نداریم و در واقع اگه بخوایم میتونیم از این تابع استفاده کنیم ولی خود کاتلین این اجازه رو میده که نیازی به صدا کردن تابع برای خوندن مقدارش نداشته باشیم. این ویژگی مسلما برای set هم هست و هر موقع بخوایم مقدار جدیدی رو بدیم کافیه همین روش رو به کار ببریم.
درمورد ارث بری هم روند کارمون سادست. بیایی یک کلاس به نام PersonJava در کد جاوامون ایجاد کنیم:
public class PersonJava {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
و حالا بیاین از این ارثبری کنیم:
class PersonKotlin : PersonJava()
به این راحتی از یک کلاس جاوا ارثبری کردیم. این قضیه حتی برای Interface ها هم برقراره
public interface CustomerRepository {
CustomerJava getById(int id);
List<CustomerJava> getAll();
}
و حالا میتونم داخل کاتلین از این Interface استفاده کنیم
class KotlinCustomerRepo : CustomerRepository{
override fun getAll(): MutableList<CustomerJava> {
TODO("not implemented")
}
override fun getById(id: Int): CustomerJava {
TODO("not implemented")
}
}
چیزی که در جاوا زیاد داریم در واقع “َAbstract متد های تنها” هستند که در واقع متد هایی هستند که در داخل کلاس اینترفیس ساخته میشن و یک نمونه ساده میتونه اینترفیس Runnable باشه.
میتونیم به مانند بقیه اینترفیس ها اونو در یک کلاس کاتلین استفاده کنیم، مثلا کد زیر:
class RunnableKotlin : Runnable{
override fun run() {
TODO("not implemented")
}
}
ولی خب این یک راه حل خیلی ضایع برای این کاره، چرا که درواقع داریم یک کلاس رو که تنها یک تابع داره رو برای این موضوع به کار میبریم. میتونیم به مانند جاوا 1.8 به یک روش دیگه ازش استفاده کنیم:
val runnable = Runnable { println("Invoking") }
در واقع اجازه داده شده که تا بلاک کد رو پاس بدیم بدون اینکه در گیر استفاده از یک اینترفیس بشیم