Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Buat 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.

  1. Baca input string yang berisi angka-angka yang dipisahkan dengan koma (misalnya, "1,2,3,4,5")
  2. Baca input string yang menunjukkan tipe operasi ("double", "square", atau "increment")
  3. Pisahkan input pertama menjadi list string dan ubah setiap string menjadi integer
  4. Buat tiga fungsi terpisah:
    • doubleNumber menerima integer dan mengembalikannya setelah dikalikan dengan 2
    • squareNumber menerima integer dan mengembalikannya setelah dikalikan dengan dirinya sendiri
    • incrementNumber menerima integer dan mengembalikannya setelah ditambah 1
  5. Buat fungsi utama bernama processNumbers yang menerima list integer dan fungsi sebagai parameter
  6. Fungsi processNumbers harus menerapkan fungsi yang diberikan ke setiap angka di dalam list dan mengembalikan list baru yang berisi hasilnya
  7. Berdasarkan input tipe operasi, teruskan fungsi yang sesuai ke processNumbers
  8. 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 successfully

Jika 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 successfully

Jika 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 successfully

Programmu 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');
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online