Masukkan Password
26 Functions in Dart | Dart Tutorial #25
Video ini membahas function (fungsi) di Dart. Ini adalah salah satu konsep paling penting sebelum masuk lebih jauh ke Flutter, karena hampir semua program Flutter akan banyak menggunakan function.
Transcript-nya juga memiliki beberapa hasil speech-to-text yang kurang tepat, misalnya "dark" sebenarnya Dart, "written" maksudnya return, dan "factorial" kadang terdengar seperti "factual" atau "factor of".
Saya akan jelaskan dari konsep paling dasar sampai bagaimana proses pemanggilan function terjadi di belakang layar.
1. Apa itu function?
Secara sederhana:
Function adalah sekumpulan kode yang dibuat untuk melakukan satu tugas tertentu.
Misalnya kita mempunyai tugas:
- menghitung luas lingkaran
- menghitung faktorial
- mengecek apakah user sudah login
- mengambil data dari database
- menghitung total harga
- mengubah data
- memvalidasi email
- dan sebagainya
Daripada menulis kode yang sama berulang-ulang, kita bisa memasukkannya ke dalam sebuah function.
Contoh paling sederhana:
void sayHello() {
print("Hello!");
}
Function di atas bernama:
sayHello
Ketika kita ingin menjalankannya:
sayHello();
Output:
Hello!
Jadi konsep dasarnya:
BUAT FUNCTION
↓
Simpan sekumpulan instruksi
↓
Panggil ketika dibutuhkan
↓
Function menjalankan tugasnya
2. Kenapa kita menggunakan function?
Ada beberapa alasan penting.
A. Membagi program besar menjadi bagian kecil
Bayangkan kamu membuat aplikasi Flutter yang besar.
Misalnya aplikasi memiliki fitur:
Aplikasi
│
├── Login
├── Register
├── Profile
├── Product
├── Cart
├── Checkout
└── Payment
Kalau semua kode ditulis dalam satu tempat, kode akan sangat panjang dan sulit dipahami.
Dengan function, kita bisa memecahnya:
void login() {
// logic login
}
void register() {
// logic register
}
void checkout() {
// logic checkout
}
void payment() {
// logic payment
}
Jadi program menjadi lebih terorganisir.
3. Function membuat kode bisa digunakan kembali
Ini salah satu manfaat terbesar function.
Misalnya kita membuat:
void sayHello() {
print("Hello!");
}
Kita bisa memanggilnya berkali-kali:
sayHello();
sayHello();
sayHello();
Output:
Hello!
Hello!
Hello!
Kita tidak perlu menulis ulang:
print("Hello!");
berulang-ulang.
Cukup buat function sekali, kemudian panggil berkali-kali.
4. Function membuat kode lebih mudah dibaca
Misalnya kamu melihat kode:
calculateTotal();
Kita langsung bisa menduga:
“Oh, ini mungkin menghitung total.”
Bandingkan kalau semua logic ditulis langsung:
double total = 0;
for (final item in items) {
total += item.price * item.quantity;
}
if (discount != null) {
total -= discount;
}
if (total < 0) {
total = 0;
}
Kode tersebut mungkin benar, tetapi kalau logic-nya digunakan berkali-kali, function akan membuatnya lebih rapi:
double calculateTotal() {
// logic menghitung total
}
Lalu cukup:
final total = calculateTotal();
5. Function bisa menerima input dan menghasilkan output
Ini bagian yang sangat penting.
Function dapat kita bayangkan seperti sebuah mesin.
Input
↓
┌──────────────┐
│ FUNCTION │
│ │
│ diproses │
└──────────────┘
↓
Output
Contoh mesin penjumlahan:
Input: 5 dan 3
↓
function
↓
Output: 8
Dalam Dart:
int add(int a, int b) {
return a + b;
}
Kemudian:
final result = add(5, 3);
Hasil:
8
Di sini:
5 → a
3 → b
kemudian function menghitung:
a + b
dan menghasilkan:
8
6. Struktur dasar sebuah function
Perhatikan function berikut:
int add(int a, int b) {
return a + b;
}
Function ini terdiri dari beberapa bagian.
int add (int a, int b) {
│ │ │ │
│ │ │ └── Function body
│ │ └── Parameter
│ └── Function name
└── Return type
Mari kita bahas satu per satu.
7. Return type
Bagian:
int
adalah return type.
Artinya:
Function ini akan mengembalikan nilai bertipe
int.
Contoh:
int add(int a, int b) {
return a + b;
}
Karena:
a + b
menghasilkan int, maka return type-nya:
int
Contoh return type lainnya
double
double calculateAverage() {
return 85.5;
}
Artinya function mengembalikan double.
String
String getName() {
return "Budi";
}
Artinya function mengembalikan String.
bool
bool isAdult(int age) {
return age >= 18;
}
Artinya function mengembalikan bool.
8. void
Bagaimana kalau function tidak mengembalikan nilai?
Gunakan:
void
Contoh:
void sayHello() {
print("Hello!");
}
Function tersebut melakukan sesuatu, yaitu:
print("Hello!");
tetapi tidak mengembalikan nilai kepada pemanggil.
Jadi:
int → mengembalikan integer
double → mengembalikan double
String → mengembalikan String
bool → mengembalikan boolean
void → tidak mengembalikan nilai
9. Function name
Misalnya:
int add(int a, int b) {
return a + b;
}
Bagian:
add
adalah nama function.
Function name harus mengikuti aturan identifier Dart.
Contoh nama yang baik:
calculateTotal()
getUser()
login()
validateEmail()
calculateArea()
Biasanya gunakan gaya lowerCamelCase:
calculateTotal
bukan:
calculate_total
untuk gaya penamaan Dart yang umum.
10. Parameter
Sekarang bagian:
(int a, int b)
Ini adalah parameter list.
Parameter adalah data yang diterima oleh function dari pemanggil.
Contoh:
int add(int a, int b) {
return a + b;
}
Function membutuhkan dua input:
a → int
b → int
Ketika dipanggil:
add(5, 3);
maka:
a = 5
b = 3
11. Parameter vs argument
Ini sering membingungkan pemula.
Perhatikan:
int add(int a, int b) {
return a + b;
}
a dan b disebut parameter.
Sedangkan ketika kita memanggil:
add(5, 3);
angka 5 dan 3 disebut argument.
Sederhananya:
Saat membuat function:
int add(int a, int b)
↑ ↑
parameter
Saat memanggil:
add(5, 3)
↑ ↑
argument
Jadi:
Parameter = variabel yang disiapkan function untuk menerima data.
Argument = nilai yang kita kirim ketika memanggil function.
12. Function body
Perhatikan:
int add(int a, int b) {
return a + b;
}
Bagian:
{
return a + b;
}
disebut function body.
Di sinilah instruksi atau logic function ditulis.
Misalnya:
int multiply(int a, int b) {
int result = a * b;
return result;
}
Function body-nya adalah:
{
int result = a * b;
return result;
}
13. Function header
Secara konsep, function dapat dibagi menjadi:
Function definition
│
├── Function header
│
└── Function body
Misalnya:
int add(int a, int b) {
return a + b;
}
Header:
int add(int a, int b)
Body:
{
return a + b;
}
Jadi:
Function header + Function body
↓
Function definition
14. return
Sekarang kita masuk ke bagian penting lainnya.
Contoh:
int add(int a, int b) {
return a + b;
}
Baris:
return a + b;
adalah return statement.
Artinya:
Ambil hasil
a + b, kemudian kembalikan hasil tersebut kepada pihak yang memanggil function.
Misalnya:
final result = add(5, 3);
Function menghitung:
5 + 3
↓
8
Kemudian:
return 8;
Nilai 8 dikembalikan.
Akhirnya:
result = 8
15. Contoh sederhana function dengan return
int square(int number) {
return number * number;
}
Kita panggil:
final result = square(5);
Alurnya:
square(5)
↓
number = 5
↓
5 × 5
↓
25
↓
return 25
↓
result = 25
Jadi:
print(result);
menghasilkan:
25
16. Function tidak harus punya parameter
Contoh:
void sayHello() {
print("Hello");
}
Tidak ada parameter.
Panggil:
sayHello();
17. Function bisa punya satu parameter
void greet(String name) {
print("Hello $name");
}
Panggil:
greet("Budi");
Output:
Hello Budi
18. Function bisa punya banyak parameter
int add(int a, int b, int c) {
return a + b + c;
}
Panggil:
final result = add(10, 20, 30);
Hasil:
60
19. Function bisa mengembalikan String
String getGreeting(String name) {
return "Hello $name";
}
Kemudian:
final message = getGreeting("Andi");
print(message);
Output:
Hello Andi
20. Function bisa mengembalikan bool
Contoh:
bool isEven(int number) {
return number % 2 == 0;
}
Kemudian:
print(isEven(4));
print(isEven(5));
Output:
true
false
21. Contoh factorial dari video
Sekarang kita masuk ke contoh yang digunakan video.
Factorial dari suatu angka adalah perkalian angka tersebut dengan semua bilangan positif di bawahnya.
Contoh:
5! = 5 × 4 × 3 × 2 × 1
= 120
Jadi:
4! = 24
3! = 6
2! = 2
1! = 1
Function-nya bisa dibuat:
int factorial(int n) {
int fact = 1;
for (int i = 1; i <= n; i++) {
fact = fact * i;
}
return fact;
}
22. Memahami function factorial
Perhatikan:
int factorial(int n)
Artinya:
int
↓
function menghasilkan integer
factorial
↓
nama function
int n
↓
parameter berupa integer
Kemudian:
int fact = 1;
Kita membuat variabel untuk menyimpan hasil perkalian.
Lalu:
for (int i = 1; i <= n; i++) {
melakukan perulangan.
Jika:
n = 5
maka:
i = 1
i = 2
i = 3
i = 4
i = 5
Kemudian:
fact = fact * i;
menghasilkan:
awal:
fact = 1
i = 1:
fact = 1 × 1 = 1
i = 2:
fact = 1 × 2 = 2
i = 3:
fact = 2 × 3 = 6
i = 4:
fact = 6 × 4 = 24
i = 5:
fact = 24 × 5 = 120
Terakhir:
return fact;
mengembalikan:
120
23. Bagaimana cara memanggil function?
Misalnya kita sudah punya:
int factorial(int n) {
int fact = 1;
for (int i = 1; i <= n; i++) {
fact *= i;
}
return fact;
}
Sekarang kita panggil:
final result = factorial(5);
Ini disebut function call.
Artinya:
“Jalankan function
factorialdengan input5.”
24. Program lengkap
Contohnya:
int factorial(int n) {
int fact = 1;
for (int i = 1; i <= n; i++) {
fact *= i;
}
return fact;
}
void main() {
final f = factorial(5);
print("Factorial dari 5 = $f");
}
Output:
Factorial dari 5 = 120
25. Apa yang sebenarnya terjadi ketika function dipanggil?
Ini bagian terpenting dari video.
Program Dart dimulai dari:
void main() {
main() adalah entry point aplikasi Dart.
Secara sederhana:
Ketika program Dart dijalankan, eksekusi dimulai dari
main().
Kemudian kita punya:
final f = factorial(5);
Ini adalah function call.
26. Alur function call
Bayangkan program seperti ini:
void main() {
final f = factorial(5);
print("Factorial dari 5 = $f");
}
Awalnya:
main()
↓
final f = factorial(5);
Program bertemu:
factorial(5)
Kemudian eksekusi sementara berpindah ke function:
factorial
27. Nilai 5 masuk ke parameter n
Function:
int factorial(int n)
dipanggil:
factorial(5)
Maka:
n = 5
Bisa dibayangkan:
factorial(5)
↓
n = 5
Kemudian function mulai bekerja.
28. Function melakukan proses
Di dalam:
int factorial(int n) {
int fact = 1;
for (int i = 1; i <= n; i++) {
fact *= i;
}
return fact;
}
karena:
n = 5
maka hasil akhirnya:
fact = 120
Kemudian:
return fact;
berarti:
return 120
29. Nilai kembali ke main()
Kita sebelumnya memiliki:
final f = factorial(5);
Setelah function selesai:
factorial(5)
↓
120
↓
f = 120
Jadi sekarang:
f
berisi:
120
Kemudian baris berikutnya dijalankan:
print("Factorial dari 5 = $f");
Output:
Factorial dari 5 = 120
30. Visualisasi lengkap
Inilah alur yang perlu benar-benar kamu pahami:
Program mulai
↓
main()
↓
factorial(5)
↓
n = 5
↓
function menghitung
↓
1 × 2 × 3 × 4 × 5
↓
120
↓
return 120
↓
kembali ke main()
↓
f = 120
↓
print(...)
↓
Factorial dari 5 = 120
↓
program selesai
Ini sebenarnya inti dari video tersebut.
31. Calling function dan called function
Video menggunakan istilah:
Calling function
Function yang memanggil function lain.
Dalam contoh:
void main() {
final f = factorial(5);
}
main() adalah calling function.
Karena main() memanggil:
factorial(5)
Called function
Function yang dipanggil.
Dalam contoh:
factorial(5)
function factorial() adalah called function.
Jadi:
main()
│
│ memanggil
↓
factorial()
32. Apa yang terjadi dengan main() ketika factorial berjalan?
Saat program mencapai:
final f = factorial(5);
secara konsep, eksekusi main() menunggu hasil dari factorial(5).
Urutannya:
main()
│
├── panggil factorial(5)
│
│ factorial()
│ ↓
│ hitung
│ ↓
│ return 120
│
└── lanjutkan main()
↓
print(...)
Jadi print() tidak dijalankan sebelum factorial mengembalikan hasil.
33. Function bisa memanggil function lain
Ini konsep yang sangat penting dalam programming.
Misalnya:
int square(int number) {
return number * number;
}
int calculate(int number) {
return square(number) + 10;
}
Kemudian:
print(calculate(5));
Alurnya:
calculate(5)
↓
square(5)
↓
25
↓
25 + 10
↓
35
Output:
35
Jadi function tidak harus berdiri sendiri.
Function dapat memanggil function lainnya.
34. Function adalah object di Dart
Ini bagian transcript yang sangat penting.
Dart merupakan bahasa yang memperlakukan function sebagai first-class object/value.
Artinya function dapat:
- disimpan dalam variable
- dikirim sebagai argument
- dikembalikan dari function lain
Contoh sederhana:
int add(int a, int b) {
return a + b;
}
Function tersebut dapat disimpan dalam variable:
final operation = add;
Kemudian:
print(operation(5, 3));
Output:
8
Jadi:
add
↓
disimpan ke
↓
operation
35. Function bisa dikirim sebagai parameter
Contoh:
void execute(int Function(int, int) operation) {
print(operation(10, 5));
}
Kemudian:
int add(int a, int b) {
return a + b;
}
execute(add);
Output:
15
Di sini:
execute(add);
kita mengirim function add sebagai argument.
Ini sangat penting di Dart dan Flutter karena konsep seperti callback sangat sering digunakan.
36. Contoh callback sederhana
Misalnya:
void process(String name, void Function(String) callback) {
callback(name);
}
Kemudian:
process("Budi", (name) {
print("Hello $name");
});
Output:
Hello Budi
Function:
(name) {
print("Hello $name");
}
dikirim sebagai callback.
Di Flutter, pola seperti ini sangat sering kamu temui.
37. Function juga bisa dikembalikan
Misalnya:
Function createGreeting() {
return () {
print("Hello!");
};
}
Kemudian:
final greeting = createGreeting();
greeting();
Output:
Hello!
Artinya sebuah function dapat menghasilkan function lain.
Konsep ini nanti akan berkaitan dengan:
- anonymous function
- callback
- closure
- higher-order function
- functional programming
38. Bagian transcript tentang return type perlu diluruskan
Transcript mengatakan kira-kira:
Kalau return type tidak ditulis, function secara default mengembalikan
dynamic.
Secara teknis, jangan jadikan ini sebagai gaya coding yang direkomendasikan.
Dart memungkinkan function ditulis tanpa return type eksplisit dalam beberapa konteks, tetapi untuk kode yang jelas dan type-safe, sebaiknya gunakan return type yang sesuai.
Contoh yang baik:
int add(int a, int b) {
return a + b;
}
bukan sengaja menghilangkan tipe return hanya agar menjadi dynamic.
Untuk function yang memang tidak mengembalikan nilai:
void sayHello() {
print("Hello");
}
Gunakan void.
39. Function expression / anonymous function
Selain function bernama:
int add(int a, int b) {
return a + b;
}
Dart juga mendukung function tanpa nama:
final add = (int a, int b) {
return a + b;
};
Bahkan bisa dibuat lebih singkat dengan arrow syntax:
final add = (int a, int b) => a + b;
Kemudian:
print(add(5, 3));
Output:
8
Ini akan sering kamu temui dalam Flutter.
40. Arrow function
Kalau function hanya memiliki satu expression, kita bisa menggunakan =>.
Contoh:
int square(int number) => number * number;
Ini setara secara konsep dengan:
int square(int number) {
return number * number;
}
Jadi:
=> expression
secara sederhana berarti:
“Kembalikan hasil dari expression ini.”
41. Function vs method
Video juga membahas perbedaan function dan method.
Secara sederhana:
Function
Function yang tidak menjadi member dari class.
int add(int a, int b) {
return a + b;
}
Method
Function yang menjadi bagian dari sebuah class/object.
Contoh:
class Calculator {
int add(int a, int b) {
return a + b;
}
}
add() di sini disebut method karena berada di dalam class Calculator.
Kita dapat membayangkannya:
Function
│
└── berdiri sebagai fungsi tersendiri
Method
│
└── function yang menjadi bagian dari class/object
42. Contoh function dan method
Function:
int add(int a, int b) {
return a + b;
}
Dipanggil:
add(10, 20);
Method:
class Calculator {
int add(int a, int b) {
return a + b;
}
}
Kemudian:
final calculator = Calculator();
calculator.add(10, 20);
Perhatikan perbedaannya:
Function:
add(10, 20)
Method:
calculator.add(10, 20)
Karena method dimiliki oleh object calculator.
43. Hubungannya dengan Flutter
Ini sangat penting kalau tujuan akhirnya adalah Flutter.
Di Flutter kamu akan sering melihat kode seperti:
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
void sayHello() {
print("Hello");
}
@override
Widget build(BuildContext context) {
return Container();
}
}
build() adalah method karena berada di dalam class.
Begitu juga:
void sayHello()
adalah method dari MyHomePage.
Sedangkan kalau kamu menulis:
void calculateSomething() {
// ...
}
di luar class, itu adalah function top-level.
44. Satu konsep penting: function definition vs function call
Jangan sampai tertukar.
Function definition
Kita membuat function:
int add(int a, int b) {
return a + b;
}
Artinya:
“Saya membuat sebuah function bernama
add.”
Function call
Kita menjalankan function:
add(5, 3);
Artinya:
“Jalankan function
adddengan argument5dan3.”
Jadi:
Definisi:
int add(int a, int b) { ... }
Pemanggilan:
add(5, 3);
45. Ringkasan struktur function
Kalau kamu melihat:
int calculate(int a, int b) {
return a + b;
}
bacalah dari kiri ke kanan:
int
↓
return type
calculate
↓
nama function
(int a, int b)
↓
parameter
{
return a + b;
}
↓
function body
Kemudian:
return a + b;
berarti:
“Kembalikan hasil
a + bkepada pihak yang memanggil function.”
46. Cheat sheet function Dart
| Bagian | Contoh | Fungsi |
|---|---|---|
| Return type | int | Tipe nilai yang dikembalikan |
| Function name | add | Nama function |
| Parameter | int a | Data yang diterima |
| Function body | { ... } | Logic function |
return | return a + b | Mengembalikan hasil |
| Function call | add(5, 3) | Menjalankan function |
void | void sayHello() | Tidak mengembalikan nilai |
47. Pola dasar yang perlu kamu kuasai
Tanpa parameter, tanpa return
void sayHello() {
print("Hello");
}
Dengan parameter, tanpa return
void greet(String name) {
print("Hello $name");
}
Tanpa parameter, dengan return
int getNumber() {
return 10;
}
Dengan parameter dan return
int add(int a, int b) {
return a + b;
}
Pola terakhir adalah salah satu yang paling sering kamu gunakan.
48. Kesimpulan besar
Kalau kita sederhanakan seluruh video:
Function adalah blok kode yang diberi nama agar dapat melakukan tugas tertentu dan dapat digunakan kembali.
Function bisa:
menerima input
↓
parameter
↓
memproses data
↓
menghasilkan output
↓
return
Contohnya:
int add(int a, int b) {
return a + b;
}
Ketika:
final result = add(5, 3);
terjadi:
add(5, 3)
↓
a = 5
b = 3
↓
5 + 3
↓
8
↓
return 8
↓
result = 8
Dan yang paling penting untuk kamu ingat:
Function definition
↓
Membuat function
Function call
↓
Menjalankan function
Parameter
↓
Tempat menerima input
Argument
↓
Nilai yang dikirim saat pemanggilan
Return
↓
Mengembalikan hasil
void
↓
Tidak mengembalikan nilai
Method
↓
Function yang menjadi bagian dari class/object
Kalau konsep ini sudah kamu pahami, kamu sudah punya fondasi penting untuk masuk ke materi Dart berikutnya seperti optional/named parameters, default parameter, anonymous function, arrow function, callback, higher-order function, dan kemudian bagaimana semua konsep tersebut dipakai di Flutter.