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
Mirrordan kata kunciderives. - 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
- Pola Type Class
- Mendefinisikan Instance
- Type Class Umum
- Derivasi Type Class