آموزش جاوا و اندروید

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

آموزش جاوا و اندروید

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

طبقه بندی موضوعی

به صورت پیش فرض دو نسخه از اپلیکیشن میتونه بیلد بشه، نسخه دیباگ و نسخه release. میتونیم نسخه های دیگه با ویژگی های کاستوم هم اضافه کنیم که این کار در بلوک buildTypes انجام میشه. حالا به چه دردی میخوره؟

میشه به هر variant یک سری buildConfigField اضافه کرد و مثلا URL یا apiKey رو توی نسخه های مختلف مدیریت کرد. مثلا:

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ تیر ۰۰ ، ۱۰:۲۳
میم دال

توی کاتلین مفهوم استاتیک مثل جاوا وجود نداره. با این حال یه سری امکاناتی برای معرفی فیلد و متدهای استاتیک در نظر گرفته شده است.

در هر کلاسی میشه companion object تعریف کرد و داخل بلاک آن فیلدها و متدهای استاتیک تعریف کرد.

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ ارديبهشت ۰۰ ، ۱۷:۰۵
میم دال

در کاتلین برای مقداردهی فیلدهایی که در ابتدای کلاس معرفی شده و قرار است در اواسط کلاس مقداردهی شوند، دو روش وجود دارد:

 

1. {...} by lazy

2. lateinit

 

{...} by lazy همون جا مقدار متغیر مشخص میشه اما به محض استفاده از آن متغیر مقداردهی می شود. حتما باید از نوع val باشه.

 

lateinit نمیتونه nullable باشه و حتما باید از نوع var باشد.

توضیحات بهتر و کامل تر

۰ نظر موافقین ۰ مخالفین ۰ ۰۶ ارديبهشت ۰۰ ، ۰۷:۵۱
میم دال

اگر کلاس viewModel دارای آرگومان باشد، در این صورت برای instance کردن آن باید کلاس فکتوری تعریف کنیم:

class ViewModelFactory(private val num:Int): ViewModelProvider.Factory{
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        if(modelClass.isAssignableFrom(MyViewModel::class.java)){
            return MyViewModel(num) as T
        }
        throw IllegalArgumentException("Not Found")

    }
}

این کلاس همیشه به همین فرمت نوشته میشه.

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ ارديبهشت ۰۰ ، ۰۶:۳۷
میم دال

کاتلین با پیاده سازی فایل Standard.kt به تمامی کلاس ها این امکان را میدهد که از اسکوپ فانکشن ها استفاده کنند. اگر اسکوپ فانکشن ها رو دیکامپایل کنیم، توابع خاصی نیستند و به صورت ساده (با بررسی چند شرط) پیاده سازی شده اند.

۰ نظر موافقین ۰ مخالفین ۰ ۲۸ فروردين ۰۰ ، ۱۹:۱۹
میم دال