Fungsi sebagai Nilai
Fungsi kelas satu.
Fungsi sebagai Nilai adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 1 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.
Fungsi adalah nilai
Dalam Scala, fungsi merupakan nilai kelas satu. Anda dapat menyimpannya dalam variabel, meneruskannya sebagai argumen, dan mengembalikannya dari fungsi lain, seperti halnya angka atau string.
object Main {
def main(args: Array[String]): Unit = {
val increment: Int => Int = x => x + 1
println(increment(5))
}
}Sintaks tipe fungsi
Tipe Int => String berarti fungsi yang menerima Int dan mengembalikan String. Beberapa parameter ditulis menggunakan tanda kurung: (Int, Int) => Int.
object Main {
def main(args: Array[String]): Unit = {
val add: (Int, Int) => Int = (a, b) => a + b
val label: Int => String = n => s"value=$n"
println(add(3, 4))
println(label(7))
}
}Sintaks lambda (fungsi anonim)
Fungsi anonim, atau lambda, ditulis sebagai (params) => body. Fungsi ini tidak memiliki nama dan sering langsung diteruskan ke fungsi lain.
object Main {
def main(args: Array[String]): Unit = {
val square = (x: Int) => x * x
println(square(6))
}
}Fungsi tingkat tinggi
Fungsi tingkat tinggi adalah fungsi yang menerima fungsi sebagai parameter atau mengembalikan fungsi. map dan filter adalah contoh klasiknya.
object Main {
def applyTwice(f: Int => Int, x: Int): Int = f(f(x))
def main(args: Array[String]): Unit = {
println(applyTwice(_ + 3, 10))
}
}Meneruskan fungsi ke metode
Metode koleksi menerima fungsi. Anda dapat meneruskan lambda secara langsung atau meneruskan nilai fungsi yang memiliki nama.
object Main {
def main(args: Array[String]): Unit = {
val triple = (x: Int) => x * 3
println(List(1, 2, 3).map(triple))
println(List(1, 2, 3).map(x => x * 3))
}
}Mengembalikan fungsi
Sebuah fungsi dapat mengembalikan fungsi lain. Di sini, multiplier mengembalikan fungsi yang mengalikan dengan faktor tetap, sebagai pabrik fungsi sederhana.
object Main {
def multiplier(factor: Int): Int => Int = x => x * factor
def main(args: Array[String]): Unit = {
val timesTen = multiplier(10)
println(timesTen(5))
}
}Metode vs fungsi
def mendefinisikan sebuah metode. Anda dapat mengubah metode menjadi nilai fungsi dengan garis bawah ekspansi eta: methodName _, atau cukup menggunakannya di tempat yang mengharapkan fungsi.
object Main {
def doubleIt(x: Int): Int = x * 2
def main(args: Array[String]): Unit = {
val f: Int => Int = doubleIt
println(f(8))
println(List(1, 2, 3).map(doubleIt))
}
}Fungsi tanpa parameter
Sebuah fungsi dapat tidak menerima argumen. Tipe ini ditulis sebagai () => T. Hal ini berguna untuk menunda perhitungan.
object Main {
def main(args: Array[String]): Unit = {
val greeting: () => String = () => "Hello!"
println(greeting())
}
}Menyimpan fungsi dalam koleksi
Karena fungsi adalah nilai, Anda dapat menyimpannya dalam daftar atau peta dan mencarinya secara dinamis, sehingga membangun pengarah perintah kecil.
object Main {
def main(args: Array[String]): Unit = {
val ops: Map[String, (Int, Int) => Int] = Map(
"add" -> (_ + _),
"mul" -> (_ * _)
)
println(ops("add")(3, 4))
println(ops("mul")(3, 4))
}
}Fungsi sebagai konfigurasi
Meneruskan fungsi memungkinkan pemanggil menyesuaikan perilaku. Di sini, transformAll generik menerapkan fungsi apa pun ke seluruh daftar.
object Main {
def transformAll(xs: List[Int], f: Int => Int): List[Int] = xs.map(f)
def main(args: Array[String]): Unit = {
println(transformAll(List(1, 2, 3), _ + 100))
println(transformAll(List(1, 2, 3), _ * 10))
}
}Contoh penyesuaian yang lebih rapi
Berikut gagasan yang sama dalam bentuk yang lebih rapi: pemanggil menyediakan transformasinya, sehingga fungsi pembantu tetap generik dan dapat digunakan kembali.
object Main {
def transformAll(xs: List[Int], f: Int => Int): List[Int] = xs.map(f)
def main(args: Array[String]): Unit = {
println(transformAll(List(1, 2, 3), x => x + 100))
println(transformAll(List(1, 2, 3), x => x * x))
}
}Pemeriksaan Singkat
Apa yang dimaksud dengan fungsi tingkat tinggi?
Ringkasan
Anda telah mempelajari bahwa fungsi adalah nilai kelas satu:
- Menyimpan fungsi dalam
val, daftar, dan peta - Tipe fungsi seperti
Int => String - Lambda:
(x) => bodydan bentuk singkat_ - Fungsi tingkat tinggi menerima atau mengembalikan fungsi
- Metode menjadi nilai fungsi melalui ekspansi eta
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 “Fungsi sebagai Nilai” gratis?
Ya — teks lengkap “Fungsi sebagai Nilai” 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 “Fungsi sebagai Nilai”?
Fungsi kelas satu. 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 1 dari 4.
Berapa lama pelajaran “Fungsi sebagai Nilai” 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.