Fungsi adalah blok kode yang dapat digunakan kembali dan dirancang untuk melakukan tugas tertentu. Fungsi membantu mengorganisir kode menjadi bagian-bagian yang lebih kecil dan dapat dikelola.
Arrow function (=>) adalah cara singkat untuk menulis fungsi yang hanya memiliki satu ekspresi.
// Fungsi biasa
int tambah(int a, int b) {
return a + b;
}
// Arrow function
int tambahArrow(int a, int b) => a + b;
// Arrow function dengan String
String getName() => 'Budi';
// Arrow function dengan conditional
bool isAdult(int age) => age >= 18;
void main() {
print(tambahArrow(5, 3)); // Output: 8
print(getName()); // Output: Budi
print(isAdult(20)); // Output: true
}
4.4 Anonymous Function
Anonymous function adalah fungsi yang tidak memiliki nama dan bisa disimpan dalam variabel.
void main() {
// Anonymous function disimpan dalam variabel
var sayHello = () {
print('Hello!');
};
// Anonymous function dengan parameter
var tambah = (int a, int b) {
return a + b;
};
// Anonymous function sebagai arrow function
var kali = (int a, int b) => a * b;
// Menggunakan anonymous function
sayHello(); // Output: Hello!
print(tambah(5, 3)); // Output: 8
print(kali(4, 2)); // Output: 8
// Anonymous function sebagai parameter
var numbers = [1, 2, 3, 4, 5];
numbers.forEach((number) {
print(number * 2);
});
// Atau dengan arrow function
numbers.forEach((number) => print(number * 3));
}
4.5 Praktek: Program Management Kontak
import 'dart:io';
// Mendefinisikan tipe data untuk kontak
typedef Contact = ({
String nama,
String nomor,
String? email
});
// List untuk menyimpan kontak
List<Contact> contacts = [];
// Fungsi untuk menambah kontak
void addContact() {
stdout.write('Masukkan nama: ');
String nama = stdin.readLineSync() ?? '';
stdout.write('Masukkan nomor: ');
String nomor = stdin.readLineSync() ?? '';
stdout.write('Masukkan email (opsional): ');
String? email = stdin.readLineSync();
contacts.add((
nama: nama,
nomor: nomor,
email: email
));
print('\nKontak berhasil ditambahkan!');
}
// Fungsi untuk menampilkan semua kontak
void showContacts() {
if (contacts.isEmpty) {
print('Daftar kontak kosong');
return;
}
print('\n=== Daftar Kontak ===');
for (var i = 0; i < contacts.length; i++) {
var contact = contacts[i];
print('\nKontak ke-${i + 1}:');
print('Nama: ${contact.nama}');
print('Nomor: ${contact.nomor}');
if (contact.email != null) {
print('Email: ${contact.email}');
}
}
}
// Fungsi untuk mencari kontak
void searchContact(String keyword) {
var results = contacts.where(
(contact) => contact.nama.toLowerCase().contains(keyword.toLowerCase())
).toList();
if (results.isEmpty) {
print('Kontak tidak ditemukan');
return;
}
print('\n=== Hasil Pencarian ===');
for (var contact in results) {
print('\nNama: ${contact.nama}');
print('Nomor: ${contact.nomor}');
if (contact.email != null) {
print('Email: ${contact.email}');
}
}
}
// Fungsi untuk menghapus kontak
bool deleteContact(int index) {
if (index >= 0 && index < contacts.length) {
contacts.removeAt(index);
return true;
}
return false;
}
// Fungsi utama
void main() {
while (true) {
print('\n=== Menu Manajemen Kontak ===');
print('1. Tambah Kontak');
print('2. Lihat Semua Kontak');
print('3. Cari Kontak');
print('4. Hapus Kontak');
print('5. Keluar');
stdout.write('\nPilih menu (1-5): ');
String? input = stdin.readLineSync();
switch(input) {
case '1':
addContact();
case '2':
showContacts();
case '3':
stdout.write('Masukkan nama yang dicari: ');
String keyword = stdin.readLineSync() ?? '';
searchContact(keyword);
case '4':
stdout.write('Masukkan nomor urut kontak yang akan dihapus: ');
int index = int.tryParse(stdin.readLineSync() ?? '') ?? -1;
if (deleteContact(index - 1)) {
print('Kontak berhasil dihapus!');
} else {
print('Nomor urut tidak valid!');
}
case '5':
print('Terima kasih telah menggunakan program ini!');
return;
default:
print('Menu tidak valid!');
}
}
}
Latihan Mandiri
Tambahkan fitur edit kontak pada program management kontak
Buat program kalkulator dengan fungsi-fungsi terpisah untuk setiap operasi
Buat program konversi mata uang dengan fungsi arrow
Implementasikan sistem login sederhana menggunakan anonymous function untuk validasi
Tips dan Best Practices
Berikan nama fungsi yang deskriptif dan menggunakan camelCase
Usahakan satu fungsi hanya melakukan satu tugas spesifik
Gunakan parameter dengan nama untuk fungsi dengan banyak parameter
Manfaatkan arrow function untuk fungsi sederhana
Dokumentasikan fungsi yang kompleks
Validasi input parameter jika diperlukan
Gunakan return type yang eksplisit untuk kejelasan kode