Type Class Umum
Show, Ordering, Numeric.
Type Class Umum adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 3 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.
Kelas Tipe Standar
Pustaka standar Scala menyediakan beberapa kelas tipe yang Anda gunakan setiap hari, terkadang tanpa menyadarinya:
Ordering[A]— cara membandingkan nilai.Numeric[A]— operasi aritmetika pada bilangan.- Perenderan bergaya
Show(kustom atauShowdari Cats).
Ordering Memberi Kekuatan pada sorted
List.sorted memerlukan Ordering[A] implisit. Pustaka standar menyediakan instans untuk bilangan, string, dan banyak tipe lainnya.
@main def run(): Unit = {
println(List(3, 1, 2).sorted)
println(List("pear", "apple", "fig").sorted)
}Ordering Kustom
Teruskan Ordering secara eksplisit untuk mengurutkan dengan cara berbeda, misalnya secara menurun atau berdasarkan kunci turunan.
@main def run(): Unit = {
val nums = List(3, 1, 2)
println(nums.sorted(Ordering.Int.reverse))
val words = List("bbb", "a", "cc")
println(words.sortBy(_.length))
}Ordering untuk Kelas Case
Sediakan instans Ordering untuk tipe Anda sendiri agar koleksi tipe tersebut dapat diurutkan. Ordering.by menurunkan sebuah instans dari kunci.
case class Person(name: String, age: Int)
object Main {
implicit val byAge: Ordering[Person] = Ordering.by(_.age)
def main(args: Array[String]): Unit = {
val people = List(Person("A", 30), Person("B", 20))
println(people.sorted)
}
}Numeric Mengabstraksikan Aritmetika
Numeric[A] memungkinkan Anda menulis fungsi yang bekerja pada tipe bilangan apa pun. sum pada daftar bergantung padanya.
@main def run(): Unit = {
println(List(1, 2, 3).sum)
println(List(1.5, 2.5).sum)
}Menulis Kode Numerik Generik
Dengan batas konteks [A: Numeric], Anda dapat menjumlahkan atau mengalikan tipe bilangan apa pun secara generik. Gunakan operasi milik instans melalui Numeric[A].
object Main {
def addAll[A: Numeric](xs: List[A]): A = {
val num = implicitly[Numeric[A]]
xs.foldLeft(num.zero)(num.plus)
}
def main(args: Array[String]): Unit = {
println(addAll(List(1, 2, 3)))
println(addAll(List(1.0, 2.0, 3.5)))
}
}Operator Numerik
Mengimpor Implicits milik instans memberi Anda operator umum (+, *) pada tipe numerik generik, sehingga kode terbaca secara alami.
object Main {
def square[A](a: A)(implicit num: Numeric[A]): A = {
import num._
a * a
}
def main(args: Array[String]): Unit = {
println(square(5))
println(square(2.5))
}
}Kelas Tipe Show
Show merender nilai menjadi teks dengan cara yang aman secara tipe, tidak seperti toString yang tersedia pada segala sesuatu. Cats menyediakannya; berikut versi minimumnya.
trait Show[A] { def show(a: A): String }
object Show {
implicit val intShow: Show[Int] = n => s"Int($n)"
def apply[A](implicit s: Show[A]): Show[A] = s
}
object Main {
def main(args: Array[String]): Unit = {
println(Show[Int].show(42))
}
}Ordering dan max/min
Metode seperti max, min, dan maxBy pada koleksi semuanya menggunakan Ordering di balik layar.
@main def run(): Unit = {
val xs = List(4, 9, 1, 7)
println(xs.max)
println(xs.min)
println(List("a", "abc", "ab").maxBy(_.length))
}Menggabungkan Ordering
Anda dapat membuat ordering gabungan dengan Ordering.by pada tuple, dengan mengurutkan berdasarkan satu bidang lalu bidang lainnya.
case class Rec(group: String, score: Int)
object Main {
implicit val ord: Ordering[Rec] = Ordering.by(r => (r.group, -r.score))
def main(args: Array[String]): Unit = {
val data = List(Rec("b", 5), Rec("a", 1), Rec("a", 9))
data.sorted.foreach(println)
}
}Mengapa Menggunakan Kelas Tipe di Sini
Karena perbandingan dan aritmetika merupakan kelas tipe, sorted atau sum yang sama dapat digunakan untuk tipe bawaan maupun tipe Anda sendiri, cukup dengan menyediakan instans. Inilah penggunaan polimorfisme ad hoc oleh pustaka standar.
Pemeriksaan Singkat
Uji pengetahuan Anda tentang kelas tipe standar.
Rangkuman
Anda telah mengenal beberapa kelas tipe standar yang umum:
Ordering[A]menggerakkansorted,max, danmin; buat denganOrdering.by.Numeric[A]memungkinkan aritmetika generik dan mendukungsum.- Kelas bergaya
Showmerender nilai secara aman berdasarkan tipe.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Type Class Umum” gratis?
Ya — teks lengkap “Type Class Umum” 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 “Type Class Umum”?
Show, Ordering, Numeric. 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 3 dari 4.
Berapa lama pelajaran “Type Class Umum” 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