Memahami Closure
Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 46 dari 65.
Closure adalah jenis fungsi khusus yang "mengingat" variabel dari tempat fungsi itu dibuat, bahkan setelah konteks aslinya selesai dijalankan. Anggap saja closure sebagai fungsi yang membawa sebagian dari tempat asalnya ke mana pun ia pergi.
Saat kamu membuat fungsi di dalam fungsi lain, fungsi di dalam tersebut dapat mengakses variabel fungsi luar. Hal yang menjadikannya closure adalah akses ini tetap tersedia bahkan setelah fungsi luar selesai dijalankan.
Function createGreeting(String name) {
return () {
return "Hello, $name!";
};
}Dalam contoh ini, fungsi anonim yang dikembalikan oleh createGreeting adalah closure. Fungsi ini menangkap parameter name dari lingkup sekitarnya. Bahkan setelah createGreeting selesai dijalankan, fungsi yang dikembalikan tetap mengingat nilai name.
Closure sangat berguna untuk membuat fungsi khusus atau mempertahankan state dengan cara yang rapi. Closure memungkinkan kamu membuat fungsi yang disesuaikan dengan lingkungan tempat fungsi tersebut dibuat, sehingga kodemu menjadi lebih fleksibel dan tangguh.
Tantangan
MudahBuat program yang mendemonstrasikan closure dengan membangun sistem pembuat pesan yang dipersonalisasi. Programmu akan membuat fungsi yang "mengingat" informasi tertentu dan menggunakan informasi tersebut untuk membuat pesan khusus, bahkan setelah konteks aslinya selesai.
- Baca input string yang mewakili nama seseorang
- Baca input string yang mewakili jenis sapaan (
"formal","casual", atau"friendly") - Baca input string yang mewakili nama perusahaan
- Buat fungsi bernama
createMessageGeneratoryang menerima nama dan jenis sapaan sebagai parameter - Fungsi
createMessageGeneratorharus mengembalikan fungsi lain (closure) yang: - Menerima nama perusahaan sebagai parameternya
- Menggunakan nama dan jenis sapaan dari scope fungsi luar
- Mengembalikan pesan berformat berdasarkan jenis sapaan:
- Untuk
"formal":"Dear [name], we are pleased to welcome you to [company]." - Untuk
"casual":"Hey [name]! Welcome to [company]!" - Untuk
"friendly":"Hi [name], so glad you joined [company]!" - Panggil fungsi
createMessageGeneratordengan input nama dan jenis sapaan untuk mendapatkan fungsi closure - Panggil fungsi closure yang dikembalikan dengan input nama perusahaan untuk membuat pesan
- Tampilkan hasil dalam format persis seperti yang ditunjukkan di bawah
Misalnya, jika inputnya adalah "Alice", "formal", dan "TechCorp", programmu harus menghasilkan output:
Message Generator System
========================
Creating message generator for: Alice
Greeting type: formal
Company: TechCorp
========================
Generated message: Dear Alice, we are pleased to welcome you to TechCorp.
Message generation completed successfullyJika inputnya adalah "Bob", "casual", dan "StartupXYZ", programmu harus menghasilkan output:
Message Generator System
========================
Creating message generator for: Bob
Greeting type: casual
Company: StartupXYZ
========================
Generated message: Hey Bob! Welcome to StartupXYZ!
Message generation completed successfullyJika inputnya adalah "Carol", "friendly", dan "InnovateLab", programmu harus menghasilkan output:
Message Generator System
========================
Creating message generator for: Carol
Greeting type: friendly
Company: InnovateLab
========================
Generated message: Hi Carol, so glad you joined InnovateLab!
Message generation completed successfullyProgrammu harus mendemonstrasikan closure dengan membuat fungsi yang mengembalikan fungsi lain. Fungsi yang dikembalikan (closure) harus dapat mengakses variabel dari scope fungsi luar (nama dan jenis sapaan), bahkan setelah fungsi luar selesai dijalankan. Gunakan pernyataan percabangan untuk menentukan format pesan yang sesuai berdasarkan input jenis sapaan.
Coba sendiri
import 'dart:io';
void main() {
// Baca input
String? name = stdin.readLineSync();
String? greetingType = stdin.readLineSync();
String? company = stdin.readLineSync();
// Tampilkan header sistem
print("Message Generator System");
print("========================");
print("Creating message generator for: $name");
print("Greeting type: $greetingType");
print("Company: $company");
print("========================");
// TODO: Tulis kodemu di bawah ini
// Buat fungsi createMessageGenerator yang mengembalikan closure
// Panggil fungsi tersebut dan buat pesannya
// Tampilkan hasil akhirnya sebagai output
print("Generated message: \$message");
print("Message generation 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 Inventaris2Operasi 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