C++ Academy · Pelajaran

Merepresentasikan Ketiadaan dengan optional

Hindari pointer null

Pelajaran 1 dari 413 langkah

Merepresentasikan Ketiadaan dengan optional 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.

Masalah dengan Null

Mengembalikan penanda khusus seperti -1 atau penunjuk null untuk menyatakan "tidak ada nilai" bersifat rapuh dan mudah disalahgunakan. std::optional<T> secara eksplisit menyatakan "sebuah nilai, atau tidak ada apa-apa". Sertakan <optional>.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> maybe = 42;
    std::cout << *maybe << "\n";
}

Optional Kosong

Mengonstruksi optional secara bawaan, atau menetapkan std::nullopt, menghasilkan optional kosong yang tidak menyimpan nilai.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> empty;
    std::optional<int> also = std::nullopt;
    std::cout << empty.has_value() << " " << also.has_value() << "\n";
}

Memeriksa Keberadaan Nilai

Panggil has_value() atau gunakan optional secara langsung dalam konteks boolean untuk menguji apakah optional tersebut berisi sesuatu.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 5;
    if (o) std::cout << "has value\n";
    if (o.has_value()) std::cout << "yes\n";
}

Optional sebagai Tipe Pengembalian

Fungsi yang mungkin gagal menghasilkan hasil sangat cocok menggunakan tipe ini. Kembalikan nilainya saat berhasil, dan std::nullopt saat gagal.

#include <iostream>
#include <optional>
std::optional<int> half(int n) {
    if (n % 2 == 0) return n / 2;
    return std::nullopt;
}
int main() {
    auto r = half(10);
    if (r) std::cout << *r << "\n";
}

Membaca Nilai

Gunakan *opt atau opt.value() setelah Anda mengetahui bahwa optional tersebut memiliki nilai. Dereferensi optional kosong dengan * merupakan perilaku tidak terdefinisi.

#include <iostream>
#include <optional>
int main() {
    std::optional<std::string_view> name = "Ada";
    if (name) std::cout << *name << "\n";
}

Signature yang Menjelaskan Diri

Tipe pengembalian std::optional langsung memberi tahu pemanggil bahwa fungsi mungkin tidak menghasilkan hasil; komentar tidak diperlukan.

#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> getEnvName(bool present) {
    if (present) return std::string("CONFIG");
    return std::nullopt;
}
int main() { std::cout << getEnvName(true).has_value() << "\n"; }

Mengosongkan Optional

Panggil reset() untuk mengosongkan optional kembali, atau tetapkan std::nullopt.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 99;
    o.reset();
    std::cout << o.has_value() << "\n"; // 0
}

Mengonstruksi di Tempat

emplace mengonstruksi nilai yang dikandung langsung di dalam optional sehingga menghindari penyalinan tambahan.

#include <iostream>
#include <optional>
#include <string>
int main() {
    std::optional<std::string> o;
    o.emplace("built in place");
    std::cout << *o << "\n";
}

Optional dibandingkan dengan Penunjuk

Penunjuk mentah dapat bernilai null, tetapi tidak memberi informasi tentang kepemilikan dan berisiko menjadi penunjuk yang menggantung. Optional memiliki nilainya sendiri dan dengan jelas menandakan "mungkin tidak ada" tanpa alokasi heap.

Optional Referensi?

std::optional menyimpan nilai, bukan referensi. Untuk merujuk secara opsional ke objek yang sudah ada, simpan penunjuk atau gunakan std::optional<std::reference_wrapper<T>>.

Kapan Menggunakan Optional

Gunakan untuk pencarian yang mungkin tidak menemukan hasil, penguraian yang mungkin gagal, atau pengaturan yang mungkin belum ditetapkan. Pelajaran berikutnya membahas cara aman untuk mengakses nilai yang dikandung.

Pemeriksaan Singkat

Periksa pemahaman Anda tentang std::optional.

Rangkuman

Anda telah mempelajari dasar-dasar std::optional:

  • Menyatakan "sebuah nilai atau tidak ada apa-apa" tanpa penanda khusus atau null.
  • Kosong melalui konstruksi bawaan atau std::nullopt.
  • Periksa dengan has_value() atau pengujian boolean.
  • Ideal sebagai tipe pengembalian untuk pencarian yang dapat gagal.
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 “Merepresentasikan Ketiadaan dengan optional” gratis?

Ya — teks lengkap “Merepresentasikan Ketiadaan dengan optional” 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 “Merepresentasikan Ketiadaan dengan optional”?

Hindari pointer null 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 “Merepresentasikan Ketiadaan dengan optional” 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. Merepresentasikan Ketiadaan dengan optional
  2. Mengakses Nilai optional
  3. Dasar-Dasar std::expected
  4. Pola Penanganan Error
← Kembali ke C++ Academy