1. Pengantar
Codelab ini mengajarkan jenis fungsi, cara menggunakan jenis fungsi, dan sintaksis khusus untuk ekspresi lambda.
Di Kotlin, fungsi dianggap sebagai konstruksi kelas satu. Ini berarti fungsi dapat diperlakukan sebagai jenis data. Anda dapat menyimpan fungsi dalam variabel, meneruskannya ke fungsi lain sebagai argumen, dan menampilkannya dari fungsi lain.
Seperti jenis data lain yang dapat Anda ekspresikan dengan nilai literal—seperti jenis Int
dari nilai 10
dan jenis String
dari nilai "Hello"
—Anda juga dapat mendeklarasikan literal fungsi yang disebut ekspresi lambda atau lambda saja. Ekspresi lambda digunakan secara ekstensif dalam pengembangan Android dan secara lebih umum dalam pemrograman Kotlin.
Prasyarat
- Memahami berbagai aspek terkait pemrograman Kotlin, seperti fungsi, pernyataan
if/else
, dan nullability
Yang akan Anda pelajari
- Cara menentukan fungsi dengan sintaksis lambda.
- Cara menyimpan fungsi dalam variabel.
- Cara meneruskan fungsi sebagai argumen ke fungsi lain.
- Cara menampilkan fungsi dari fungsi lain.
- Cara menggunakan jenis fungsi nullable.
- Cara membuat ekspresi lambda lebih ringkas.
- Pengertian fungsi tingkat tinggi.
- Cara menggunakan fungsi
repeat()
Yang akan Anda butuhkan
- Browser web dengan akses ke Kotlin Playground
2. Menonton video tutorial coding langsung (Opsional)
Jika Anda ingin menonton salah satu instruktur kursus saat tengah menyelesaikan codelab, putar video di bawah.
Sebaiknya luaskan video ke layar penuh (dengan ikon ini di pojok video) agar Anda dapat melihat Kotlin Playground dan kodenya dengan lebih jelas.
Langkah ini opsional. Anda juga dapat melewati video dan langsung memulai petunjuk codelab.
3. Menyimpan fungsi dalam variabel
Sejauh ini, Anda telah mempelajari cara mendeklarasikan fungsi dengan kata kunci fun
. Fungsi yang dideklarasikan dengan kata kunci fun
dapat dipanggil, dan akan menyebabkan kode dalam isi fungsi dieksekusi.
Sebagai konstruksi kelas satu, fungsi juga merupakan jenis data sehingga Anda dapat menyimpan fungsi dalam variabel, meneruskannya ke fungsi, dan menampilkannya dari fungsi. Mungkin Anda menginginkan kemampuan untuk mengubah perilaku bagian aplikasi saat runtime atau menanamkan fungsi composable untuk membangun tata letak seperti yang Anda lakukan di codelab sebelumnya. Semua ini dapat dilakukan oleh ekspresi lambda.
Anda dapat melihat hal ini dipraktikkan dalam trick or treat, yang mengacu pada tradisi Halloween di banyak negara saat anak-anak yang mengenakan kostum berkeliling dari rumah ke rumah dan bertanya "Trick or treat" untuk mendapatkan imbalan permen.
Simpan fungsi dalam variabel:
- Buka Kotlin Playground.
- Setelah fungsi
main()
, tentukan fungsitrick()
tanpa parameter dan tanpa nilai yang ditampilkan yang mencetak"No treats!"
. Sintaksisnya sama dengan fungsi lain yang Anda lihat di codelab sebelumnya.
fun main() {
}
fun trick() {
println("No treats!")
}
- Pada isi fungsi
main()
, buat variabel bernamatrickFunction
dan setel agar sama dengantrick
. Anda tidak perlu menyertakan tanda kurung setelahtrick
karena Anda ingin menyimpan fungsi di variabel, bukan memanggil fungsi.
fun main() {
val trickFunction = trick
}
fun trick() {
println("No treats!")
}
- Jalankan kode. Tindakan ini akan menghasilkan error karena compiler Kotlin mengenali
trick
sebagai nama fungsitrick()
, tetapi mengharapkan Anda untuk memanggil fungsi, bukan menetapkannya ke variabel.
Function invocation 'trick()' expected
Anda mencoba menyimpan trick
dalam variabel trickFunction
. Namun, untuk merujuk ke fungsi sebagai nilai, Anda harus menggunakan operator referensi fungsi (::
). Sintaksis diilustrasikan dalam gambar ini:
- Untuk merujuk ke fungsi sebagai nilai, tetapkan ulang
trickFunction
ke::trick
.
fun main() {
val trickFunction = ::trick
}
fun trick() {
println("No treats!")
}
- Jalankan kode untuk memastikan sudah tidak ada lagi error. Anda melihat peringatan bahwa
trickFunction
tidak pernah digunakan, tetapi masalah ini akan diperbaiki di bagian berikutnya.
Menentukan ulang fungsi dengan ekspresi lambda
Ekspresi lambda menyediakan sintaksis ringkas untuk menentukan fungsi tanpa kata kunci fun
. Anda dapat menyimpan ekspresi lambda secara langsung dalam variabel tanpa referensi fungsi pada fungsi lain.
Sebelum operator penetapan (=
), Anda harus menambahkan kata kunci val
atau var
diikuti dengan nama variabel, yang Anda gunakan saat memanggil fungsi. Setelah operator penetapan (=
), tambahkan ekspresi lambda yang terdiri dari sepasang tanda kurung kurawal yang membentuk isi fungsi. Sintaksis diilustrasikan dalam gambar ini:
Saat menentukan fungsi dengan ekspresi lambda, Anda memiliki variabel yang merujuk ke fungsi. Anda juga dapat menetapkan nilainya ke variabel lain seperti jenis lainnya dan memanggil fungsi dengan nama variabel baru.
Update kode untuk menggunakan ekspresi lambda:
- Tulis ulang fungsi
trick()
dengan ekspresi lambda. Sekarang namatrick
merujuk pada nama variabel. Isi fungsi dalam kurung kurawal sekarang merupakan ekspresi lambda.
fun main() {
val trickFunction = ::trick
}
val trick = {
println("No treats!")
}
- Dalam fungsi
main()
, hapus operator referensi fungsi (::
) karenatrick
sekarang merujuk ke variabel, bukan nama fungsi.
fun main() {
val trickFunction = trick
}
val trick = {
println("No treats!")
}
- Jalankan kode. Tidak ada error dan Anda dapat merujuk ke fungsi
trick()
tanpa operator referensi fungsi (::
). Tidak ada output karena Anda masih belum memanggil fungsi. - Di fungsi
main()
, panggil fungsitrick()
, tetapi kali ini dengan menyertakan tanda kurung seperti yang Anda lakukan saat memanggil fungsi lainnya.
fun main() {
val trickFunction = trick
trick()
}
val trick = {
println("No treats!")
}
- Jalankan kode. Isi ekspresi lambda dieksekusi.
No treats!
- Di fungsi
main()
, panggil variabeltrickFunction
seolah-olah itu adalah sebuah fungsi.
fun main() {
val trickFunction = trick
trick()
trickFunction()
}
val trick = {
println("No treats!")
}
- Jalankan kode. Fungsi ini dipanggil dua kali, pertama untuk panggilan fungsi
trick()
dan kedua untuk panggilan fungsitrickFunction()
.
No treats! No treats!
Dengan ekspresi lambda, Anda dapat membuat variabel yang menyimpan fungsi, memanggil variabel tersebut seperti fungsi, dan menyimpannya dalam variabel lain yang dapat dipanggil seperti fungsi.
4. Menggunakan fungsi sebagai jenis data
Di codelab sebelumnya Anda telah mempelajari bahwa Kotlin memiliki inferensi jenis. Saat mendeklarasikan variabel, Anda sering kali tidak perlu menentukan jenis secara eksplisit. Pada contoh sebelumnya, compiler Kotlin dapat menyimpulkan bahwa nilai trick
adalah fungsi. Namun, jika ingin menentukan jenis parameter fungsi atau jenis nilai yang ditampilkan, Anda harus mengetahui sintaksis untuk menyatakan jenis fungsi. Jenis fungsi terdiri dari kumpulan tanda kurung yang berisi daftar parameter opsional, simbol ->
, dan jenis nilai yang ditampilkan. Sintaksis diilustrasikan dalam gambar ini:
Jenis data variabel trick
yang Anda deklarasikan sebelumnya adalah () -> Unit
. Tanda kurung kosong karena fungsi tidak memiliki parameter apa pun. Jenis nilai yang ditampilkan adalah Unit
karena fungsi tersebut tidak menampilkan apa pun. Jika Anda memiliki fungsi yang menggunakan dua parameter Int
dan menampilkan Int
, jenis datanya akan berupa (Int, Int) -> Int
.
Deklarasikan fungsi lain dengan ekspresi lambda yang secara eksplisit menentukan jenis fungsi:
- Setelah variabel
trick
, deklarasikan variabel bernamatreat
sama dengan ekspresi lambda dengan isi yang mencetak"Have a treat!"
.
val trick = {
println("No treats!")
}
val treat = {
println("Have a treat!")
}
- Tentukan jenis data variabel
treat
sebagai() -> Unit
.
val treat: () -> Unit = {
println("Have a treat!")
}
- Di fungsi
main()
, panggil fungsitreat()
.
fun main() {
val trickFunction = trick
trick()
trickFunction()
treat()
}
- Jalankan kode. Fungsi
treat()
memiliki perilaku seperti fungsitrick()
. Kedua variabel memiliki jenis data yang sama meskipun hanya variabeltreat
yang mendeklarasikannya secara eksplisit.
No treats! No treats! Have a treat!
Menggunakan suatu fungsi sebagai jenis nilai yang ditampilkan
Fungsi adalah jenis data sehingga Anda dapat menggunakannya seperti jenis data lainnya. Anda bahkan dapat menampilkan fungsi dari fungsi lain. Sintaksis diilustrasikan dalam gambar ini:
Buat fungsi yang menampilkan fungsi.
- Hapus kode dari fungsi
main()
.
fun main() {
}
- Setelah fungsi
main()
, tentukan fungsitrickOrTreat()
yang akan menerima parameterisTrick
jenisBoolean
.
fun main() {
}
fun trickOrTreat(isTrick: Boolean): () -> Unit {
}
val trick = {
println("No treats!")
}
val treat = {
println("Have a treat!")
}
- Dalam isi fungsi
trickOrTreat()
, tambahkan pernyataanif
yang menampilkan fungsitrick()
jikaisTrick
adalahtrue
dan menampilkan fungsitreat()
jikaisTrick
bernilai salah (false).
fun trickOrTreat(isTrick: Boolean): () -> Unit {
if (isTrick) {
return trick
} else {
return treat
}
}
- Pada fungsi
main()
, buat variabel bernamatreatFunction
dan tetapkan variabel tersebut ke hasil pemanggilantrickOrTreat()
dengan meneruskanfalse
untuk parameterisTrick
. Lalu, buat variabel kedua, bernamatrickFunction
, dan tetapkan ke hasil pemanggilantrickOrTreat()
, kali ini teruskantrue
untuk parameterisTrick
.
fun main() {
val treatFunction = trickOrTreat(false)
val trickFunction = trickOrTreat(true)
}
- Panggil
treatFunction()
, lalu panggiltrickFunction()
di baris berikutnya.
fun main() {
val treatFunction = trickOrTreat(false)
val trickFunction = trickOrTreat(true)
treatFunction()
trickFunction()
}
- Jalankan kode. Anda akan melihat output untuk setiap fungsi. Meskipun tidak memanggil fungsi
trick()
atautreat()
secara langsung, Anda masih dapat memanggilnya karena Anda menyimpan nilai yang ditampilkan, yang diperoleh setiap kali Anda memanggil fungsitrickOrTreat()
, dan memanggil fungsi dengan variabeltrickFunction
dantreatFunction
.
Have a treat! No treats!
Sekarang Anda sudah tahu cara fungsi menampilkan fungsi lainnya. Anda juga dapat meneruskan fungsi sebagai argumen ke fungsi lain. Mungkin Anda ingin memberikan beberapa perilaku kustom ke fungsi trickOrTreat()
untuk melakukan sesuatu selain menampilkan salah satu dari kedua string. Fungsi yang menggunakan fungsi lain sebagai argumen memungkinkan Anda meneruskan fungsi yang berbeda setiap kali fungsi tersebut dipanggil.
Meneruskan fungsi ke fungsi lain sebagai argumen
Di beberapa bagian dunia yang merayakan Halloween, anak-anak menerima uang receh sebagai pengganti permen atau mereka akan menerima keduanya. Anda akan memodifikasi fungsi trickOrTreat()
untuk memungkinkan bonus tambahan yang diwakili oleh fungsi dapat disediakan sebagai argumen.
Fungsi yang digunakan trickOrTreat()
sebagai parameter juga harus menggunakan parameternya sendiri. Saat mendeklarasikan jenis fungsi, parameter tidak akan diberi label. Anda hanya perlu menentukan jenis data dari setiap parameter yang dipisahkan oleh sebuah koma. Sintaksis diilustrasikan dalam gambar ini:
Saat Anda menulis ekspresi lambda untuk fungsi yang menggunakan parameter, parameter tersebut diberi nama sesuai urutan kemunculannya. Nama parameter dicantumkan setelah tanda kurung kurawal buka dan setiap nama dipisahkan dengan sebuah koma. Tanda panah (->
) memisahkan nama parameter dari isi fungsi. Sintaksis diilustrasikan dalam gambar ini:
Update fungsi trickOrTreat()
untuk menggunakan fungsi sebagai parameter:
- Setelah parameter
isTrick
, tambahkan parameterextraTreat
jenis(Int) -> String
.
fun trickOrTreat(isTrick: Boolean, extraTreat: (Int) -> String): () -> Unit {
- Di blok
else
, sebelum pernyataanreturn
, panggilprintln()
yang akan meneruskan panggilan ke fungsiextraTreat()
. Teruskan5
ke dalam panggilan keextraTreat()
.
fun trickOrTreat(isTrick: Boolean, extraTreat: (Int) -> String): () -> Unit {
if (isTrick) {
return trick
} else {
println(extraTreat(5))
return treat
}
}
- Sekarang saat memanggil fungsi
trickOrTreat()
, Anda harus menentukan fungsi dengan ekspresi lambda dan meneruskannya untuk parameterextraTreat
. Pada fungsimain()
sebelum panggilan ke fungsitrickOrTreat()
, tambahkan fungsicoins()
. Fungsicoins()
memberi parameterInt
namaquantity
dan menampilkanString
. Anda mungkin tidak melihat kata kuncireturn
karena kata kunci ini memang tidak dapat digunakan dalam ekspresi lambda. Sebaliknya, hasil ekspresi terakhir dalam fungsi menjadi nilai yang ditampilkan.
fun main() {
val coins: (Int) -> String = { quantity ->
"$quantity quarters"
}
val treatFunction = trickOrTreat(false)
val trickFunction = trickOrTreat(true)
treatFunction()
trickFunction()
}
- Setelah fungsi
coins()
, tambahkan fungsicupcake()
seperti yang ditunjukkan. Beri nama parameterInt
quantity
dan pisahkan dari isi fungsi menggunakan operator->
. Sekarang Anda dapat meneruskan fungsicoins()
ataucupcake()
ke fungsitrickOrTreat()
.
fun main() {
val coins: (Int) -> String = { quantity ->
"$quantity quarters"
}
val cupcake: (Int) -> String = { quantity ->
"Have a cupcake!"
}
val treatFunction = trickOrTreat(false)
val trickFunction = trickOrTreat(true)
treatFunction()
trickFunction()
}
- Dalam fungsi
cupcake()
, hapus parameterquantity
dan simbol->
. Keduanya tidak digunakan sehingga Anda dapat menghilangkannya.
val cupcake: (Int) -> String = {
"Have a cupcake!"
}
- Update panggilan ke fungsi
trickOrTreat()
. Untuk panggilan pertama, jikaisTrick
adalahfalse
, teruskan fungsicoins()
. Untuk panggilan kedua, jikaisTrick
adalahtrue
, teruskan fungsicupcake()
.
fun main() {
val coins: (Int) -> String = { quantity ->
"$quantity quarters"
}
val cupcake: (Int) -> String = {
"Have a cupcake!"
}
val treatFunction = trickOrTreat(false, coins)
val trickFunction = trickOrTreat(true, cupcake)
treatFunction()
trickFunction()
}
- Jalankan kode. Fungsi
extraTreat()
hanya dipanggil jika parameterisTrick
disetel ke argumenfalse
sehingga output mencakup 5 kuartal, tetapi tidak ada cupcake.
5 quarters Have a treat! No treats!
Jenis fungsi yang nullable
Seperti jenis data lainnya, jenis fungsi dapat dideklarasikan sebagai nullable. Dalam kasus ini, variabel dapat berisi fungsi atau null
.
Untuk mendeklarasikan fungsi sebagai nullable, apit jenis fungsi dalam tanda kurung lalu diikuti dengan simbol ?
di luar tanda kurung tutup. Misalnya, jika Anda ingin membuat jenis () -> String
nullable, deklarasikan sebagai jenis (() -> String)?
. Sintaksis diilustrasikan dalam gambar ini:
Buat parameter extraTreat
menjadi nullable agar Anda tidak perlu menyediakan fungsi extraTreat()
setiap kali memanggil fungsi trickOrTreat()
:
- Ubah jenis parameter
extraTreat
menjadi(() -> String)?
.
fun trickOrTreat(isTrick: Boolean, extraTreat: ((Int) -> String)?): () -> Unit {
- Ubah panggilan ke fungsi
extraTreat()
untuk menggunakan pernyataanif
agar hanya memanggil fungsi jika fungsi tersebut non-null. Sekarang fungsitrickOrTreat()
akan terlihat seperti cuplikan kode ini:
fun trickOrTreat(isTrick: Boolean, extraTreat: ((Int) -> String)?): () -> Unit {
if (isTrick) {
return trick
} else {
if (extraTreat != null) {
println(extraTreat(5))
}
return treat
}
}
- Hapus fungsi
cupcake()
, lalu ganti argumencupcake
dengannull
di panggilan kedua ke fungsitrickOrTreat()
.
fun main() {
val coins: (Int) -> String = { quantity ->
"$quantity quarters"
}
val treatFunction = trickOrTreat(false, coins)
val trickFunction = trickOrTreat(true, null)
treatFunction()
trickFunction()
}
- Jalankan kode. Output tidak boleh diubah. Setelah dapat mendeklarasikan jenis fungsi sebagai nullable, Anda tidak perlu lagi meneruskan fungsi untuk parameter
extraTreat
.
5 quarters Have a treat! No treats!
5. Menulis ekspresi lambda dengan sintaksis singkat
Ekspresi lambda menyediakan berbagai cara untuk membuat kode Anda lebih ringkas. Anda akan menjelajahi beberapa di antaranya di bagian ini karena sebagian besar ekspresi lambda yang Anda temui dan tulis ditulis menggunakan sintaksis singkat.
Menghapus nama parameter
Saat menulis fungsi coins()
, Anda secara eksplisit mendeklarasikan nama quantity
untuk parameter Int
fungsi. Namun, seperti yang telah Anda lihat dengan fungsi cupcake()
, Anda dapat menghilangkan nama parameter sepenuhnya. Jika suatu fungsi memiliki satu parameter dan Anda tidak memberikan nama, Kotlin akan menetapkan nama it
secara implisit. Dengan ini Anda dapat menghapus nama parameter dan simbol ->
sehingga ekspresi lambda akan menjadi lebih ringkas. Sintaksis diilustrasikan dalam gambar ini:
Update fungsi coins()
agar dapat menggunakan sintaksis singkat untuk parameter:
- Dalam fungsi
coins()
, hapus nama parameterquantity
dan simbol->
.
val coins: (Int) -> String = {
"$quantity quarters"
}
- Ubah template string
"$quantity quarters"
untuk merujuk ke parameter tunggal menggunakan$it
.
val coins: (Int) -> String = {
"$it quarters"
}
- Jalankan kode. Kotlin mengenali nama parameter
it
dari parameterInt
dan tetap mencetak jumlah kuartal.
5 quarters Have a treat! No treats!
Meneruskan ekspresi lambda langsung ke suatu fungsi
Saat ini fungsi coins()
hanya digunakan di satu tempat. Bagaimana jika Anda dapat langsung meneruskan ekspresi lambda ke fungsi trickOrTreat()
tanpa perlu membuat variabel terlebih dahulu?
Ekspresi lambda adalah literal fungsi, sama seperti 0
adalah literal integer atau "Hello"
adalah literal string. Anda dapat meneruskan ekspresi lambda secara langsung ke panggilan fungsi. Sintaksis diilustrasikan dalam gambar ini:
Ubah kode sehingga Anda dapat menghapus variabel coins
:
- Pindahkan ekspresi lambda agar dapat diteruskan langsung ke panggilan ke fungsi
trickOrTreat()
. Anda juga dapat meringkas ekspresi lambda menjadi satu baris.
fun main() {
val coins: (Int) -> String = {
"$it quarters"
}
val treatFunction = trickOrTreat(false, { "$it quarters" })
val trickFunction = trickOrTreat(true, null)
treatFunction()
trickFunction()
}
- Hapus variabel
coins
karena tidak lagi digunakan.
fun main() {
val treatFunction = trickOrTreat(false, { "$it quarters" })
val trickFunction = trickOrTreat(true, null)
treatFunction()
trickFunction()
}
- Jalankan kode. Kode masih mengompilasi dan berjalan seperti yang diharapkan.
5 quarters Have a treat! No treats!
Menggunakan sintaksis lambda akhir
Anda dapat menggunakan opsi ringkas lainnya untuk menulis lambda jika jenis fungsi adalah parameter terakhir suatu fungsi. Jika demikian, Anda dapat menempatkan ekspresi lambda setelah tanda kurung tutup untuk memanggil fungsi. Sintaksis diilustrasikan dalam gambar ini:
Ini membuat kode Anda lebih mudah dibaca karena memisahkan ekspresi lambda dari parameter lainnya, tetapi tidak mengubah fungsi kode.
Update kode untuk menggunakan sintaksis lambda akhir:
- Di variabel
treatFunction
, pindahkan ekspresi lambda{"$it quarters"}
setelah tanda kurung tutup dalam panggilan ketrickOrTreat()
.
val treatFunction = trickOrTreat(false) { "$it quarters" }
- Jalankan kode. Semuanya masih berfungsi!
5 quarters Have a treat! No treats!
6. Menggunakan fungsi repeat()
Jika fungsi menampilkan fungsi atau menggunakan fungsi sebagai argumen, fungsi itu disebut fungsi tingkat tinggi. Fungsi trickOrTreat()
adalah contoh fungsi tingkat tinggi karena menggunakan fungsi jenis ((Int) -> String)?
sebagai parameter dan menampilkan fungsi jenis () -> Unit
. Kotlin menyediakan beberapa fungsi tingkat tinggi yang berguna dan dapat Anda manfaatkan dengan pengetahuan baru Anda tentang lambda.
Fungsi repeat()
adalah salah satu fungsi tingkat tinggi. Fungsi repeat()
merupakan cara ringkas untuk mengekspresikan loop for
dengan fungsi. Anda akan sering menggunakan fungsi ini dan fungsi tingkat tinggi lainnya dalam unit berikutnya. Fungsi repeat()
memiliki tanda tangan fungsi ini:
repeat(times: Int, action: (Int) -> Unit)
Parameter times
merupakan frekuensi terjadinya tindakan. Parameter action
adalah fungsi yang menggunakan parameter Int
tunggal dan menampilkan jenis Unit
. Parameter Int
dari fungsi action
merupakan frekuensi eksekusi tindakan sejauh ini, seperti argumen 0
untuk iterasi pertama atau argumen 1
untuk iterasi kedua. Anda dapat menggunakan fungsi repeat()
untuk mengulangi kode beberapa kali, mirip dengan loop for
. Sintaksis diilustrasikan dalam gambar ini:
Daripada hanya sekali memanggil fungsi trickFunction()
, Anda dapat memanggilnya beberapa kali dengan fungsi repeat()
.
Update kode trick-or-treat untuk melihat cara kerja fungsi repeat()
:
- Pada fungsi
main()
, panggil fungsirepeat()
di antara panggilan ketreatFunction()
dantrickFunction()
. Teruskan4
untuk parametertimes
dan gunakan sintaksis lambda akhir untuk fungsiaction
. Anda tidak perlu memberikan nama untuk parameterInt
ekspresi lambda.
fun main() {
val treatFunction = trickOrTreat(false) { "$it quarters" }
val trickFunction = trickOrTreat(true, null)
treatFunction()
trickFunction()
repeat(4) {
}
}
- Pindahkan panggilan ke fungsi
treatFunction()
ke dalam ekspresi lambda fungsirepeat()
.
fun main() {
val treatFunction = trickOrTreat(false) { "$it quarters" }
val trickFunction = trickOrTreat(true, null)
repeat(4) {
treatFunction()
}
trickFunction()
}
- Jalankan kode. String
"Have a treat"
akan dicetak empat kali.
5 quarters Have a treat! Have a treat! Have a treat! Have a treat! No treats!
7. Kesimpulan
Selamat! Anda telah mempelajari dasar-dasar jenis fungsi dan ekspresi lambda. Pemahaman terhadap konsep ini akan membantu Anda saat mempelajari bahasa Kotlin lebih lanjut. Penggunaan jenis fungsi, fungsi tingkat tinggi, dan sintaksis singkat juga akan membuat kode Anda lebih ringkas dan mudah dibaca.
Ringkasan
- Fungsi di Kotlin merupakan konstruksi kelas satu dan dapat diperlakukan seperti jenis data.
- Ekspresi lambda menyediakan sintaksis singkat untuk menulis fungsi.
- Anda dapat meneruskan jenis fungsi ke fungsi lain.
- Anda dapat menampilkan jenis fungsi dari fungsi lain.
- Ekspresi lambda menampilkan nilai ekspresi terakhir.
- Jika label parameter dihilangkan dalam ekspresi lambda dengan parameter tunggal, parameter tersebut akan dirujuk dengan ID
it
. - Lambda dapat ditulis inline tanpa nama variabel.
- Jika parameter terakhir fungsi merupakan jenis fungsi, Anda dapat menggunakan sintaksis lambda akhir untuk memindahkan ekspresi lambda setelah tanda kurung terakhir saat memanggil fungsi.
- Fungsi tingkat tinggi merupakan fungsi yang menggunakan fungsi lain sebagai parameter atau menampilkan fungsi.
- Fungsi
repeat()
merupakan fungsi tingkat tinggi yang berfungsi mirip dengan loopfor
.