0Pricing
Scala for Backend Engineering & Functional Programming · Pelajaran

Derivasi Type Class

Instance otomatis.

Derivasi Type Class adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 4 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 Derivasi?

Derivasi kelas tipe membuat instans secara otomatis dari struktur suatu tipe, sehingga Anda tidak perlu menulis kode berulang untuk setiap kelas case. Kompilator membangun instans dari bidang-bidangnya.

Masalah Kode Berulang

Tanpa derivasi, setiap kelas case baru memerlukan instans manual. Untuk Show pada dua puluh kelas case, berarti ada dua puluh definisi yang hampir sama. Derivasi menghapus pengulangan tersebut.

Komposisi Manual Terlebih Dahulu

Sebelum derivasi otomatis, perhatikan bahwa Anda dapat menyusun instans secara manual dari instans bidang. Inilah prinsip yang diotomatisasi oleh derivasi.

trait Show[A] { def show(a: A): String }

case class User(name: String, age: Int)

object Main {
  implicit val strShow: Show[String] = s => s
  implicit val intShow: Show[Int] = _.toString

  implicit val userShow: Show[User] = (u: User) =>
    s"User(${strShow.show(u.name)}, ${intShow.show(u.age)})"

  def main(args: Array[String]): Unit = {
    println(userShow.show(User("Ann", 30)))
  }
}

Instans Induktif

Derivasi bekerja secara induktif: definisikan instans untuk tipe primitif, lalu gabungkan instans tersebut untuk produk (kelas case) dan jumlah (trait tersegel). Instans turunan dibangun dari bagian-bagiannya.

Kata Kunci derives di Scala 3

Scala 3 mendukung klausa derives. Kelas tipe dengan metode derived dapat dilampirkan ke suatu tipe menggunakan satu kata kunci. (Cuplikan konseptual; memerlukan kelas tipe yang dapat diturunkan.)

enum Color derives CanEqual:
  case Red, Green, Blue

@main def run(): Unit =
  println(Color.Red == Color.Red)

Derivasi Berbasis Mirror

Derivasi Scala 3 menggunakan scala.deriving.Mirror, yang mengekspos struktur suatu tipe (tipe dan nama bidang) saat kompilasi. Metode derived melakukan pelipatan atas instans elemen mirror untuk membangun keseluruhannya.

Derivasi Semi-Otomatis

Pustaka seperti Cats menawarkan derivasi semi-otomatis: Anda memilihnya untuk setiap tipe dengan satu baris seperti deriveShow, sehingga waktu kompilasi tetap dapat diprediksi sekaligus menghilangkan kode berulang.

Otomatis vs Semi-Otomatis

Dua gaya:

  • Otomatis: instans muncul di mana pun diperlukan melalui impor implisit; praktis, tetapi dapat memperlambat kompilasi.
  • Semi-otomatis: Anda menulis satu pemanggilan derivasi eksplisit untuk setiap tipe; lebih terkendali dan pembangunan lebih cepat.

Derivasi untuk Sifat Tersegel

Untuk hierarki tersegel (tipe jumlah), instans hasil derivasi memilih cabang berdasarkan subtipe suatu nilai. Di sini versi manual menunjukkan gagasan yang diotomatisasi oleh derivasi.

trait Show[A] { def show(a: A): String }

sealed trait Shape
case class Circle(r: Int) extends Shape
case class Square(s: Int) extends Shape

object Main {
  implicit val shapeShow: Show[Shape] = {
    case Circle(r) => s"Circle($r)"
    case Square(s) => s"Square($s)"
  }

  def main(args: Array[String]): Unit = {
    println(shapeShow.show(Circle(5)))
    println(shapeShow.show(Square(3)))
  }
}

Kapan Menggunakan Derivasi

Gunakan derivasi ketika:

  • Anda memiliki banyak tipe data yang memerlukan kelas tipe yang sama (penyandi JSON, Show, Eq).
  • Instans tersebut dapat dibuat secara mekanis dari strukturnya.

Tulis instans secara manual ketika perilakunya khusus atau kinerjanya sangat penting.

Contoh Kesetaraan Generik

Kesetaraan adalah kelas tipe klasik yang dapat diturunkan. Operator standar == pada kelas kasus sendiri merupakan semacam kesetaraan struktural yang dihasilkan kompiler untuk Anda.

case class Coord(x: Int, y: Int)

object Main {
  def main(args: Array[String]): Unit = {
    println(Coord(1, 2) == Coord(1, 2))
    println(Coord(1, 2) == Coord(3, 4))
  }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang derivasi.

Ringkasan

Anda telah mempelajari derivasi kelas tipe:

  • Instans dibangun secara induktif dari instans bidang/kasus.
  • Scala 3 menggunakan Mirror dan kata kunci derives.
  • Pilih otomatis untuk kepraktisan, dan semi-otomatis untuk kendali.
  • Gunakan ini untuk menghilangkan kode berulang pada banyak tipe data.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Derivasi Type Class” gratis?

Ya — teks lengkap “Derivasi Type Class” 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 “Derivasi Type Class”?

Instance otomatis. 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 4 dari 4.

Berapa lama pelajaran “Derivasi Type Class” 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. Pola Type Class
  2. Mendefinisikan Instance
  3. Type Class Umum
  4. Derivasi Type Class
← Kembali ke Scala for Backend Engineering & Functional Programming