Sobes.tech
Middle

Чӣ гуна истифода бурдани 'backing fields' дар Kotlin?

sobes.tech AI

Ҷавоб аз AI

Дастгириш майдонҳо ('backing fields') автоматанан равишда аз ҷониби компилятор ҳангоми истифодаи getters/setters стандартӣ тавлид мешаванд ва талаб намекунанд, ки ба таври ошкор эълон шаванд. Онҳо барои нигоҳ доштани арзиши хусусият истифода мешаванд.

Истифодаи ошкоронаи 'backing fields' дар ҳолатҳои кам, масалан, вақте ки шумо мехоҳед getter ё setter-ро фармоишӣ кунед ва дар айни замон ба арзиши худи хусусият ишора кунед, ба ҷои даъвати getter, ки метавонад ба рекурсия оварда расонад.

Барои дастрасии ошкорона ба 'backing field' дар дохили getter ё setter, истифода мешавад идентификатори field.

class MyClass {
    var counter = 0 // Компилятор барои ин хусусият backing field тавлид мекунад
        set(value) {
            // Санҷиши шароит пеш аз таъин кардан
            if (value >= 0) {
                // Дастрасии ошкор ба backing field
                field = value
            }
        }
}

'Backing field' барои хусусият, агар ягон хусусият онро истифода набаред (масалан, барои хусусиятҳои абстрактӣ ё хусусиятҳои интерфейс), ё агар getter ва setter пурра фармоишӣ бошанд ва истифодаи 'backing field' тавлидшудаи компиляторро накунанд, тавлид намешавад.

Масалан, ки 'backing field' тавлид намешавад:

interface MyInterface {
    val abstractProperty: String // Ҳеҷ backing field
}

class AnotherClass {
    val computedProperty: Int
        get() = (1 + 2) // Getter backing field-ро истифода намекунад, backing field вуҷуд надорад
}