C++ Academy · Pelajaran

Objek Fungsi dan Functor

Tulis class dengan operator() untuk membuat objek callable yang menyimpan keadaan

Pelajaran 1 dari 413 langkah

Objek Fungsi dan Functor adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Apa Itu Funktor?

Funktor (objek fungsi) adalah kelas yang membebani operator(). Instansinya dapat dipanggil seperti fungsi.

struct Square {
    int operator()(int x) const { return x * x; }
};

Square sq;
std::cout << sq(5);   // 25

Mengapa Bukan Fungsi Saja?

Funktor membawa status. Fungsi biasa tidak. Status memungkinkan konfigurasi, penghitungan, dan callback yang memiliki status.

struct Counter {
    int count = 0;
    int operator()(int x) { ++count; return x; }
};

Counter c;
c(10); c(20); c(30);
std::cout << c.count;   // 3

Perilaku yang Dapat Dikonfigurasi

Simpan konfigurasi dalam anggota funktor. Tipe funktor yang sama dapat digunakan untuk banyak kumpulan parameter.

struct GreaterThan {
    int threshold;
    bool operator()(int x) const { return x > threshold; }
};

GreaterThan over10{10};
over10(15);    // true
over10(5);     // false

Menggunakan Funktor dengan Algoritma STL

Algoritma STL menerima apa pun yang dapat dipanggil — funktor, lambda, dan pointer fungsi.

std::vector<int> v = {1, 11, 5, 99, 8};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});
std::cout << *it;   // 11

Funktor Bawaan dalam <functional>

Pustaka standar menyediakan funktor siap pakai: std::plus, std::less, std::equal_to, std::negate, dan lainnya.

#include <functional>
std::vector<int> v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end(), std::greater<int>{});
// sorted descending

Funktor vs Pointer Fungsi

Funktor biasanya lebih mudah di-inline karena operator()-nya merupakan pemanggilan langsung. Pointer fungsi dapat lebih fleksibel, tetapi pemanggilannya tidak langsung.

Funktor sebagai Parameter Templat

Banyak kontainer dan algoritma STL menerima funktor sebagai parameter templat — pembanding set, fungsi hash, dan pengalokasi.

std::set<int, std::greater<int>> s = {1, 2, 3};
// s iterates in descending order: 3, 2, 1

Lambda Adalah Funktor

Kompiler membuat kelas unik dengan operator() untuk setiap lambda. Lambda adalah gula sintaksis untuk funktor.

Kapan Menulis Funktor

Gunakan funktor yang ditulis secara manual jika:

  • Logika yang sama digunakan di banyak tempat (berikan nama)
  • Logika tersebut merupakan bagian dari API publik Anda
  • Logika tersebut perlu dapat dibuat melalui penyalinan/pemindahan dengan perilaku tertentu

Kapan Menggunakan Lambda

Untuk penggunaan sekali, lambda lebih singkat dan jelas. Untuk perilaku yang dapat digunakan kembali, funktor bernama meningkatkan keterbacaan.

Kemampuan untuk Disusun

Gabungkan funktor menggunakan std::bind atau, dengan cara yang lebih modern, dengan menyusun lambda. Pustaka fungsional seperti Boost juga menyediakan kombinator.

Pemeriksaan Singkat

Apa kemampuan utama funktor dibandingkan fungsi biasa?

Rangkuman

Funktor adalah kelas dengan operator(). Funktor membawa status, terintegrasi dengan algoritma STL, dan menjadi dasar bagi lambda. Gunakan funktor bernama untuk perilaku yang dapat digunakan kembali, dan lambda untuk logika sekali pakai.

Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Objek Fungsi dan Functor” gratis?

Ya — teks lengkap “Objek Fungsi dan Functor” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Objek Fungsi dan Functor”?

Tulis class dengan operator() untuk membuat objek callable yang menyimpan keadaan Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Objek Fungsi dan Functor” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Objek Fungsi dan Functor
  2. Capture Lambda berdasarkan Nilai, Referensi, dan Mutable
  3. Lambda Generik dan Closure C++14
  4. std::function: Callable dengan Penghapusan Tipe
← Kembali ke C++ Academy