Method Ekstensi
Tambahkan method ke tipe.
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
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
- Parameter Implisit
- given/using di Scala 3
- Konversi Implisit
- Method Ekstensi