Enumit Scalassa 3
Uusi enum-syntaksi.
Enumit Scalassa 3 on ilmainen Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssilla on yhteensä 4 oppituntia.
Uusi enum-avainsana
Scala 3 lisää ensiluokkaisen enum-rakenteen. Se korvaa Scala 2:n pitkän sealed-trait- ja case object -mallin tiiviillä syntaksilla.
- Jokaisesta tapauksesta tulee enum-tyypin arvo.
- Kääntäjä generoi hyödyllisiä apumetodeja automaattisesti.
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
println(Color.Red)Kaikkien arvojen luetteleminen
Jokainen yksinkertainen enum saa companion-objektin, jossa ovat values (kaikkien tapausten taulukko) ja valueOf (haku nimen perusteella).
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
Color.values.foreach(println)
println(Color.valueOf("Green"))Järjestysnumero ja nimi
Jokaisella enum-arvolla on ordinal (nollasta alkava sijainti) ja generoitu toString, joka käyttää tapauksen nimeä.
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
println(Color.Blue.ordinal)
println(Color.Red.ordinal)Parametreja sisältävät enumit
Enum-tapaukset voivat vastaanottaa konstruktoriparametreja, jolloin kuhunkin arvoon voidaan liittää dataa. Tämä on hyödyllistä esimerkiksi RGB-koodien tai planeettojen massojen tallentamiseen.
enum Planet(val mass: Double):
case Earth extends Planet(5.97e24)
case Mars extends Planet(6.42e23)
object Main:
def main(args: Array[String]): Unit =
println(Planet.Earth.mass)
println(Planet.Mars.mass)Enumien metodit
Voit määritellä metodeja enum-rungon sisällä. Ne ovat käytettävissä kaikilla arvoilla samaan tapaan kuin luokan metodit.
enum Direction:
case North, South, East, West
def opposite: Direction = this match
case North => South
case South => North
case East => West
case West => East
object Main:
def main(args: Array[String]): Unit =
println(Direction.North.opposite)Geneeriset ADT-enumit
Enumit voivat olla geneerisiä ja parametrisoituja, joten niiden avulla voi mallintaa algebrallisia tietotyyppejä. Tässä on yksinkertaistettu Option-tyyppi.
enum Maybe[+A]:
case Just(value: A)
case Nothing
object Main:
def main(args: Array[String]): Unit =
val a: Maybe[Int] = Maybe.Just(42)
println(a)Rekursiiviset ADT-enumit
Enumit sopivat erinomaisesti rekursiivisiin rakenteisiin. Binääripuu tai linkitetty lista voidaan esittää selkeästi tapausjoukkona.
enum Tree[+A]:
case Leaf(value: A)
case Branch(left: Tree[A], right: Tree[A])
object Main:
def main(args: Array[String]): Unit =
val t = Tree.Branch(Tree.Leaf(1), Tree.Leaf(2))
println(t)Enumien hahmonsovitus
Koska enumit ovat suljettuja, kääntäjä voi tarkistaa match-lauseen kattavuuden. Puuttuvasta tapauksesta annetaan varoitus.
enum Light:
case Red, Yellow, Green
object Main:
def action(l: Light): String = l match
case Light.Red => "stop"
case Light.Yellow => "slow"
case Light.Green => "go"
def main(args: Array[String]): Unit =
println(action(Light.Green))Java-yhteensopivat enumit
Lisää extends java.lang.Enum -käyttäytyminen johtamalla automaattisesti tyypistä scala.reflect.Enum; todellista Java-yhteentoimivuutta varten kirjoita enum X extends Enum[X]... mutta useimmissa tapauksissa käytetään tavallista muotoa, joka toimii tarvittaessa hyvin yhdessä Javan kanssa.
enum Suit:
case Hearts, Diamonds, Clubs, Spades
object Main:
def main(args: Array[String]): Unit =
println(Suit.values.length)
println(Suit.Spades.ordinal)Kenttien ja metodien yhdistäminen
Voit yhdistää parametrisoidut tapaukset ja jaetut metodit monipuolisten toimialuemallien rakentamiseksi.
enum Currency(val symbol: String):
case USD extends Currency("$")
case EUR extends Currency("\u20ac")
def format(amount: Double): String = s"$symbol$amount"
object Main:
def main(args: Array[String]): Unit =
println(Currency.USD.format(9.99))Milloin enumia kannattaa käyttää
Käytä enum-rakennetta, kun sinulla on suljettu joukko vaihtoehtoja tai algebrallinen tietotyyppi.
- Yksinkertaiset tapaukset tavallisiin luettelotyyppeihin.
- Parametrisoidut tapaukset ADT- ja summatyyppeihin.
- Automaattiset kattavuustarkistukset tekevät refaktoroinnista turvallista.
enum Result[+E, +A]:
case Ok(value: A)
case Err(error: E)
object Main:
def main(args: Array[String]): Unit =
val r: Result[String, Int] = Result.Ok(7)
println(r)Pikatarkistus
Testaa, miten hyvin ymmärrät Scala 3:n enumit.
Kertaus
Opit Scala 3:n enumit.
- Tiivis
enumkorvaa sealed-trait-boilerplaten. - Yksinkertaiset enumit saavat metodit
values,valueOfjaordinal. - Tapaukset voivat vastaanottaa parametreja niihin liittyvää dataa varten.
- Geneeriset ja rekursiiviset enumit mallintavat ADT-tyyppejä.
- Suljettu rakenne mahdollistaa kattavan hahmonsovituksen.
enum Weekday:
case Mon, Tue, Wed, Thu, Fri
def isStart: Boolean = this == Mon
object Main:
def main(args: Array[String]): Unit =
println(Weekday.Mon.isStart)
println(Weekday.values.length)Opi Scala 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
- 39
- Oppitunnit
- 143
Usein kysytyt kysymykset
Onko oppitunti ”Enumit Scalassa 3” ilmainen?
Kyllä – oppitunnin ”Enumit Scalassa 3” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssin, päivitä CoddyKit PROhon. Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Enumit Scalassa 3”?
Uusi enum-syntaksi. Harjoittelet Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Enumit Scalassa 3”-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ä Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppitunnilla?
Kyllä. Jokainen Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-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
- Merkityksellinen sisennys
- Enumit Scalassa 3
- Opaakit tyypit
- Yhdiste- ja leikkaustyypit