Enum di Scala 3
Sintaks enum baru
Enum di Scala 3 adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.
Kata Kunci enum Baru
Scala 3 menambahkan konstruksi enum sebagai fitur kelas satu. Konstruksi ini menggantikan pola sealed-trait-plus-case-objects yang bertele-tele dari Scala 2 dengan sintaks yang ringkas.
- Setiap kasus menjadi nilai dari tipe enum.
- Compiler secara otomatis menghasilkan pembantu yang berguna.
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
println(Color.Red)Mencantumkan Semua Nilai
Setiap enum sederhana memiliki pendamping dengan values (larik semua kasus) dan valueOf (pencarian berdasarkan nama).
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
Color.values.foreach(println)
println(Color.valueOf("Green"))Ordinal dan Nama
Setiap nilai enum memiliki ordinal (posisi yang dimulai dari nol) dan toString yang dihasilkan menggunakan nama kasusnya.
enum Color:
case Red, Green, Blue
object Main:
def main(args: Array[String]): Unit =
println(Color.Blue.ordinal)
println(Color.Red.ordinal)Enum dengan Parameter
Kasus enum dapat menerima parameter konstruktor, sehingga setiap nilai memiliki data terkait. Ini berguna untuk menyimpan konstanta seperti kode RGB atau massa planet.
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)Metode pada Enum
Anda dapat mendefinisikan metode di dalam badan enum. Metode tersebut tersedia pada setiap nilai, seperti metode pada class.
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)Enum ADT Generik
Enum dapat bersifat generik dan memiliki parameter, sehingga Anda dapat memodelkan tipe data aljabar. Berikut adalah tipe Option yang disederhanakan.
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)Enum ADT Rekursif
Enum sangat cocok untuk struktur rekursif. Pohon biner atau daftar tertaut dapat dituliskan dengan jelas sebagai sekumpulan kasus.
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)Pencocokan Pola pada Enum
Karena enum bersifat tersegel, compiler dapat memeriksa kelengkapan sebuah match. Kasus yang terlewat akan memicu peringatan.
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))Enum yang Kompatibel dengan Java
Tambahkan perilaku extends java.lang.Enum dengan menurunkannya dari scala.reflect.Enum secara otomatis; untuk interoperabilitas Java yang sesungguhnya, tulis enum X extends Enum[X]... tetapi sebagian besar kode cukup menggunakan bentuk biasa yang berinteroperasi dengan baik bersama Java bila diperlukan.
enum Suit:
case Hearts, Diamonds, Clubs, Spades
object Main:
def main(args: Array[String]): Unit =
println(Suit.values.length)
println(Suit.Spades.ordinal)Menggabungkan Bidang dan Metode
Anda dapat mencampur kasus berparameter dengan metode bersama untuk membuat model domain yang kaya.
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))Kapan Menggunakan enum
Gunakan enum ketika Anda memiliki sekumpulan pilihan yang tertutup atau sebuah tipe data aljabar.
- Kasus sederhana untuk enumerasi biasa.
- Kasus berparameter untuk ADT dan tipe jumlah.
- Pemeriksaan kelengkapan otomatis membuat refaktor aman.
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)Pemeriksaan Singkat
Uji pemahaman Anda tentang enum Scala 3.
Ringkasan
Anda telah mempelajari enum Scala 3.
enumyang ringkas menggantikan boilerplate sealed-trait.- Enum sederhana mendapatkan
values,valueOf, danordinal. - Kasus dapat menerima parameter untuk data terkait.
- Enum generik dan rekursif dapat memodelkan ADT.
- Sifat tersegel memungkinkan pencocokan pola yang lengkap.
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)Pertanyaan yang Sering Diajukan
Apakah pelajaran “Enum di Scala 3” gratis?
Ya — teks lengkap “Enum di Scala 3” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Enum di Scala 3”?
Sintaks enum baru Kamu berlatih Scala for Backend Engineering & Functional Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Scala for Backend Engineering & Functional Programming?
Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Enum di Scala 3” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Scala for Backend Engineering & Functional Programming ini?
Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Indentasi Signifikan
- Enum di Scala 3
- Tipe Opaque
- Tipe Union dan Irisan