Parhaat käytännöt
Pidä operaattorit intuitiivisina
Parhaat käytännöt on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.
Pitäkää operaattorit intuitiivisina
Ylikuormittakaa operaattori vain, kun sen merkitys on ilmeinen. Vektoreilla + on selkeä merkitys; sähköpostin lähettämistä tarkoittava + ei ole.
data class Vec(val x: Int, val y: Int) {
operator fun plus(o: Vec) = Vec(x + o.x, y + o.y)
}
fun main() {
println(Vec(1, 2) + Vec(3, 4))
}Säilyttäkää odotettu semantiikka
Noudattakaa tavanomaista algebraa: a + b-lausekkeen tulisi vaikuttaa kommutatiiviselta symmetristen tyyppien yhteydessä eikä yllättää lukijaa.
data class Money(val cents: Int) {
operator fun plus(o: Money) = Money(cents + o.cents)
}
fun main() {
println(Money(100) + Money(50))
}Suosikaa muuttumattomuutta
plus-operaattorien tulisi palauttaa uusi arvo sen sijaan, että ne muuttaisivat vastaanottajaa, kuten luvut toimivat.
data class Point(val x: Int) {
operator fun plus(o: Point) = Point(x + o.x)
}
fun main() {
val a = Point(1)
val b = a + Point(2)
println("${a.x} ${b.x}")
}plus vs plusAssign
Määritelkää plus muuttumattomille arvoille ja plusAssign muokattavien säilöjen muuttamiseen paikan päällä. Välttäkää määrittelemästä molempia ristiriitaisella toiminnalla.
class Cart {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val c = Cart()
c += "book"
println(c.items)
}Täsmäyttäkää paluutyypit
Palauttakaa binäärioperaattoreista sama tyyppi, jotta tuloksia voidaan ketjuttaa luontevasti.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
}
fun main() {
println((N(1) + N(2) + N(3)).v)
}Älkää ylikuormittako näppäryyden vuoksi
Jos nimetty funktio on selkeämpi, käyttäkää sitä. Operaattorit on tarkoitettu aidosti numeeriseen tai säilömäiseen semantiikkaan, eivät arvoituksiin.
data class Log(val lines: List<String>) {
fun append(line: String) = Log(lines + line)
}
fun main() {
println(Log(emptyList()).append("start").lines)
}Pitäkää equals ja hashCode johdonmukaisina
Jos ylikuormitatte vertailun tai yhtäsuuruuden, pitäkää equals ja hashCode synkronoituina rikkinäisten kokoelmien välttämiseksi.
data class Id(val v: Int)
fun main() {
val set = hashSetOf(Id(1), Id(1))
println(set.size)
}Huomioikaa operaattorien etusijajärjestys
Ylikuormitetut operaattorit säilyttävät sisäänrakennetun etusijajärjestyksen. Suunnitelkaa toteutus niin, että luonteva etusijajärjestys tuottaa odotetut tulokset.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
operator fun times(o: N) = N(v * o.v)
}
fun main() {
println((N(2) + N(3) * N(4)).v)
}Dokumentoikaa yllättävät operaattorit
Jos operaattori tekee jotain epäintuitiivista, lisätkää kommentti tai KDoc, jotta kutsujat eivät johdu harhaan.
data class Range2(val start: Int, val end: Int) {
// contains: is value inside the range?
operator fun contains(v: Int) = v in start..end
}
fun main() {
println(5 in Range2(1, 10))
}Käyttäkää contains-funktiota in-operaatiossa
in-operaattori vastaa contains-funktiota. Määritelkää se uudelleen vain, kun jäsenyys on tyypillänne selkeästi määritelty.
class Team(val members: List<String>) {
operator fun contains(name: String) = name in members
}
fun main() {
val t = Team(listOf("Ann", "Bo"))
println("Ann" in t)
}Jos epäröitte, käyttäkää funktiota
Selkeästi nimetty metodi on lähes aina turvallisempi kuin epäselvä operaattori. Varatkaa ylikuormitus tilanteisiin, joissa se todella parantaa luettavuutta.
data class Temperature(val c: Int) {
fun warmerThan(o: Temperature) = c > o.c
}
fun main() {
println(Temperature(30).warmerThan(Temperature(20)))
}Pikatarkistus
Testatkaa operaattorien ylikuormituksen parhaiden käytäntöjen ymmärtämistänne.
Kertaus
Opitte operaattorien ylikuormituksen parhaat käytännöt:
- Ylikuormittakaa vain, kun merkitys on ilmeinen ja tavanomainen.
- Suosikaa muuttumattomia, saman tyypin palautusarvoja ja pitäkää tulokset ketjutettavina.
- Erottakaa
plus(arvo) japlusAssign(muuttaminen). - Pitäkää
equalsjahashCodejohdonmukaisina ja suosikaa nimettyjä funktioita, kun ne ovat selkeämpiä.
data class V(val x: Int) {
operator fun plus(o: V) = V(x + o.x)
}
fun main() {
println((V(2) + V(5)).x)
}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 ”Parhaat käytännöt” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Parhaat käytännöt”. 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 ”Parhaat käytännöt”?
Pidä operaattorit intuitiivisina 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 4/4.
Kuinka kauan ”Parhaat käytännöt”-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
- Operaattorifunktiot
- Vertailuoperaattorit
- Indeksointi ja kutsuminen
- Parhaat käytännöt