0Pricing
C++ Academy · Pelajaran

Dasar-Dasar std::expected

Kembalikan nilai atau error

Dasar-Dasar std::expected adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Nilai atau Kesalahan

std::expected<T, E> (C++23) menyimpan nilai berhasil bertipe T atau kesalahan bertipe E. Berbeda dari optional, tipe ini menyertakan alasan kegagalannya. Sertakan <expected>.

Mengembalikan Keberhasilan

Saat berhasil, Anda mengembalikan nilainya secara langsung; nilai tersebut disimpan sebagai tipe "expected", yaitu T.

#include <expected>
#include <iostream>
std::expected<int, std::string> parse(bool ok) {
    if (ok) return 100;
    return std::unexpected("bad input");
}
int main() {
    auto r = parse(true);
    if (r) std::cout << *r << "\n";
}

Mengembalikan Kesalahan

Bungkus kesalahan dalam std::unexpected(...) untuk menandakan kegagalan sambil tetap mengembalikan tipe yang sama.

#include <expected>
#include <iostream>
#include <string>
std::expected<int, std::string> div(int a, int b) {
    if (b == 0) return std::unexpected("divide by zero");
    return a / b;
}
int main() {
    auto r = div(8, 0);
    if (!r) std::cout << r.error() << "\n";
}

Memeriksa Keberhasilan

Uji hasilnya dalam konteks boolean atau dengan has_value(). True berarti hasil tersebut menyimpan nilai, sedangkan false berarti menyimpan kesalahan.

#include <expected>
#include <iostream>
int main() {
    std::expected<int, int> r = 5;
    std::cout << r.has_value() << "\n"; // 1
}

Membaca Nilai

Gunakan *r atau r.value() untuk membaca nilai keberhasilan. value() melempar std::bad_expected_access jika hasil tersebut sebenarnya menyimpan kesalahan.

#include <expected>
#include <iostream>
int main() {
    std::expected<int, std::string> r = 7;
    if (r) std::cout << r.value() << "\n";
}

Membaca Kesalahan

Saat hasil berada dalam keadaan kesalahan, r.error() memberi Anda objek kesalahannya.

#include <expected>
#include <iostream>
#include <string>
std::expected<int, std::string> f() { return std::unexpected("nope"); }
int main() {
    auto r = f();
    if (!r) std::cout << "error: " << r.error() << "\n";
}

Fallback value_or

Sama seperti optional, value_or(fallback) mengembalikan nilai keberhasilan atau nilai bawaan tanpa memeriksa kesalahannya.

#include <expected>
#include <iostream>
std::expected<int, std::string> f() { return std::unexpected("x"); }
int main() {
    std::cout << f().value_or(0) << "\n"; // 0
}

Membandingkan optional dan expected

std::optional menyatakan “nilai atau tidak ada”; std::expected menyatakan “nilai atau galat yang dijelaskan”. Pilih expected ketika pemanggil perlu mengetahui alasan kegagalan.

Tipe Galat yang Informatif

Tipe galat E dapat berupa enumerasi, struktur, atau teks pesan, sesuai yang paling baik untuk menjelaskan kegagalan dalam ranah Anda.

#include <expected>
#include <iostream>
enum class Err { NotFound, Denied };
std::expected<int, Err> get(bool ok) {
    if (ok) return 1;
    return std::unexpected(Err::Denied);
}
int main() {
    auto r = get(false);
    if (!r) std::cout << (int)r.error() << "\n";
}

Tidak Memerlukan Pengecualian

std::expected memungkinkan Anda meneruskan kegagalan sebagai nilai pengembalian biasa, yang berguna ketika pengecualian dinonaktifkan atau mahal untuk digunakan.

Catatan Ketersediaan

std::expected merupakan fitur C++23; pastikan kompiler dan opsi standar Anda (misalnya -std=c++23) mendukungnya sebelum digunakan.

Uji Cepat

Periksa pemahaman Anda tentang std::expected.

Rangkuman

Anda telah mempelajari std::expected:

  • Menyimpan nilai (T) atau galat (E).
  • Mengembalikan keberhasilan secara langsung dan galat melalui std::unexpected.
  • Membaca nilainya dengan */value() dan error().
  • Membawa alasan kegagalan, berbeda dari optional.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Dasar-Dasar std::expected” gratis?

Ya — teks lengkap “Dasar-Dasar std::expected” 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 “Dasar-Dasar std::expected”?

Kembalikan nilai atau error 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 3 dari 4.

Berapa lama pelajaran “Dasar-Dasar std::expected” 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