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

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

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

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

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

۶ مطلب با موضوع «کاتلین پیشرفته» ثبت شده است

 اگر از اپراتور null safety کاتلین که .? هست، برای چک کردن نهایی null بودن متغیر باید به صورت زیر عمل کرد:

var word: String? = "Elvis"
val length: Int = if (word != null) word.length else -1

 

یعنی باید به صورت Explicit بررسی کرد که آیا word مقدار null دارد یا خیر. به جای بررسی کردن با if میشه از :? استفاده کرد.

val word: String? = "Elvis"
val length: Int = word?.length ?: -1

 

به این اپراتور Elvis گفته میشه و میگه اگر word مقدارش null بود، 1- جایگزین بشه.

 

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

در کاتلین دو نوع لیست mutable و immutable وجود داره.

لیست immutable:

 val mylist = listOf("1","2","3")

 

لیست mutable:

سه روش برای ایجاد این نوع لیست وجود داره:

        val mylist = ArrayList<String>()

        val mylist1 = mutableListOf<String>()

        val mylist2 = arrayListOf<String>()

این سه تا فرقی با هم ندارن.

 

 

 

۰ نظر موافقین ۰ مخالفین ۰ ۲۳ آذر ۰۲ ، ۰۳:۰۶
میم دال

آرایه:

دو نوع روش برای ایجاد آرایه وجود داره. در روش اول باید سایز آرایه و مقدار اولیه اون مشخص بشه. در روش دوم فقط باید مقدار اولیه مشخص بشه. هر دو mutable هستن، یعنی میشه یه عضو از آرایه را تغییر داد. اما طول آرایه قابل تغییر نیست.

 

val myArray = Array<Int>(5){0}

val myArray = arrayOf("1", "2")

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ آذر ۰۲ ، ۱۴:۵۸
میم دال

کلاس جنریک:

class ArrayUtil<T>(private val array : Array<T>) {

    fun findElement(element : T, foundElement:(index: Int, element: T?)->Unit){

        for(i in array.indices){

            if(array[i] == element){
                foundElement(i, element)
                return
            }
        }

        foundElement(-1, null)
        return

    }

}

۰ نظر موافقین ۰ مخالفین ۰ ۲۰ آذر ۰۲ ، ۱۶:۳۷
میم دال

کتابخانه های ktx در اندروید یه سری API جدید و ساده با استفاده از لامبدا اینا برای ما ایجاد میکنن. این لایبرری ها رو باید به صورت دستی در پروژه اضافه کنیم. یکی از بهترین هاش که معمولا استفاده میشه، برای instance کردن ویو مدل هست که توسط delegation انجام میشه. 

 

private val myViewModel : MyViewModel by viewModels() //لایف سایکل متصل به فرگمنت
private val myViewModel1 by viewModels<MyViewModel>() //لایف سایکل متصل به فرگمنت 
private val myViewModel2 : MyViewModel by activityViewModels() // لایف سایکل متصل به اکتیویتی

 

موقع ساخت آبجکت ویو مدل باید به اینکه میخوایم در چه لایف سایکلی از اپ زنده باشه دقت کنیم.

 

روش کلاسیک ایجاد ویومدل:

 

val vm = ViewModelProvider(this).get(MyViewModel::class.java)

 

ایجاد ویو مدل با استفاده از lazy:

 

private val MyViewModelby lazy {
    ViewModelProvider(this).get(MyViewModel::class.java)
}

 

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۰۲ ، ۰۳:۵۸
میم دال

وقتی یه کلاسی لود میشه تمامی فیلدهای اون هم لود میشن. بعضی از آبجکت ها سنگین هستن (مثل دیتابیس اینا) و initial شدن اونها کاست زیادی داره. به همین خاطر از lazy توی کاتلین استفاده میشه و باعث میشه به محض استفاده از اون آبجکت، لود بشه.

 

مثال:

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