Scala for Backend Engineering & Functional Programming · Pelajaran

Trait Sealed

Hierarki tertutup.

Pelajaran 2 dari 413 langkah

Trait Sealed 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.

Apa Itu Trait?

Trait mirip dengan antarmuka: trait mendeklarasikan tipe umum yang dapat diperluas oleh kelas lain.

Trait memungkinkan Anda mengelompokkan tipe-tipe yang berkaitan di bawah satu payung sehingga dapat digunakan secara bergantian.

Trait Dasar

Deklarasikan trait dengan trait, lalu buat kelas atau objek extends trait tersebut.

trait Shape
case class Circle(r: Double) extends Shape
case class Square(side: Double) extends Shape
object Main {
  def main(args: Array[String]): Unit = {
    val s: Shape = Circle(2.0)
    println(s)
  }
}

Apa Arti sealed?

Trait sealed hanya dapat diperluas oleh tipe yang dideklarasikan dalam file yang sama.

Dengan demikian, hierarkinya tertutup: kompiler mengetahui daftar lengkap subtipe yang mungkin.

sealed trait Color
case object Red extends Color
case object Green extends Color
case object Blue extends Color
object Main {
  def main(args: Array[String]): Unit = {
    val c: Color = Green
    println(c)
  }
}

Objek Case sebagai Varian

Jika suatu varian tidak memiliki data, gunakan case object, bukan case class. Hanya akan ada satu instansnya.

Ini sangat cocok untuk nilai yang menyerupai enumerasi.

sealed trait Direction
case object North extends Direction
case object South extends Direction
object Main {
  def main(args: Array[String]): Unit = {
    val d: Direction = North
    println(d)
  }
}

Mencampurkan Objek dan Kelas

Trait sealed dapat memiliki varian case object (tanpa data) dan varian case class (dengan data).

sealed trait Event
case object Started extends Event
case class Failed(reason: String) extends Event
object Main {
  def main(args: Array[String]): Unit = {
    val e: Event = Failed("timeout")
    println(e)
  }
}

Mencocokkan Trait Sealed

Anda mencocokkan trait tersebut dan menangani setiap varian. Karena hierarkinya sealed, kompiler dapat memverifikasi bahwa semuanya telah ditangani.

sealed trait Color
case object Red extends Color
case object Green extends Color
case object Blue extends Color
object Main {
  def hex(c: Color): String = c match {
    case Red   => "#FF0000"
    case Green => "#00FF00"
    case Blue  => "#0000FF"
  }
  def main(args: Array[String]): Unit = {
    println(hex(Green))
  }
}

Peringatan Kompiler

Jika Anda melupakan suatu varian dalam pencocokan terhadap trait sealed, kompiler memperingatkan Anda tentang kasus yang belum ditangani.

Hal ini mendeteksi bug saat Anda nantinya menambahkan varian baru. Kita akan membahasnya secara menyeluruh dalam pelajaran tentang pencocokan lengkap.

Trait Dapat Mendeklarasikan Anggota

Trait dapat mendeklarasikan metode atau field yang digunakan bersama oleh semua subtipe atau wajib diimplementasikan oleh subtipe tersebut.

sealed trait Animal {
  def sound: String
}
case object Dog extends Animal { def sound = "Woof" }
case object Cat extends Animal { def sound = "Meow" }
object Main {
  def main(args: Array[String]): Unit = {
    println(Dog.sound)
    println(Cat.sound)
  }
}

Mengapa Sealed?

Membuat trait menjadi sealed memberi Anda:

  • Kumpulan subtipe yang diketahui dan tertutup
  • Pemeriksaan kelengkapan dalam match
  • Refaktor yang lebih aman saat menambahkan varian

Trait sealed bersama kelas case adalah cara Scala membangun tipe data aljabar.

Menggunakan Hierarki

Fungsi dapat menerima tipe trait dan bekerja dengan varian apa pun, dengan pengiriman melalui pencocokan pola.

sealed trait Payment
case class Cash(amount: Int) extends Payment
case class Card(number: String) extends Payment
object Main {
  def summary(p: Payment): String = p match {
    case Cash(a) => s"cash $a"
    case Card(n) => s"card ending ${n.takeRight(4)}"
  }
  def main(args: Array[String]): Unit = {
    println(summary(Cash(50)))
    println(summary(Card("123456789012")))
  }
}

Menggabungkan Semuanya

Trait sealed dengan varian campuran, yang digunakan bersama melalui fungsi yang mencocokkan setiap kasus.

sealed trait Result
case object Pending extends Result
case class Success(value: Int) extends Result
case class Error(msg: String) extends Result
object Main {
  def show(r: Result): String = r match {
    case Pending    => "waiting"
    case Success(v) => s"ok: $v"
    case Error(m)   => s"fail: $m"
  }
  def main(args: Array[String]): Unit = {
    List(Pending, Success(7), Error("boom")).foreach(r => println(show(r)))
  }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang trait sealed.

Rangkuman

Anda telah mempelajari trait sealed:

  • trait mendefinisikan supertipe bersama
  • sealed membatasi subtipe pada file yang sama
  • Gunakan case object untuk varian tanpa data dan case class untuk varian dengan data
  • Sealing memungkinkan pemeriksaan kelengkapan dalam match
Gratis untuk memulai

Belajar Scala dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
39
Pelajaran
143

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Trait Sealed” gratis?

Ya — teks lengkap “Trait Sealed” 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 “Trait Sealed”?

Hierarki tertutup. 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 “Trait Sealed” 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. Case Class
  2. Trait Sealed
  3. Tipe Data Aljabar
  4. Pencocokan Menyeluruh
← Kembali ke Scala for Backend Engineering & Functional Programming