Mukautetut getterit ja setterit field-sanalla
Kirjoittakaa laskettuja ominaisuuksia ja mukautettuja settereitä backing field -avainsanan avulla.
Mukautetut getterit ja setterit field-sanalla on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Ominaisuudet eivät ole vain kenttiä
Jokaisella Kotlin-ominaisuudella on automaattisesti luotu getter (ja var-ominaisuudella myös setter). Voitte ohittaa ne logiikan lisäämiseksi — esimerkiksi validointia, lokitusta tai laskentaa varten.
Mukautettu getter
Ohittakaa get(), jos haluatte laskea arvon joka kerta, kun sitä luetaan.
class Circle(val radius: Double) {
val area: Double
get() = Math.PI * radius * radius
}
fun main() {
val c = Circle(3.0)
println(c.area) // ~28.27
}Lasketut ominaisuudet
Lasketuilla ominaisuuksilla ei ole taustakenttää — niiden arvo lasketaan jokaisella käyttökerralla.
class Rectangle(val w: Int, val h: Int) {
val area get() = w * h
val perimeter get() = 2 * (w + h)
}
fun main() {
val r = Rectangle(3, 4)
println("${r.area}, ${r.perimeter}") // 12, 14
}Mukautettu setter ja field
Mukautetun setterin sisällä field viittaa taustakenttään — varsinaiseen tallennustilaan.
class Temperature {
var celsius: Double = 0.0
set(value) {
require(value >= -273.15) { "below absolute zero" }
field = value
}
}
fun main() {
val t = Temperature()
t.celsius = 25.0
println(t.celsius)
// t.celsius = -300.0 // throws
}Taustakenttä luodaan automaattisesti
Jos getter tai setter käyttää field-tunnistetta, Kotlin luo taustakentän. Jos kumpikaan ei käytä sitä, kenttää ei luoda — ominaisuus on pelkästään laskettu.
class Counter {
var count: Int = 0
set(value) {
println("Setting count from $field to $value")
field = value
}
}
fun main() {
val c = Counter()
c.count = 5
c.count = 10
}Sivuvaikutuksia sisältävä setter
Käyttäkää mukautettuja settereitä lokitukseen, muutoksista ilmoittamiseen tai toisiinsa liittyvän tilan synkronointiin.
class Brightness {
var level: Int = 50
set(value) {
val clamped = value.coerceIn(0, 100)
println("Brightness -> $clamped")
field = clamped
}
}
fun main() {
val b = Brightness()
b.level = 75
b.level = 150 // clamps to 100
println(b.level)
}Yksityinen setter
Merkitkää setter private-määreellä, jos haluatte tarjota vain luku -rajapinnan mutta sallia sisäisen muuttamisen.
class Score {
var value: Int = 0
private set
fun increment() { value++ }
fun reset() { value = 0 }
}
fun main() {
val s = Score()
s.increment(); s.increment()
println(s.value) // 2
// s.value = 100 // ERROR: setter is private
}Validointi setterissä
Mukautetut setterit ovat luonteva paikka syötteiden validointiin.
class Email {
var address: String = ""
set(value) {
require(value.contains("@")) { "invalid email" }
field = value
}
}
fun main() {
val e = Email()
e.address = "ada@example.com"
println(e.address)
}Logiikkaa sisältävä getter
Getterit voivat muuntaa tallennettua tilaa — esimerkiksi muotoilla tallennetun arvon tai käyttää oletusarvoa varavaihtoehtona.
class Profile(_name: String?) {
var rawName: String? = _name
val displayName: String
get() = rawName ?: "(unset)"
}
fun main() {
val p = Profile(null)
println(p.displayName) // (unset)
}val- ja var-määritteiden vertailu
val-ominaisuuksilla on vain getter (ei setteriä); var-ominaisuuksilla on molemmat.
class Box {
val readOnly: Int get() = 42
var readWrite: Int = 0
}
fun main() {
println(Box().readOnly)
val b = Box(); b.readWrite = 5; println(b.readWrite)
}Yleinen virhe: rekursio
Älkää käyttäkö ominaisuuden nimeä sen omassa aksessorissa — se aiheuttaa loputtoman rekursion. Käyttäkää sen sijaan field-tunnistetta.
class Wrong {
var x: Int = 0
set(value) {
// x = value // INFINITE RECURSION — calls setter again
field = value // CORRECT
}
}
fun main() {
val w = Wrong(); w.x = 42; println(w.x)
}Pikatarkistus
Mihin field-tunniste viittaa mukautetun setterin sisällä?
Kertaus
Ylikirjoittakaa get()- ja set()-funktiot lisätäksenne logiikkaa ominaisuuden käyttöön. Lukekaa ja kirjoittakaa taustakenttää aksessoreissa field-tunnisteen avulla. Merkitkää setterit private-määreellä, kun julkisen rajapinnan tulee olla vain luku -tyyppinen. Käyttäkää laskettuja ominaisuuksia, joilla ei ole taustakenttää, kun arvo johdetaan aina muista tiedoista.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Mukautetut getterit ja setterit field-sanalla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Mukautetut getterit ja setterit field-sanalla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Mukautetut getterit ja setterit field-sanalla”?
Kirjoittakaa laskettuja ominaisuuksia ja mukautettuja settereitä backing field -avainsanan avulla. Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Mukautetut getterit ja setterit field-sanalla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?
Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Ensisijainen konstruktori ja ominaisuusparametrit
- init-lohkot ja alustamisjärjestys
- Mukautetut getterit ja setterit field-sanalla
- lateinit ja laiska alustaminen