Masukkan Password
33 Kursus Kotlin Lengkap #32 - Parameter Fungsi - Tutorial Kotlin untuk Pemula
Di lesson ini kamu masuk ke konsep parameter dan argument pada function. Ini adalah perkembangan yang sangat penting dari lesson sebelumnya.
Sebelumnya kita punya function seperti:
fun printWelcome() {
println("Welcome to our course")
}
Masalahnya function itu selalu mencetak pesan yang sama.
Sekarang kita ingin membuat function yang lebih fleksibel:
Welcome Jack to our course
Welcome Ali to our course
Welcome Abbas to our course
Welcome Pamela to our course
Tanpa membuat function berbeda untuk setiap nama.
Solusinya adalah parameter.
1. Masalah yang Ingin Diselesaikan
Misalkan kita punya:
fun printWelcome() {
println("Welcome to our course")
}
Kemudian kita ingin:
Welcome Jack to our course
Welcome Ali to our course
Welcome Abbas to our course
Cara buruknya adalah membuat banyak if:
if (name == "Jack") {
println("Welcome Jack")
}
if (name == "Ali") {
println("Welcome Ali")
}
if (name == "Abbas") {
println("Welcome Abbas")
}
Bayangkan ada 1 juta nama.
Kita tidak mungkin membuat:
if Jack
if Ali
if Abbas
if Pamela
if John
if Sarah
...
Di sinilah function dengan parameter menjadi berguna.
2. Apa Itu Parameter?
Perhatikan:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser to our course")
}
Bagian:
nameUser: String
disebut parameter.
Parameter adalah:
data yang disediakan oleh caller kepada function agar function bisa bekerja menggunakan data tersebut.
Sederhananya, parameter adalah seperti input function.
Bayangkan function seperti mesin:
FUNCTION
│
┌─────────┴─────────┐
│ │
INPUT OUTPUT
nameUser ?
Kita masukkan nama:
Jack
kemudian function menggunakannya untuk menghasilkan:
Welcome Jack to our course
3. Bentuk Function dengan Parameter
Sintaks dasarnya:
fun namaFunction(parameter: Type) {
// kode
}
Contoh:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser to our course")
}
Mari kita pecah.
| Bagian | Arti |
|---|---|
fun | keyword untuk membuat function |
printWelcome | nama function |
nameUser | nama parameter |
: | pemisah nama dan tipe |
String | tipe data parameter |
{ } | body function |
Jadi:
nameUser: String
berarti:
function ini mempunyai sebuah parameter bernama
nameUseryang harus bertipeString.
4. Parameter Itu Seperti Variabel di Dalam Function
Ini konsep yang sangat penting.
Ketika kita menulis:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser")
}
nameUser bisa digunakan di dalam function seperti sebuah variabel.
Contohnya:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser")
println("Have a nice day, $nameUser")
}
Ketika function dipanggil dengan:
printWelcome("Jack")
maka secara konsep:
nameUser = "Jack"
Sehingga function menjadi seperti:
println("Welcome Jack")
println("Have a nice day, Jack")
5. Parameter vs Argument
Ini bagian yang sangat sering membingungkan pemula.
Perhatikan:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser")
}
nameUser adalah parameter.
Sedangkan ketika kita menulis:
printWelcome("Jack")
"Jack" adalah argument.
Jadi:
DECLARATION
fun printWelcome(nameUser: String)
↑
parameter
CALL
printWelcome("Jack")
↑
argument
Definisi sederhananya:
Parameter = nama/tempat untuk menerima data di dalam function declaration.
Argument = nilai nyata yang dikirim ketika function dipanggil.
6. Analogi Sederhana
Bayangkan function seperti formulir.
Function:
fun greet(name: String) {
println("Hello $name")
}
adalah formulir dengan satu kolom:
Name: __________
name = kolom yang harus diisi.
Ketika kita memanggil:
greet("Andi")
kita mengisi:
Name: Andi
Kalau:
greet("Budi")
berarti:
Name: Budi
Function yang sama bisa menghasilkan hasil yang berbeda.
7. Contoh Lengkap
fun printWelcome(nameUser: String) {
println("Welcome $nameUser to our course")
}
fun main() {
printWelcome("Jack")
printWelcome("Ali")
printWelcome("Abbas")
printWelcome("Pamela")
}
Output:
Welcome Jack to our course
Welcome Ali to our course
Welcome Abbas to our course
Welcome Pamela to our course
Perhatikan:
Kita cuma membuat satu function:
fun printWelcome(nameUser: String)
tetapi bisa digunakan untuk banyak nama.
8. Kenapa Function Sekarang Lebih Powerful?
Sebelumnya:
fun printWelcome() {
println("Welcome to our course")
}
Inputnya tidak ada.
Jadi:
function
↓
selalu melakukan hal yang sama
Sekarang:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser to our course")
}
Function punya input.
Jack
↓
function
↓
Welcome Jack
Ali
↓
function
↓
Welcome Ali
Abbas
↓
function
↓
Welcome Abbas
Jadi function sekarang bisa berperilaku berbeda tergantung data yang diberikan.
9. Type Parameter Harus Sesuai
Dalam video ada bagian yang sangat penting.
Kita mendefinisikan:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser")
}
Artinya nameUser harus berupa String.
Jadi ini valid:
printWelcome("Jack")
printWelcome("Ali")
printWelcome("Pamela")
Tetapi:
printWelcome(10)
akan error.
Kenapa?
Karena:
parameter membutuhkan String
argument yang diberikan = Int
Tidak cocok.
Secara konsep:
nameUser: String
↑
harus String
10. Parameter Itu Memiliki Type
Ini sama seperti variable yang sebelumnya kamu pelajari.
Kamu sudah belajar:
val age: Int = 20
Artinya:
age → Int
Sekarang:
fun greet(name: String) {
}
Artinya:
name → String
Jadi konsep type system Kotlin tetap berlaku.
Contoh:
fun showAge(age: Int) {
println(age)
}
Pemanggilan:
showAge(20)
valid.
Sedangkan:
showAge("20")
error karena "20" adalah String, bukan Int.
Ingat:
20 → Int
"20" → String
'2' → Char
11. Tidak Memberikan Argument Akan Error
Misalnya:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser")
}
Kemudian:
fun main() {
printWelcome()
}
Ini error.
Kenapa?
Karena function meminta:
1 parameter
tetapi kita memberikan:
0 argument
Compiler akan mengeluh bahwa tidak ada nilai yang diberikan untuk parameter tersebut.
Jadi:
fun printWelcome(nameUser: String)
membutuhkan:
printWelcome("sesuatu")
12. Sekarang Kita Tambahkan Parameter Kedua
Ini bagian kedua dari video.
Awalnya:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser to our course")
}
Kemudian kita ingin mengetahui rating user.
Misalnya:
Welcome Ali to our course.
Your rating is 5 stars.
Kita bisa menambahkan parameter:
fun printWelcome(nameUser: String, rating: Int) {
println("Welcome $nameUser to our course")
println("Your rating is $rating stars")
}
Sekarang function memiliki dua parameter.
nameUser: String
rating: Int
13. Function dengan Multiple Parameters
Sintaksnya:
fun namaFunction(
parameter1: Type,
parameter2: Type
) {
...
}
Contoh:
fun printWelcome(nameUser: String, rating: Int) {
println("Welcome $nameUser to our course")
println("Your rating is $rating stars")
}
Kita bisa memanggil:
printWelcome("Ali", 5)
Output:
Welcome Ali to our course
Your rating is 5 stars
14. Bagaimana Argument Dipasangkan ke Parameter?
Ini sangat penting.
Function:
fun printWelcome(nameUser: String, rating: Int)
Urutan parameternya:
1. nameUser
2. rating
Ketika dipanggil:
printWelcome("Ali", 5)
maka Kotlin memasangkannya berdasarkan posisi:
"Ali" → nameUser
5 → rating
Secara visual:
printWelcome("Ali", 5)
│ │
↓ ↓
nameUser rating
Jadi argument pertama masuk ke parameter pertama.
Argument kedua masuk ke parameter kedua.
15. Kenapa Type Masing-Masing Penting?
Misalnya:
fun printWelcome(nameUser: String, rating: Int) {
}
Kemudian:
printWelcome("Ali", 5)
benar.
Karena:
"Ali" → String ✅
5 → Int ✅
Tetapi:
printWelcome(5, "Ali")
salah.
Karena:
5 → String ❌
"Ali" → Int ❌
Jadi urutan parameter penting ketika memakai positional arguments.
16. Parameter Bisa Berbeda Type
Tidak harus semuanya String.
Contoh:
fun showUser(name: String, age: Int, isActive: Boolean) {
println("Name: $name")
println("Age: $age")
println("Active: $isActive")
}
Pemanggilan:
showUser("Andi", 20, true)
Maka:
name = "Andi"
age = 20
isActive = true
Ini menggabungkan materi sebelumnya:
String
Int
Boolean
ke dalam parameter function.
17. Named Arguments
Nah, di video instruktur juga memperkenalkan sesuatu yang lebih menarik.
Misalnya:
fun printWelcome(nameUser: String, rating: Int) {
println("Welcome $nameUser")
println("Your rating is $rating")
}
Kita bisa memanggil:
printWelcome(
nameUser = "Ali",
rating = 5
)
Ini disebut named arguments.
Kita secara eksplisit menyebut nama parameter.
18. Kenapa Named Arguments Berguna?
Bandingkan:
printWelcome("Ali", 5)
dengan:
printWelcome(
nameUser = "Ali",
rating = 5
)
Yang kedua lebih jelas.
Dari:
"Ali", 5
kita harus melihat declaration function untuk mengetahui:
Ali itu apa?
5 itu apa?
Sedangkan:
nameUser = "Ali"
rating = 5
langsung jelas.
19. Named Arguments Seperti Label
Bayangkan kamu punya:
createUser("Andi", 20, true)
Sekilas kita harus mengingat:
Andi → name
20 → age
true → active
Dengan named arguments:
createUser(
name = "Andi",
age = 20,
active = true
)
sekarang seperti ada label:
name → Andi
age → 20
active → true
Ini membuat kode lebih mudah dibaca.
20. Positional vs Named Arguments
Ada dua pendekatan.
Positional
printWelcome("Ali", 5)
Kotlin melihat posisi:
argument 1 → parameter 1
argument 2 → parameter 2
Named
printWelcome(
nameUser = "Ali",
rating = 5
)
Kita menyebut langsung parameter mana yang menerima nilai.
21. Named Arguments Tidak Hanya untuk IDE
Video mengatakan IntelliJ membantu memberikan nama parameter seperti:
nameUser = "Ali"
rating = 5
Yang perlu diluruskan:
named arguments adalah fitur bahasa Kotlin, bukan sekadar fitur IntelliJ.
IDE memang dapat membantu menunjukkan nama parameter sehingga lebih mudah dibaca atau ditulis.
Jadi:
nameUser = "Ali"
adalah sintaks Kotlin.
Bukan fitur khusus IntelliJ.
22. Satu Function Bisa Digunakan dengan Banyak Data
Contoh:
fun printWelcome(nameUser: String, rating: Int) {
println("Welcome $nameUser to our course")
println("Your rating is $rating stars")
}
Kita bisa:
printWelcome("Ali", 5)
printWelcome("Jack", 4)
printWelcome("Pamela", 10)
Hasilnya masing-masing berbeda.
Welcome Ali to our course
Your rating is 5 stars
Welcome Jack to our course
Your rating is 4 stars
Welcome Pamela to our course
Your rating is 10 stars
Function-nya hanya satu.
Datanya berbeda.
23. Function Sekarang Bisa Kita Anggap Sebagai Mesin
Sebelumnya:
function
↓
melakukan pekerjaan tetap
Sekarang:
INPUT
↓
┌─────────────────┐
│ FUNCTION │
│ │
│ proses data │
└─────────────────┘
↓
OUTPUT
Contoh:
"Ali", 5
↓
printWelcome()
↓
"Welcome Ali..."
"Your rating is 5..."
Ini adalah salah satu konsep dasar pemrograman yang sangat fundamental.
24. Hubungannya dengan Materi String Template
Sebelumnya kamu sudah belajar:
println("Hello $name")
Sekarang parameter bisa langsung dimasukkan ke String Template:
fun greet(name: String) {
println("Hello $name")
}
Kalau:
greet("Andi")
maka:
name = "Andi"
dan:
"Hello $name"
menjadi:
Hello Andi
Jadi lesson ini sebenarnya menggabungkan dua konsep yang sudah kamu pelajari:
parameter
+
string template
25. Hubungan dengan Variable
Kamu sebelumnya belajar:
val name = "Andi"
Sekarang kita bisa memasukkan variable ke function:
val name = "Andi"
printWelcome(name)
Karena name bertipe String, dia cocok dengan parameter:
nameUser: String
Contoh:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser")
}
fun main() {
val name = "Andi"
printWelcome(name)
}
Output:
Welcome Andi
26. Argument Tidak Harus Literal
Argument bukan harus selalu:
printWelcome("Andi")
Kita juga bisa menggunakan variable:
val username = "Andi"
printWelcome(username)
Atau expression:
val age = 20
showAge(age + 1)
Selama hasilnya memiliki tipe yang cocok dengan parameter.
Misalnya:
fun showAge(age: Int) {
println(age)
}
showAge(20 + 1)
Ini valid.
Argument-nya menghasilkan:
21
yang bertipe Int.
27. Contoh yang Menggabungkan Banyak Materi
Sekarang kita buat program kecil:
fun printWelcome(name: String, age: Int) {
println("Welcome $name")
println("You are $age years old")
}
fun main() {
val name = "Andi"
val age = 20
printWelcome(name, age)
}
Alurnya:
name = "Andi"
age = 20
↓
printWelcome(name, age)
↓
name parameter = "Andi"
age parameter = 20
↓
println(...)
Output:
Welcome Andi
You are 20 years old
28. Parameter Bukan Nilai Tetap
Perhatikan:
fun printWelcome(name: String) {
println("Welcome $name")
}
name tidak berisi "Andi" dari awal.
Function tersebut hanya mengatakan:
“Nanti saya akan menerima suatu String.”
Nilainya baru diketahui ketika function dipanggil.
printWelcome("Andi")
maka:
name = "Andi"
Kemudian:
printWelcome("Budi")
maka:
name = "Budi"
Jadi parameter adalah tempat menerima data, bukan data spesifik yang sudah ditentukan sejak function dibuat.
29. Analogi Pesanan di Restoran
Bayangkan function:
fun makeOrder(food: String, quantity: Int)
Ini seperti formulir restoran:
Makanan: ______
Jumlah : ______
Kemudian customer mengisi:
makeOrder("Pizza", 2)
Maka:
food = "Pizza"
quantity = 2
Customer lain:
makeOrder("Burger", 3)
Maka:
food = "Burger"
quantity = 3
Function tetap satu.
Inputnya yang berbeda.
30. Yang Perlu Kamu Bedakan
Ini tiga istilah yang sangat penting:
| Istilah | Contoh | Arti |
|---|---|---|
| Function | printWelcome | pekerjaan yang bisa dipanggil |
| Parameter | nameUser: String | input yang didefinisikan function |
| Argument | "Ali" | nilai yang dikirim saat function dipanggil |
Contoh:
fun printWelcome(nameUser: String) {
println("Welcome $nameUser")
}
printWelcome("Ali")
Di sini:
nameUser: String → parameter
"Ali" → argument
31. Kesalahan yang Sering Terjadi
Salah tipe
fun showAge(age: Int) {
}
showAge("20")
Salah karena "20" adalah String.
Gunakan:
showAge(20)
Kurang argument
fun showUser(name: String, age: Int) {
}
showUser("Andi")
Salah karena function membutuhkan dua argument.
Harus:
showUser("Andi", 20)
Terbalik urutan
fun showUser(name: String, age: Int) {
}
showUser(20, "Andi")
Salah karena posisi pertama membutuhkan String.
32. Gambaran Perkembangan Function
Kamu sekarang sudah naik satu level.
Level 1 — Function tanpa parameter
fun printWelcome() {
println("Welcome")
}
Level 2 — Function dengan satu parameter
fun printWelcome(name: String) {
println("Welcome $name")
}
Level 3 — Function dengan beberapa parameter
fun printWelcome(name: String, rating: Int) {
println("Welcome $name")
println("Rating: $rating")
}
Level 4 — Memanggil dengan named arguments
printWelcome(
name = "Ali",
rating = 5
)
Nanti kamu akan lanjut ke konsep yang lebih penting lagi:
parameter
↓
return value
↓
function menghasilkan data
Misalnya:
fun add(a: Int, b: Int): Int {
return a + b
}
Tetapi untuk sekarang belum perlu masuk terlalu jauh ke return.
33. Yang Perlu Diluruskan dari Subtitle
Ada beberapa istilah di subtitle yang kurang tepat.
“variable function”
Lebih tepat:
parameterized function atau function with parameters.
Contoh:
fun printWelcome(nameUser: String)
nameUser adalah parameter.
“parameter is void and empty”
Maksudnya kemungkinan:
sebelumnya function tidak memiliki parameter.
Contohnya:
fun printWelcome()
Bukan berarti parameter tersebut bernilai void.
Parameter vs argument
Instruktur terkadang menggunakan kedua istilah tersebut secara bergantian.
Secara teknis:
fun greet(name: String)
name = parameter.
greet("Ali")
"Ali" = argument.
Keduanya berhubungan erat, tetapi istilahnya berbeda.
Named argument dari IDE
Named argument:
nameUser = "Ali"
merupakan fitur Kotlin, bukan sekadar fitur IntelliJ.
IDE hanya membantu kita melihat dan menggunakan nama parameter tersebut.
34. Mental Model Terpenting untuk Lesson Ini
Bayangkan:
FUNCTION = MESIN
PARAMETER = SLOT INPUT
ARGUMENT = DATA YANG DIMASUKKAN KE SLOT
Misalnya:
fun printWelcome(name: String, rating: Int) {
println("Welcome $name")
println("Rating: $rating")
}
Artinya:
printWelcome()
/ \
/ \
name:String rating:Int
↑ ↑
"Ali" 5
Kemudian function menjalankan:
Welcome Ali
Rating: 5
35. Ringkasan Lesson
Yang perlu benar-benar kamu kuasai dari lesson ini adalah:
fun printWelcome(name: String) {
println("Welcome $name")
}
name adalah parameter.
Kemudian:
printWelcome("Andi")
"Andi" adalah argument.
Untuk beberapa parameter:
fun printWelcome(name: String, rating: Int) {
println("Welcome $name")
println("Rating: $rating")
}
Pemanggilan positional:
printWelcome("Andi", 5)
Pemanggilan named:
printWelcome(
name = "Andi",
rating = 5
)
Dan alur besarnya:
Function
↓
punya parameter
↓
caller memberikan argument
↓
argument masuk ke parameter
↓
function menggunakan data tersebut
↓
function dapat berperilaku berbeda
Jadi, perbedaan terbesar dari lesson sebelumnya adalah:
SEBELUMNYA
fun printWelcome() {
println("Welcome")
}
→ function selalu bekerja dengan data yang sama
SEKARANG
fun printWelcome(name: String) {
println("Welcome $name")
}
→ function dapat menerima data
→ function menjadi lebih fleksibel
→ satu function bisa digunakan untuk banyak situasi
Ini adalah fondasi penting sebelum kamu belajar return value, default parameter, nullable parameter, dan function yang lebih kompleks.