Sobes.tech
Middle

Androidда кеңейтүү катары кандай өзгөчөлүктөрдү кошсо болот?

sobes.tech AI

AIден жооп

Android иштеп чыгууда кеңейтүүлөр (extension functions жана properties) бардык класстарга жаңы функционалдуулукту кошууга мүмкүндүк берет, мурас же декораторлорду колдонбостон. Бул SDKнын стандарттык класстары менен иштөөдө өзгөчө пайдалуу.

Кеңейтүү касиеттер (Extension Properties) — бул биз кошо ала турган касиеттер. Алар абалды сактабайт, алардын эсептелген мааниси геттер аркылуу аныкталат.

Androidда кеңейтүү касиеттерин колдонуу мисалдары:

  1. LayoutInflaterге оңой жетүү:

    // LayoutInflaterге жетүү үчүн кеңейтүү касиетин кошуу
    val Context.layoutInflater: LayoutInflater  
        get() = LayoutInflater.from(this)  
    

    Эми context.layoutInflater деп колдонсо болот, LayoutInflater.from(context) ордуна.

  2. View үчүн кыскача касиет — жашырылган:

    // Viewдин көрүнүшүн GONE кылуу үчүн кеңейтүү касиет
    var View.isVisibleGone: Boolean  
        get() = visibility == View.VISIBLE // Учурдагы абалды текшерүү  
        set(value) { // Абалды коюу  
            visibility = if (value) View.VISIBLE else View.GONE  
        }
    

    Эми view.isVisibleGone = false деп колдонсо болот, View жашырылат.

  3. Экрандын өлчөмүн DP менен алуу:

    // Экрандын кеңдигин DP менен алуу үчүн кеңейтүү касиет
    val Context.screenWidthInDp: Int  
        get() = resources.displayMetrics.widthPixels / resources.displayMetrics.density.toInt()  
    

    Мисал: context.screenWidthInDp.

  4. SharedPreferencesке жетүү:

    // Аты боюнча SharedPreferences алуу үчүн кеңейтүү касиет
    fun Context.sharedPreferences(name: String): SharedPreferences =  
        getSharedPreferences(name, Context.MODE_PRIVATE)  
    

    Бул функция болсо да, көбүнчө ыңгайлуулук үчүн касиет катары колдонулат: context.sharedPreferences("my_prefs").

Кеңейтүү касиеттеринин маанилүү учурлары:

  • Алар backing fields болбойт (маалыматты сактай турган өзгөрмө).
  • Алар гана геттер менен (текшерүү үчүн), же геттер жана сеттер менен (окуу жана жазуу үчүн) аныкталышы керек.
  • Алар статикалык методдор катары компиляцияланат, ошондуктан алардын чакырышы класс-ийгемендүү аркылуу болот.

Жалпысынан, Androidда кеңейтүү аркылуу логикалык жактан тиешелүү кез келген эсептелүүчү касиетти кошсо болот, ал анын колдонушун жеңилдетет, жардамчы функцияларды же капталган класстарды түзүүдөн качуу менен.