Android Academy · Pelajaran

Fungsi Ekstensi & Fungsi Orde Tinggi

Tambahkan perilaku ke tipe yang sudah ada dengan fungsi ekstensi dan gunakan fungsi orde tinggi serta fungsi ruang lingkup (let, apply, also, run, with) untuk menghasilkan kode Kotlin yang ekspresif.

Pelajaran 4 dari 413 langkah

Fungsi Ekstensi & Fungsi Orde Tinggi adalah pelajaran Android Academy 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 Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.

Fungsi Ekstensi

Fungsi ekstensi memungkinkan Anda menambahkan fungsi baru ke kelas yang sudah ada tanpa mengubahnya atau menggunakan pewarisan. Anda dapat memperluas String, Int, kelas buatan Anda sendiri, atau bahkan View milik Android.

Sintaks: fun TypeName.functionName() { }

Menulis Fungsi Ekstensi

Di dalam fungsi ekstensi, this merujuk ke objek penerima:

fun String.isPalindrome(): Boolean {
    val cleaned = this.lowercase().filter { it.isLetter() }
    return cleaned == cleaned.reversed()
}

fun Int.isEven() = this % 2 == 0

fun main() {
    println("racecar".isPalindrome())  // true
    println("hello".isPalindrome())    // false
    println(4.isEven())                // true
    println(7.isEven())                // false
}

Fungsi Ekstensi pada View Android

Pola Android yang umum — sembunyikan/tampilkan tampilan dengan ekstensi, alih-alih mengulang kode berulang:

import android.view.View

fun View.show() { visibility = View.VISIBLE }
fun View.hide() { visibility = View.GONE }
fun View.invisible() { visibility = View.INVISIBLE }

// Usage in Activity:
// binding.progressBar.show()
// binding.recyclerView.hide()

Fungsi Orde Tinggi

Fungsi orde tinggi menerima fungsi sebagai parameter atau mengembalikan fungsi. Anda sudah menggunakannya: filter, map, dan forEach semuanya adalah fungsi orde tinggi.

Sintaks jenis fungsi: (ParamType) -> ReturnType

Meneruskan Fungsi sebagai Parameter

Definisikan fungsi yang menerima fungsi lain:

fun operate(a: Int, b: Int, op: (Int, Int) -> Int): Int {
    return op(a, b)
}

fun main() {
    val sum  = operate(3, 4) { x, y -> x + y }
    val prod = operate(3, 4) { x, y -> x * y }
    val max  = operate(3, 4, ::maxOf)   // method reference

    println(sum)   // 7
    println(prod)  // 12
    println(max)   // 4
}

Mengembalikan Fungsi

Fungsi juga dapat mengembalikan fungsi lain — berguna untuk membuat perilaku yang dapat dikonfigurasi:

fun makeMultiplier(factor: Int): (Int) -> Int {
    return { number -> number * factor }
}

fun main() {
    val double = makeMultiplier(2)
    val triple = makeMultiplier(3)

    println(double(5))   // 10
    println(triple(5))   // 15

    val numbers = listOf(1, 2, 3, 4)
    println(numbers.map(double))  // [2, 4, 6, 8]
}

Fungsi Cakupan: let

Fungsi cakupan Kotlin menjalankan suatu blok pada objek dan mengembalikan hasil. let digunakan untuk pemeriksaan null dan transformasi:

fun main() {
    val name: String? = "Alice"

    // Only runs if name is not null
    name?.let {
        println("Name length: ${it.length}")
        println("Upper: ${it.uppercase()}")
    }

    // Transform a value
    val length = name?.let { it.length } ?: 0
    println("Length: $length")  // 5
}

Fungsi Cakupan: apply & also

apply mengonfigurasi objek dan mengembalikan objek tersebut. also melakukan efek samping dan mengembalikan objek:

data class Config(var host: String = "", var port: Int = 0, var timeout: Int = 0)

