Sobes.tech
Junior

Kotlin'da 'internal' kirish modifikatori nima va uni qanday ishlatish mumkin?

sobes.tech AI

AIdan javob

Kotlinда internal кириш модификатори, эълон шул ўша модульда кўринадиган маънода. Модуль — бу бирга компиляция қилинган Kotlin-файллар жамланмаси, масалан:

  • Gradle модулі (манба кодлар жамланмаси).
  • Maven модулі.
  • Ant манба жамланмаси.

Бу модуль ичида амалга оширилаётган деталларни яшириш ва уларни бошқа модуллар кодидан ёпиш учун фойдали.

internal қуйидаги элементлар билан ишлатилиши мумкин:

  • Синфлар
  • Интерфейслар
  • Объектлар (object)
  • Функциялар
  • Хусусиятлар
  • Конструкторлар

Ишлатиш мисоли:

// "module1" модул
package com.example.module1

internal class InternalClass {
    internal fun internalFunction() {
        // Бу код фақат module1 ичида кўринади
    }
}

// Бу объект ҳам фақат module1 ичида кўринади
internal object InternalObject {
    internal val internalProperty = "Ички қиймат"
}
// "module1" модул
package com.example.module1

fun someFunctionInModule1() {
    val internalCls = InternalClass() // Мавжуд
    internalCls.internalFunction()     // Мавжуд
    println(InternalObject.internalProperty) // Мавжуд
}
// "module2" модул
package com.example.module2

import com.example.module1.InternalClass // Компиляция хатоси
import com.example.module1.InternalObject // Компиляция хатоси

fun someFunctionInModule2() {
    // InternalClass ёки InternalObject нинг экземпляри яратилиши ёки уларга мурожаат қилиш мумкин эмас
    // val internalCls = InternalClass() // Мавжуд эмас
    // println(InternalObject.internalProperty) // Мавжуд эмас
}

Асосий фарқ, public (ҳар жойда кўринади), private (фақат синф ичида) ва protected (синф ва унинг подклассида) билан, модуллар бўйича кўриш даражасида бўлади.