Scala for Backend Engineering & Functional Programming · Pelajaran

Method Ekstensi

Tambahkan method ke tipe.

Pelajaran 4 dari 413 langkah

Method Ekstensi 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.

Menambahkan metode ke tipe yang sudah ada

Metode ekstensi memungkinkan Anda menambahkan metode baru ke tipe yang bukan milik Anda, seperti Int atau String, tanpa mengubah kode sumbernya. Scala 3 menyediakan sintaks yang bersih untuk ini.

object Main:
  extension (x: Int)
    def squared: Int = x * x
  def main(args: Array[String]): Unit =
    println(5.squared)

Sintaks ekstensi

Tuliskan extension (param: Type), lalu satu atau beberapa definisi metode. Di dalam setiap metode, parameter tersebut merujuk pada nilai penerima.

object Main:
  extension (s: String)
    def shout: String = s.toUpperCase + "!"
  def main(args: Array[String]): Unit =
    println("hello".shout)

Beberapa metode dalam satu blok

Satu klausa extension dapat mendefinisikan beberapa metode yang semuanya beroperasi pada tipe penerima yang sama.

object Main:
  extension (x: Int)
    def squared: Int = x * x
    def cubed: Int = x * x * x
    def isEven: Boolean = x % 2 == 0
  def main(args: Array[String]): Unit =
    println(4.squared)
    println(3.cubed)
    println(6.isEven)

Metode ekstensi dengan parameter

Metode ekstensi dapat menerima parameternya sendiri selain penerima.

object Main:
  extension (x: Int)
    def times(s: String): String = s * x
  def main(args: Array[String]): Unit =
    println(3.times("ab"))

Metode ekstensi generik

Ekstensi dapat bersifat generik, sehingga dapat menambahkan metode ke seluruh kelompok tipe seperti List[A].

object Main:
  extension [A](xs: List[A])
    def second: A = xs(1)
  def main(args: Array[String]): Unit =
    println(List(10, 20, 30).second)
    println(List("a", "b").second)

Mengapa ekstensi lebih baik daripada konversi implisit

Metode ekstensi mencapai tujuan lama 'pimp-my-library' dengan lebih aman: metode ini hanya menambahkan metode yang disebutkan, tanpa risiko konversi tipe diam-diam di tempat lain.

object Main:
  extension (d: Double)
    def percentOf(total: Double): Double = d / total * 100
  def main(args: Array[String]): Unit =
    println(25.0.percentOf(200.0))

Ekstensi dan kelas tipe

Metode ekstensi sangat cocok dipadukan dengan kelas tipe: tentukan perilaku melalui instans given, lalu tampilkan sebagai metode menggunakan using.

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

object Main:
  given Show[Int] with
    def show(a: Int): String = s"<$a>"

  extension [A](a: A)
    def display(using s: Show[A]): String = s.show(a)

  def main(args: Array[String]): Unit =
    println(42.display)

Mendefinisikan operator

Karena operator hanyalah metode, ekstensi juga dapat menambahkan operator simbolis ke tipe yang sudah ada.

object Main:
  extension (x: Int)
    def **(exp: Int): Int = math.pow(x, exp).toInt
  def main(args: Array[String]): Unit =
    println(2 ** 10)

Cakupan dan impor

Metode ekstensi hanya tersedia di tempat metode tersebut berada dalam cakupan. Definisikan metode itu di dalam objek, lalu impor objek tersebut untuk menggunakannya agar jangkauannya tetap terkendali.

object StringOps:
  extension (s: String)
    def reversedWords: String = s.split(" ").reverse.mkString(" ")

object Main:
  import StringOps._
  def main(args: Array[String]): Unit =
    println("hello there world".reversedWords)

Merangkai metode ekstensi

Metode ekstensi mengembalikan nilai biasa, sehingga Anda dapat merangkainya dengan metode bawaan untuk membentuk alur pemrosesan yang lancar.

object Main:
  extension (s: String)
    def emphasize: String = s"*$s*"
  def main(args: Array[String]): Unit =
    println("scala".toUpperCase.emphasize)

Pembantu praktis

Metode ekstensi sangat cocok untuk pembantu kecil dalam domain tertentu, sehingga kode pemanggil dapat dibaca secara alami.

object Main:
  extension (n: Int)
    def isPrime: Boolean =
      n > 1 && (2 until n).forall(d => n % d != 0)
  def main(args: Array[String]): Unit =
    println((2 to 12).filter(_.isPrime).toList)

Pemeriksaan singkat

Apa keunggulan utama metode ekstensi Scala 3 dibandingkan konversi implisit saat menambahkan metode?

Ringkasan

Anda telah mempelajari metode ekstensi:

  • extension (x: Type) def ... menambahkan metode ke tipe yang sudah ada
  • Satu blok dapat mendefinisikan beberapa metode, termasuk operator
  • Metode tersebut dapat bersifat generik dan menerima parameter
  • Metode tersebut secara alami dapat dipadukan dengan kelas tipe melalui using
  • Lebih aman daripada konversi implisit dan harus diimpor ke dalam cakupan
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 “Method Ekstensi” gratis?

Ya — teks lengkap “Method Ekstensi” 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 “Method Ekstensi”?

Tambahkan method ke tipe. 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 “Method Ekstensi” 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. Parameter Implisit
  2. given/using di Scala 3
  3. Konversi Implisit
  4. Method Ekstensi
← Kembali ke Scala for Backend Engineering & Functional Programming