fun main() {
    // apply: configure an object (this = receiver)
    val config = Config().apply {
        host = "api.example.com"
        port = 443
        timeout = 30
    }
    println(config)  // Config(host=api.example.com, port=443, timeout=30)

    // also: log or debug (it = receiver)
    val result = listOf(1, 2, 3)
        .also { println("Original: $it") }
        .map { it * 2 }
        .also { println("Doubled: $it") }
}

Fungsi Cakupan: run & with

run menjalankan suatu blok pada objek dan mengembalikan hasil blok tersebut. with serupa, tetapi bukan ekstensi:

data class User(val name: String, val age: Int)

fun main() {
    val user = User("Bob", 30)

    // run: compute something using the object
    val greeting = user.run {
        if (age >= 18) "Hello, $name!" else "Hi, $name!"
    }
    println(greeting)  // Hello, Bob!

    // with: group operations on an object
    val info = with(user) {
        "Name: $name, Age: $age"
    }
    println(info)  // Name: Bob, Age: 30
}

Lembar Ringkas Fungsi Cakupan

Referensi singkat untuk memilih fungsi cakupan yang tepat:

  • let — blok yang aman terhadap null, mengubah objek, mengembalikan hasil lambda
  • apply — mengonfigurasi objek, mengembalikan objek tersebut (this)
  • also — efek samping (pencatatan), mengembalikan objek tersebut (it)
  • run — menghitung hasil dari objek, mengembalikan hasil lambda
  • with — mengelompokkan pemanggilan pada objek, bukan ekstensi

Fungsi inline & reified

Tandai fungsi orde tinggi sebagai inline untuk menghindari alokasi objek lambda saat runtime. reified memungkinkan Anda menggunakan jenis generik T saat runtime (biasanya dihapus):

inline fun <reified T> Any.isOfType(): Boolean = this is T

fun main() {
    println("hello".isOfType<String>())   // true
    println(42.isOfType<String>())         // false
    println(3.14.isOfType<Double>())       // true
}

Pemeriksaan Singkat

Fungsi cakupan mana yang paling tepat untuk mengonfigurasi objek yang baru dibuat dan mengembalikan objek yang sama?

Ringkasan: Ekstensi & Fungsi Orde Tinggi

Perangkat fungsional Kotlin kini siap Anda gunakan:

  • Fungsi ekstensi — menambahkan perilaku ke jenis apa pun tanpa pewarisan
  • Fungsi orde tinggi — meneruskan dan mengembalikan fungsi untuk API yang fleksibel
  • Fungsi cakupan: let (pemeriksaan null), apply (konfigurasi), also (efek samping), run/with (perhitungan)
  • inline + reified — lambda tanpa biaya tambahan dengan informasi jenis saat runtime

Berikutnya: buat aplikasi dengan banyak layar menggunakan Fragment.

Gratis untuk memulai

Belajar Kotlin 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
36
Pelajaran
152

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Fungsi Ekstensi & Fungsi Orde Tinggi” gratis?

Ya — teks lengkap “Fungsi Ekstensi & Fungsi Orde Tinggi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Fungsi Ekstensi & Fungsi Orde Tinggi”?

Tambahkan perilaku ke tipe yang sudah ada dengan fungsi ekstensi dan gunakan fungsi orde tinggi serta fungsi ruang lingkup (let, apply, also, run, with) untuk menghasilkan kode Kotlin yang ekspresif. Kamu berlatih Android Academy 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 Android Academy?

Tidak diperlukan pengalaman sebelumnya. Android Academy 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 “Fungsi Ekstensi & Fungsi Orde Tinggi” 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 Android Academy ini?

Ya. Setiap pelajaran Android Academy 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. Keamanan Nilai Null
  2. Kelas & Objek
  3. Kelas Data & Kelas Sealed
  4. Fungsi Ekstensi & Fungsi Orde Tinggi
← Kembali ke Android Academy