فهرست
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 در کاتلین
کارکردن با کلاس های abstract در کاتلین
اگر با مفهوم abstract اشنا باشید کلاسی مد نظرمون هست که نمیتونیم ازش نمونه ای رو بسازیم ولی میتونیم از اون ارثبری کنیم.
abstract class StoredEntity
class Employee: StoredEntity()
fun main(args: Array<String>) {
val se = Employee()
}
خب حالا با خودتون میگین چه فایده ای داره که از کلاس های abstract استفاده کنیم؟ خب در واقع کلاس های abstract تفاوتی با کلاس های پایه ای دارند و اونم اینه که یک کلاس abstract میتونه هم مانند یک کلاس معمولی یک تابع/متغییر که مقدار دهی شده داشته باشه، و هم یک تابع abstract داشته باشه ک پیاده سازی نشده. مثلا فرض کنید که چندین کلاس داریم که یک سری کار انجام میدن ولی محتوای کارشون شبیه به هم با اندکی تفاوته، برای همین میایم یک کلاس abstract میسازیم و تابع abstract اون رو هم میسازیم ولی بدنه تابع رو توی هر کدوم از کلاس ها بسته به نوع کلاسمون میسازیم.مثال زیر رو نگاه کنین:
abstract class StoredEntity{
abstract fun store()
}
class Employee: StoredEntity() {
override fun store() {
TODO("not implemented")
}
}
البته تموم عضو های کلاس abstract نیازی به abstract بودن خودشون ندارن:
abstract class StoredEntity{
val isActive = true
abstract fun store()
fun status():String{
return isActive.toString()
}
}
class Employee: StoredEntity() {
override fun store() {
TODO("not implemented")
}
}
fun main(args: Array<String>) {
val se = Employee()
se.isActive
se.status()
}
فقط همینطور که میدونید ما نمیتونیم توی main دوباره به isActive مقدار بدیم.