Menu
CoddyTech

Mengirim Fungsi sebagai Argumen

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 36 dari 61.

Salah satu penggunaan pointer fungsi yang paling ampuh adalah meneruskannya sebagai argumen ke fungsi lain. Dengan begitu, kamu dapat menyisipkan perilaku khusus ke dalam fungsi tanpa mengubah kodenya. Teknik ini terkadang disebut callback.

Pertimbangkan sebuah fungsi yang melakukan perhitungan pada dua angka. Daripada menuliskan operasi secara langsung, kamu dapat menerima pointer fungsi yang menentukan operasi yang harus dilakukan:

typedef int (*Operation)(int, int);

int compute(int a, int b, Operation op) {
    return op(a, b);
}

Fungsi compute tidak tahu apakah fungsi itu sedang menjumlahkan, mengurangkan, atau melakukan hal lain sepenuhnya. Fungsi itu hanya memanggil fungsi apa pun yang diteruskan kepadanya:

int add(int a, int b) { return a + b; }
int multiply(int a, int b) { return a * b; }

int main() {
    printf("%d\n", compute(5, 3, add));       // output: 8
    printf("%d\n", compute(5, 3, multiply));  // output: 15
    return 0;
}

Perhatikan bagaimana fungsi compute yang sama menghasilkan hasil berbeda berdasarkan fungsi yang kita berikan. Pola ini penting untuk menulis kode yang fleksibel dan dapat digunakan kembali. Kamu menulis strukturnya sekali, lalu pengguna fungsimu memberikan logika khusus yang mereka perlukan.

challenge icon

Tantangan

Mudah

Tulis fungsi apply_twice yang menerima dua bilangan bulat dan kode operasi, menerapkan operasi tersebut pada angka-angka itu dua kali secara berurutan, lalu mengembalikan hasil akhirnya.

Fungsimu akan menerima kode operasi yang menentukan operasi yang digunakan. Kamu harus mendefinisikan fungsi-fungsi operasi di dalam solusimu dan meneruskannya ke fungsi pembantu compute yang menerima pointer fungsi.

Catatan: hanya fungsi yang diperlukan. Tes akan memanggil apply_twice secara langsung dan memeriksa nilai kembaliannya, jadi jangan membaca input atau mencetak apa pun.

Struktur yang diperlukan:

  • Definisikan sebuah typedef bernama Operation untuk pointer fungsi yang menerima dua parameter int dan mengembalikan int
  • Definisikan dua fungsi operasi: add (mengembalikan a + b) dan multiply (mengembalikan a * b)
  • Definisikan fungsi compute yang menerima dua bilangan bulat dan pointer fungsi Operation, lalu mengembalikan hasil pemanggilan operasi tersebut
  • Di dalam apply_twice, pilih operasi yang sesuai berdasarkan kode, lalu gunakan compute dua kali: pertama dengan angka-angka awal, lalu dengan hasil dan angka kedua lagi

Logika:

  1. Pilih fungsi operasi berdasarkan op_code (1 = add, 2 = multiply)
  2. Panggil compute(a, b, operation) untuk mendapatkan hasil sementara
  3. Panggil compute(intermediate, b, operation) untuk mendapatkan hasil akhir
  4. Kembalikan hasil akhir

Parameter:

  • a (int): Angka pertama
  • b (int): Angka kedua
  • op_code (int): Kode operasi (1 untuk add, 2 untuk multiply)

Nilai kembali: Hasil setelah operasi diterapkan dua kali secara berurutan (int)

Contoh: Dengan a = 5, b = 3, op_code = 1 (add):

  • Perhitungan pertama: 5 + 3 = 8
  • Perhitungan kedua: 8 + 3 = 11
  • Kembalikan: 11

Dengan a = 2, b = 4, op_code = 2 (multiply):

  • Perhitungan pertama: 2 × 4 = 8
  • Perhitungan kedua: 8 × 4 = 32
  • Kembalikan: 32

Coba sendiri

int apply_twice(int a, int b, int op_code) {
    // Tulis kodemu di sini
}
quiz iconUji dirimu

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

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online