Meneruskan Fungsi sebagai Argumen
Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 45 dari 65.
Dalam pemrograman, fungsi dapat melakukan lebih dari sekadar menerima nilai sederhana seperti angka atau string. Fungsi juga dapat menerima fungsi lain sebagai parameter. Konsep yang kuat ini disebut fungsi tingkat tinggi, dan membuka cara-cara baru untuk menulis kode yang fleksibel dan dapat digunakan kembali.
Saat kamu meneruskan fungsi sebagai argumen, pada dasarnya kamu memberi fungsi lain kemampuan untuk menentukan operasi yang akan dilakukan. Bayangkan kamu memberikan alat kepada seseorang dan membiarkannya memilih cara menggunakan alat itu pada berbagai bahan.
void processNumbers(List<int> numbers, Function operation) {
for (int number in numbers) {
operation(number);
}
}Dalam contoh ini, processNumbers menerima list dan fungsi sebagai parameter. Parameter fungsi operation bisa berupa fungsi apa pun yang menerima bilangan bulat. Artinya, kamu bisa memberikan fungsi yang mencetak bilangan, menggandakannya, atau melakukan operasi lain yang kamu perlukan.
Pendekatan ini membuat kodemu sangat fleksibel. Alih-alih menulis fungsi terpisah untuk setiap operasi yang mungkin, kamu menulis satu fungsi yang dapat bekerja dengan banyak operasi berbeda dengan menerimanya sebagai parameter.
Tantangan
MudahBuat program yang menunjukkan cara meneruskan fungsi sebagai argumen dengan membangun pemroses angka yang fleksibel. Programmu akan membuat berbagai fungsi pemrosesan dan meneruskannya ke fungsi pemroses utama yang menerapkan operasi pada list angka.
- Baca input string yang berisi angka-angka yang dipisahkan dengan koma (misalnya,
"1,2,3,4,5") - Baca input string yang menunjukkan tipe operasi (
"double","square", atau"increment") - Pisahkan input pertama menjadi list string dan ubah setiap string menjadi integer
- Buat tiga fungsi terpisah:
doubleNumbermenerima integer dan mengembalikannya setelah dikalikan dengan 2squareNumbermenerima integer dan mengembalikannya setelah dikalikan dengan dirinya sendiriincrementNumbermenerima integer dan mengembalikannya setelah ditambah 1- Buat fungsi utama bernama
processNumbersyang menerima list integer dan fungsi sebagai parameter - Fungsi
processNumbersharus menerapkan fungsi yang diberikan ke setiap angka di dalam list dan mengembalikan list baru yang berisi hasilnya - Berdasarkan input tipe operasi, teruskan fungsi yang sesuai ke
processNumbers - Tampilkan hasil dalam format persis seperti yang ditunjukkan di bawah
Misalnya, jika inputnya adalah "2,4,6,8" dan "double", programmu harus menghasilkan:
Number Processor
================
Original numbers: [2, 4, 6, 8]
Operation: double
Processing numbers...
Result: [4, 8, 12, 16]
Operation completed successfullyJika inputnya adalah "3,5,7" dan "square", programmu harus menghasilkan:
Number Processor
================
Original numbers: [3, 5, 7]
Operation: square
Processing numbers...
Result: [9, 25, 49]
Operation completed successfullyJika inputnya adalah "10,20,30" dan "increment", programmu harus menghasilkan:
Number Processor
================
Original numbers: [10, 20, 30]
Operation: increment
Processing numbers...
Result: [11, 21, 31]
Operation completed successfullyProgrammu harus menunjukkan konsep fungsi tingkat tinggi dengan meneruskan salah satu dari tiga fungsi operasi sebagai argumen ke fungsi processNumbers. Gunakan pernyataan percabangan untuk menentukan fungsi yang akan diteruskan berdasarkan input tipe operasi. Fungsi processNumbers harus melakukan iterasi melalui input list, menerapkan fungsi yang diberikan ke setiap elemen, dan mengumpulkan hasilnya dalam list baru.
Coba sendiri
import 'dart:io';
void main() {
// Baca input
String? numbersInput = stdin.readLineSync();
String? operation = stdin.readLineSync();
// Ubah input string menjadi list bilangan bulat
List<int> numbers = numbersInput!.split(',').map((e) => int.parse(e.trim())).toList();
// TODO: Buat tiga fungsi operasi (doubleNumber, squareNumber, incrementNumber)
// TODO: Buat fungsi processNumbers yang menerima list dan fungsi sebagai parameter
// TODO: Gunakan pernyataan percabangan untuk menentukan fungsi yang akan diteruskan berdasarkan jenis operasi
// TODO: Panggil processNumbers dengan fungsi yang sesuai dan simpan hasilnya
// Tampilkan hasil dalam format yang diminta
print('Number Processor');
print('================');
print('Original numbers: $numbers');
print('Operation: $operation');
print('Processing numbers...');
// TODO: Cetak list hasil di sini
print('Operation completed successfully');
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Manipulasi list Tingkat Lanjut
Properti list: first dan lastStatus list: isEmpty dan isNotEmpMembalikkan listMenambahkan ke list: insertMenghapus dari list: removeWhereMencari dalam list: indexOfMengurutkan listMengacak listRekap: Pengatur list4Manipulasi Map Lanjutan
Melakukan perulangan pada MapMemeriksa kunci dan nilaiProperti Map: kunci dan nilaiPenambahan Bersyarat: putIfAbsentMenghapus Entri dari MapMap BersarangRingkasan: Pembaruan Inventaris7Fungsi Lanjutan
Fungsi AnonimMeneruskan Fungsi sebagai ArgumenMemahami ClosurePengantar RekursiFungsi Rekursif: Hitung MundurFungsi Rekursif: FaktorialRangkuman: Pemroses list2Operasi Fungsional pada list
Mengubah dengan 'map'Menyaring dengan 'where'Menggunakan '.toList()'Memeriksa Kondisi dengan 'any'Kondisi dengan 'every'Menemukan dengan 'firstWhere'Ulasan: Penyaringan Data5Proyek: Perhitungan Keranjang Belanja
Menyiapkan ProyekMenambahkan Barang ke Keranjang3set
Apa itu set?Membuat setMenambahkan dan menghapus elemen dari setMemeriksa elemen dalam setMengubah list menjadi setGabungan setIrisan setSelisih setRangkuman: Daftar tamu unikLatihan sendiri: Compiler Dart online