0Pricing
Scala for Backend Engineering & Functional Programming · Pelajaran

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.

  • enum yang ringkas menggantikan boilerplate sealed-trait.
  • Enum sederhana mendapatkan values, valueOf, dan ordinal.
  • 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

  1. Indentasi Signifikan
  2. Enum di Scala 3
  3. Tipe Opaque
  4. Tipe Union dan Irisan
← Kembali ke Scala for Backend Engineering & Functional Programming