1. Sebelum memulai
Dalam codelab sebelumnya, Anda melihat program sederhana yang mencetak Hello, world!
. Dalam program yang telah Anda tulis sejauh ini, Anda telah melihat dua fungsi:
- Fungsi
main()
, yang diperlukan dalam setiap program Kotlin. Ini adalah titik entri, atau titik awal program. - Fungsi
println()
, yang Anda panggil darimain()
untuk menghasilkan teks.
Dalam codelab ini, Anda akan mempelajari fungsi lebih lanjut.
Fungsi memungkinkan Anda membagi kode menjadi bagian-bagian yang dapat digunakan kembali, bukan menyertakan semuanya di main()
. Fungsi adalah elemen penyusun penting aplikasi Android dan mempelajari cara menentukan serta menggunakannya adalah langkah utama dalam perjalanan Anda untuk menjadi developer Android.
Prasyarat
- Pengetahuan tentang dasar-dasar pemrograman Kotlin, termasuk variabel, serta fungsi
println()
danmain()
Yang akan Anda pelajari
- Cara menentukan dan memanggil fungsi Anda sendiri.
- Cara menampilkan nilai dari fungsi yang dapat Anda simpan di variabel.
- Cara menentukan dan memanggil fungsi dengan beberapa parameter.
- Cara memanggil fungsi dengan argumen yang dinamai.
- Cara menetapkan nilai default untuk parameter fungsi.
Yang akan Anda butuhkan
- Browser web dengan akses ke Kotlin Playground
2. Menentukan dan memanggil fungsi
Sebelum mempelajari fungsi secara mendalam, mari kita tinjau beberapa terminologi dasar.
- Mendeklarasikan (atau menentukan) fungsi menggunakan kata kunci
fun
dan menyertakan kode dalam tanda kurung kurawal yang berisi petunjuk yang diperlukan untuk mengeksekusi tugas. - Memanggil fungsi menyebabkan semua kode yang terdapat dalam fungsi tersebut dieksekusi.
Sejauh ini, Anda telah menulis semua kode dalam fungsi main()
. Fungsi main()
tidak benar-benar dipanggil di mana pun dalam kode Anda; compiler Kotlin menggunakannya sebagai titik awal. Fungsi main()
hanya dimaksudkan untuk menyertakan kode lain yang ingin Anda eksekusi, seperti panggilan ke fungsi println()
.
Fungsi println()
adalah bagian dari bahasa Kotlin. Namun, Anda dapat menentukan fungsi Anda sendiri. Tindakan ini memungkinkan kode Anda digunakan kembali jika Anda perlu memanggilnya lebih dari sekali. Contohnya program berikut.
fun main() {
println("Happy Birthday, Rover!")
println("You are now 5 years old!")
}
Fungsi main()
terdiri dari dua pernyataan println()
—satu untuk mengucapkan selamat ulang tahun kepada Rover, dan satu lagi yang menyatakan usia Rover.
Meskipun Kotlin memungkinkan Anda untuk menempatkan semua kode dalam fungsi main()
, Anda mungkin tidak selalu menginginkan hal tersebut. Misalnya, jika Anda juga ingin program Anda menyertakan ucapan Tahun Baru, fungsi utamanya juga harus menyertakan panggilan tersebut ke println()
. Atau mungkin Anda ingin mengucapkan kepada Rover beberapa kali. Anda cukup menyalin dan menempelkan kode, atau membuat fungsi terpisah untuk ucapan selamat ulang tahun. Anda akan melakukan opsi yang kedua. Membuat fungsi terpisah untuk tugas tertentu memiliki sejumlah manfaat.
- Kode yang dapat digunakan kembali: Daripada menyalin dan menempelkan kode yang perlu digunakan lebih dari sekali, Anda cukup memanggil fungsi di mana saja saat diperlukan.
- Keterbacaan: Memastikan fungsi melakukan satu dan hanya satu tugas tertentu yang membantu developer dan rekan satu tim, serta Anda di masa mendatang untuk mengetahui dengan pasti apa yang dilakukan oleh sebuah kode.
Sintaksis untuk menentukan fungsi ditampilkan dalam diagram berikut.
Definisi fungsi dimulai dengan kata kunci fun
, diikuti dengan nama fungsi, kumpulan tanda kurung buka dan tutup, serta kumpulan kurung kurawal buka dan tutup. Kode yang ada dalam tanda kurung kurawal adalah kode yang akan berjalan saat fungsi dipanggil.
Anda akan membuat fungsi baru untuk memindahkan dua pernyataan println()
dari fungsi main()
.
- Di browser Anda, buka Kotlin Playground dan ganti konten dengan kode berikut.
fun main() {
println("Happy Birthday, Rover!")
println("You are now 5 years old!")
}
- Setelah fungsi
main()
, tentukan fungsi baru bernamabirthdayGreeting()
. Fungsi ini dideklarasikan dengan sintaksis yang sama dengan fungsimain()
.
fun main() {
println("Happy Birthday, Rover!")
println("You are now 5 years old!")
}
fun birthdayGreeting() {
}
- Pindahkan dua pernyataan
println()
darimain()
ke dalam tanda kurung kurawal fungsibirthdayGreeting()
.
fun main() {
}
fun birthdayGreeting() {
println("Happy Birthday, Rover!")
println("You are now 5 years old!")
}
- Di fungsi
main()
, panggil fungsibirthdayGreeting()
. Kode yang sudah selesai akan terlihat seperti berikut:
fun main() {
birthdayGreeting()
}
fun birthdayGreeting() {
println("Happy Birthday, Rover!")
println("You are now 5 years old!")
}
- Jalankan kode. Anda akan melihat output berikut:
Happy Birthday, Rover! You are now 5 years old!
3. Menampilkan nilai dari fungsi
Pada aplikasi yang lebih kompleks, fungsi melakukan lebih banyak hal dari sekadar mencetak teks.
Fungsi Kotlin juga dapat menghasilkan data yang disebut nilai yang ditampilkan yang disimpan dalam variabel dan dapat digunakan di tempat lain dalam kode Anda.
Saat menentukan fungsi, Anda dapat menentukan jenis data dari nilai yang ingin ditampilkan. Jenis nilai yang ditampilkan ditentukan dengan menempatkan titik dua (:
) setelah tanda kurung, satu spasi kosong, lalu nama jenis (Int
, String
, dll.). Kemudian, satu spasi ditempatkan di antara jenis nilai yang ditampilkan dan kurung kurawal buka. Dalam isi fungsi, setelah semua pernyataan, Anda menggunakan pernyataan return untuk menentukan nilai yang Anda inginkan agar ditampilkan oleh fungsi. Pernyataan return terdiri dari kata kunci return
diikuti dengan nilai, seperti variabel, yang Anda inginkan agar ditampilkan oleh fungsi sebagai output.
Sintaksis untuk mendeklarasikan fungsi dengan jenis nilai yang ditampilkan adalah sebagai berikut.
Jenis Unit
Secara default, jika Anda tidak menentukan jenis nilai yang ditampilkan, jenis nilai yang ditampilkan default adalah Unit
. Unit
berarti fungsi tidak menampilkan nilai. Unit
setara untuk membatalkan jenis nilai yang ditampilkan dalam bahasa lain (void
di Java dan C; Void
/tuple kosong ()
di Swift; None
di Python, dll.). Setiap fungsi yang tidak menampilkan nilai, secara implisit akan menampilkan Unit
. Anda dapat mengamatinya dengan memodifikasi kode untuk menampilkan Unit
.
- Pada deklarasi fungsi untuk
birthdayGreeting()
, tambahkan titik dua setelah tanda kurung tutup dan tentukan jenis nilai yang ditampilkan sebagaiUnit
.
fun main() {
birthdayGreeting()
}
fun birthdayGreeting(): Unit {
println("Happy Birthday, Rover!")
println("You are now 5 years old!")
}
- Jalankan kode dan amati jika semuanya masih berfungsi.
Happy Birthday, Rover! You are now 5 years old!
Menentukan jenis nilai yang ditampilkan Unit
di Kotlin bersifat opsional. Untuk fungsi yang tidak menampilkan apa pun, atau menampilkan Unit
, Anda tidak memerlukan pernyataan return.
Menampilkan String
dari birthdayGreeting()
Untuk menunjukkan bagaimana fungsi dapat menampilkan nilai, Anda akan memodifikasi fungsi birthdayGreeting()
untuk menampilkan string, bukan hanya mencetak hasilnya.
- Ganti jenis nilai yang ditampilkan
Unit
denganString
.
fun birthdayGreeting(): String {
println("Happy Birthday, Rover!")
println("You are now 5 years old!")
}
- Jalankan kode. Anda akan mendapatkan pesan error. Jika Anda mendeklarasikan jenis nilai yang ditampilkan untuk suatu fungsi (mis.,
String
), fungsi tersebut harus menyertakan pernyataanreturn
.
A 'return' expression required in a function with a block body ('{...}')
- Anda hanya dapat menampilkan satu string dari fungsi, bukan dua. Ganti pernyataan
println()
dengan dua variabel,nameGreeting
danageGreeting,
menggunakan kata kuncival
. Karena Anda menghapus panggilan keprintln()
daribirthdayGreeting()
, memanggilbirthdayGreeting()
tidak akan mencetak apa pun.
fun birthdayGreeting(): String {
val nameGreeting = "Happy Birthday, Rover!"
val ageGreeting = "You are now 5 years old!"
}
- Dengan menggunakan sintaksis pemformatan string yang Anda pelajari di codelab sebelumnya, tambahkan pernyataan
return
untuk menampilkan string dari fungsi yang terdiri dari kedua ucapan.
Untuk memformat ucapan pada baris terpisah, Anda juga perlu menggunakan karakter escape \n
. Ini sama seperti karakter escape \"
yang Anda pelajari di codelab sebelumnya. Karakter \n
diganti untuk newline sehingga kedua ucapan tersebut masing-masing berada di baris yang terpisah.
fun birthdayGreeting(): String {
val nameGreeting = "Happy Birthday, Rover!"
val ageGreeting = "You are now 5 years old!"
return "$nameGreeting\n$ageGreeting"
}
- Di
main()
, karenabirthdayGreeting()
menampilkan nilai, Anda dapat menyimpan hasilnya dalam variabel string. Deklarasikan variabelgreeting
menggunakanval
untuk menyimpan hasil pemanggilanbirthdayGreeting()
.
fun main() {
val greeting = birthdayGreeting()
}
- Di
main()
, panggilprintln()
untuk mencetak stringgreeting
. Fungsimain()
kini akan terlihat seperti berikut.
fun main() {
val greeting = birthdayGreeting()
println(greeting)
}
- Jalankan kode Anda, lalu amati bahwa hasilnya sama seperti sebelumnya. Dengan menampilkan nilai, Anda dapat menyimpan hasilnya dalam variabel. Namun, menurut Anda, apa yang terjadi jika Anda memanggil fungsi
birthdayGreeting()
di dalam fungsiprintln()
?
Happy Birthday, Rover! You are now 5 years old!
- Hapus variabel, lalu teruskan hasil pemanggilan fungsi
birthdayGreeting()
ke dalam fungsiprintln()
:
fun main() {
println(birthdayGreeting())
}
- Jalankan kode Anda dan amati outputnya. Nilai yang ditampilkan pemanggilan
birthdayGreeting()
diteruskan langsung keprintln()
.
Happy Birthday, Rover! You are now 5 years old!
4. Menambahkan parameter ke fungsi birthdayGreeting()
Seperti yang Anda lihat, saat memanggil println()
, Anda dapat menyertakan string dalam tanda kurung atau meneruskan nilai ke fungsi. Anda dapat melakukan hal yang sama dengan fungsi birthdayGreeting()
. Namun, Anda harus menambahkan parameter terlebih dahulu ke birthdayGreeting()
.
Parameter menentukan nama variabel dan jenis data yang dapat Anda teruskan ke fungsi sebagai data yang akan diakses di dalam fungsi. Parameter dideklarasikan dalam tanda kurung setelah nama fungsi.
Setiap parameter terdiri dari nama variabel dan jenis data, yang dipisahkan dengan titik dua dan spasi. Beberapa parameter dipisahkan oleh koma.
Saat ini, fungsi birthdayGreeting()
hanya dapat digunakan untuk memberikan ucapan kepada Rover. Anda akan menambahkan parameter ke fungsi birthdayGreeting()
agar dapat memberikan ucapan ke nama apa pun yang diteruskan ke fungsi.
- Dalam tanda kurung fungsi
birthdayGreeting()
, tambahkan parametername
dari jenisString
, menggunakan sintaksisname: String
.
fun birthdayGreeting(name: String): String {
val nameGreeting = "Happy Birthday, Rover!"
val ageGreeting = "You are now 5 years old!"
return "$nameGreeting\n$ageGreeting"
}
Parameter yang ditentukan pada langkah sebelumnya berfungsi seperti variabel yang dideklarasikan dengan kata kunci val
. Nilainya dapat digunakan di mana saja dalam fungsi birthdayGreeting()
. Pada codelab sebelumnya, Anda telah mempelajari cara memasukkan nilai variabel ke dalam string.
- Ganti
Rover
di stringnameGreeting
dengan simbol$
diikuti dengan parametername
.
fun birthdayGreeting(name: String): String {
val nameGreeting = "Happy Birthday, $name!"
val ageGreeting = "You are now 5 years old!"
return "$nameGreeting\n$ageGreeting"
}
- Jalankan kode Anda dan amati errornya. Setelah mendeklarasikan parameter
name
, Anda harus meneruskanString
saat memanggilbirthdayGreeting()
. Saat memanggil fungsi yang menggunakan parameter, Anda meneruskan argumen ke fungsi tersebut. Argumen adalah nilai yang Anda teruskan, seperti"Rover"
.
No value passed for parameter 'name'
- Teruskan
"Rover"
ke dalam panggilanbirthdayGreeting()
dimain()
.
fun main() {
println(birthdayGreeting("Rover"))
}
- Jalankan kode Anda dan amati outputnya. Nama Rover berasal dari parameter
name
.
Happy Birthday, Rover! You are now 5 years old!
- Karena
birthdayGreeting()
mengambil parameter, Anda dapat memanggilnya dengan nama selain Rover. Tambahkan panggilan lain kebirthdayGreeting()
di dalam panggilan keprintln()
, yang meneruskan argumen"Rex"
.
println(birthdayGreeting("Rover"))
println(birthdayGreeting("Rex"))
- Jalankan lagi kode, lalu amati bahwa outputnya berbeda berdasarkan argumen yang diteruskan ke
birthdayGreeting()
.
Happy Birthday, Rover! You are now 5 years old! Happy Birthday, Rex! You are now 5 years old!
5. Fungsi dengan beberapa parameter
Sebelumnya, Anda telah menambahkan parameter untuk mengubah ucapan berdasarkan nama. Namun, Anda juga dapat menentukan lebih dari satu parameter untuk sebuah fungsi, bahkan parameter dari berbagai jenis data. Di bagian ini, Anda akan mengubah ucapan agar ucapan tersebut juga berubah berdasarkan usia anjing.
Definisi parameter dipisahkan dengan koma. Demikian pula, saat Anda memanggil fungsi dengan beberapa parameter, Anda juga memisahkan argumen yang diteruskan dengan koma. Mari kita lihat bagaimana penerapannya.
- Setelah parameter
name
, tambahkan parameterage
jenisInt
, ke fungsibirthdayGreeting()
. Deklarasi fungsi baru harus memiliki dua parameter,name
danage
, dipisahkan dengan koma:
fun birthdayGreeting(name: String, age: Int): String {
val nameGreeting = "Happy Birthday, $name!"
val ageGreeting = "You are now 5 years old!"
return "$nameGreeting\n$ageGreeting"
}
- String ucapan baru harus menggunakan parameter
age
. Perbarui fungsibirthdayGreeting()
untuk menggunakan nilai parameterage
di stringageGreeting
.
fun birthdayGreeting(name: String, age: Int): String {
val nameGreeting = "Happy Birthday, $name!"
val ageGreeting = "You are now $age years old!"
return "$nameGreeting\n$ageGreeting"
}
- Jalankan fungsi, lalu perhatikan error dalam output:
No value passed for parameter 'age' No value passed for parameter 'age'
- Ubah kedua panggilan menjadi fungsi
birthdayGreeting()
dimain()
untuk meneruskan usia yang berbeda bagi setiap anjing. Teruskan5
untuk usia Rover dan2
untuk usia Rex.
fun main() {
println(birthdayGreeting("Rover", 5))
println(birthdayGreeting("Rex", 2))
}
- Jalankan kode. Setelah Anda meneruskan nilai untuk kedua parameter, output harus mencerminkan nama dan usia setiap anjing saat Anda memanggil fungsi.
Happy Birthday, Rover! You are now 5 years old! Happy Birthday, Rex! You are now 2 years old!
Tanda Tangan Fungsi
Sejauh ini Anda telah melihat cara menentukan nama fungsi, input (parameter), dan output. Nama fungsi dengan inputnya (parameter) secara kolektif dikenal sebagai tanda tangan fungsi. Tanda tangan fungsi terdiri dari segala sesuatu sebelum jenis nilai yang ditampilkan dan ditunjukkan dalam cuplikan kode berikut.
fun birthdayGreeting(name: String, age: Int)
Parameter yang dipisahkan koma terkadang disebut daftar parameter.
Anda akan sering melihat istilah ini di dokumentasi untuk kode yang ditulis oleh developer lain. Tanda tangan fungsi memberi tahu Anda nama fungsi dan jenis data yang dapat diteruskan.
Anda telah mempelajari banyak sintaksis baru seputar penetapan fungsi. Lihat diagram berikut untuk mengetahui ringkasan sintaksis fungsi.
6. Argumen yang dinamai
Pada contoh sebelumnya, Anda tidak perlu menentukan nama parameter, name
atau age
, saat Anda memanggil fungsi. Namun, Anda dapat melakukannya jika menginginkannya. Misalnya, Anda dapat memanggil fungsi dengan banyak parameter atau ingin meneruskan argumen dalam urutan yang berbeda, seperti menempatkan parameter age
sebelum parameter name
. Saat Anda menyertakan nama parameter saat memanggil fungsi, hal ini disebut argumen bernama. Coba gunakan argumen yang dinamai dengan fungsi birthdayGreeting()
.
- Ubah panggilan untuk Rex agar menggunakan argumen yang dinamai seperti yang ditunjukkan dalam cuplikan kode ini. Anda dapat melakukannya dengan menyertakan nama parameter yang diikuti dengan tanda sama dengan, lalu nilainya (mis.
name = "Rex"
).
println(birthdayGreeting(name = "Rex", age = 2))
- Jalankan kode, lalu amati bahwa output tidak berubah:
Happy Birthday, Rover! You are now 5 years old! Happy Birthday, Rex! You are now 2 years old!
- Urutkan ulang argumen yang dinamai. Misalnya, tempatkan argumen yang dinamai
age
sebelum argumen yang dinamainame
.
println(birthdayGreeting(age = 2, name = "Rex"))
- Jalankan kode dan amati bahwa output tetap sama. Meskipun Anda mengubah urutan argumen, nilai yang sama diteruskan untuk parameter yang sama.
Happy Birthday, Rover! You are now 5 years old! Happy Birthday, Rex! You are now 2 years old!
7. Argumen default
Parameter fungsi juga dapat menentukan argumen default. Mungkin Rover adalah anjing favorit Anda, atau Anda mengharapkan fungsi dipanggil dengan argumen tertentu dalam sebagian besar kasus. Saat memanggil fungsi, Anda dapat memilih untuk menghilangkan argumen yang memiliki default, dalam hal ini, default digunakan.
Untuk menambahkan argumen default, tambahkan operator penetapan (=
) setelah jenis data untuk parameter dan tetapkan sama dengan nilai. Ubah kode untuk menggunakan argumen default.
- Di fungsi
birthdayGreeting()
, tetapkan parametername
ke nilai default"Rover"
.
fun birthdayGreeting(name: String = "Rover", age: Int): String {
return "Happy Birthday, $name! You are now $age years old!"
}
- Pada panggilan pertama ke
birthdayGreeting()
untuk Rover dimain()
, setel argumen bernamaage
ke5
. Karena parameterage
ditentukan setelahname
, Anda perlu menggunakan argumen yang dinamaiage
. Tanpa argumen yang dinamai, Kotlin mengasumsikan urutan argumen adalah urutan yang sama dengan parameter yang ditentukan. Argumen yang dinamai digunakan untuk memastikan Kotlin mengharapkanInt
untuk parameterage
.
println(birthdayGreeting(age = 5))
println(birthdayGreeting("Rex", 2))
- Jalankan kode. Panggilan pertama ke fungsi
birthdayGreeting()
akan mencetak "Rover" sebagai nama karena Anda tidak pernah menentukan namanya. Panggilan kedua kebirthdayGreeting()
masih menggunakan nilaiRex
, yang Anda teruskan untukname
.
Happy Birthday, Rover! You are now 5 years old! Happy Birthday, Rex! You are now 2 years old!
- Hapus nama dari panggilan kedua ke fungsi
birthdayGreeting()
. Sekali lagi, karenaname
dihilangkan, Anda perlu menggunakan argumen bernama untuk usia.
println(birthdayGreeting(age = 5))
println(birthdayGreeting(age = 2))
- Jalankan kode, lalu amati bahwa sekarang kedua panggilan untuk
birthdayGreeting()
mencetak "Rover" sebagai nama karena tidak ada argumen nama yang diteruskan.
Happy Birthday, Rover! You are now 5 years old! Happy Birthday, Rover! You are now 2 years old!
8. Kesimpulan
Selamat! Anda telah mempelajari cara menentukan dan memanggil fungsi di Kotlin.
Ringkasan
- Fungsi ditetapkan dengan kata kunci
fun
dan berisi bagian kode yang dapat digunakan kembali. - Fungsi membantu membuat program yang lebih besar menjadi lebih mudah dikelola dan mencegah pengulangan kode yang tidak perlu.
- Fungsi dapat menampilkan nilai yang dapat Anda simpan dalam variabel untuk digunakan di lain waktu.
- Fungsi dapat menggunakan parameter, yaitu variabel yang tersedia di dalam isi fungsi.
- Argumen adalah nilai yang Anda teruskan saat memanggil fungsi.
- Anda dapat memberi nama argumen saat memanggil fungsi. Saat menggunakan argumen yang dinamai, Anda dapat menyusun ulang argumen tanpa memengaruhi output.
- Anda dapat menentukan argumen default yang memungkinkan Anda menghilangkan argumen saat memanggil fungsi.