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 biasainttambah(int a, int b) {return a + b;}// Arrow functioninttambahArrow(int a, int b) => a + b;// Arrow function dengan StringStringgetName() =>'Budi';// Arrow function dengan conditionalboolisAdult(int age) => age >=18;voidmain() {print(tambahArrow(5, 3)); // Output: 8print(getName()); // Output: Budiprint(isAdult(20)); // Output: true}
4.4 Anonymous Function
Anonymous function adalah fungsi yang tidak memiliki nama dan bisa disimpan dalam variabel.
voidmain() {// Anonymous function disimpan dalam variabelvar sayHello = () {print('Hello!'); };// Anonymous function dengan parametervar tambah = (int a, int b) {return a + b; };// Anonymous function sebagai arrow functionvar kali = (int a, int b) => a * b;// Menggunakan anonymous functionsayHello(); // Output: Hello!print(tambah(5, 3)); // Output: 8print(kali(4, 2)); // Output: 8// Anonymous function sebagai parametervar 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 kontaktypedefContact= ({String nama,String nomor,String? email});// List untuk menyimpan kontakList<Contact> contacts = [];// Fungsi untuk menambah kontakvoidaddContact() { 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 kontakvoidshowContacts() {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 kontakvoidsearchContact(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 kontakbooldeleteContact(int index) {if (index >=0&& index < contacts.length) { contacts.removeAt(index);returntrue; }returnfalse;}// Fungsi utamavoidmain() {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