0Pricing
C++ Academy · บทเรียน

การเข้าถึงค่า optional

ใช้ value_or และ has_value

การเข้าถึงค่า optional เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

ตัวดำเนินการยกเลิกการอ้างอิง

วิธีที่เร็วที่สุดในการอ่านออปชันนัลคือ *opt แต่ต้องใช้เมื่อแน่ใจว่ามีค่าอยู่เท่านั้น เพราะวิธีนี้ไม่มีการตรวจสอบ

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

เมธอด value()

opt.value() ส่งคืนค่า แต่จะ โยนข้อยกเว้น std::bad_optional_access หากออปชันนัลว่าง ใช้เมื่อออปชันนัลว่างถือเป็นข้อผิดพลาดจริง

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o;
    try { std::cout << o.value() << "\n"; }
    catch (const std::bad_optional_access&) { std::cout << "empty!\n"; }
}

value_or สำหรับค่าเริ่มต้น

opt.value_or(fallback) ส่งคืนค่าที่อยู่ภายในหากมีค่า มิฉะนั้นจะส่งคืนค่าทดแทน โดยไม่ต้องแยกแขนงและไม่เกิดข้อยกเว้น

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = std::nullopt;
    std::cout << o.value_or(-1) << "\n"; // -1
}

value_or กับข้อมูลจริง

การใช้งานทั่วไปคือการกำหนดค่าเริ่มต้นให้กับการตั้งค่าหรือผลการค้นหาที่ไม่มีข้อมูล

#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> lookup(bool found) {
    if (found) return std::string("Pro");
    return std::nullopt;
}
int main() {
    std::cout << lookup(false).value_or("Free") << "\n";
}

ตัวดำเนินการลูกศร

สำหรับออปชันนัลของชนิดคลาส opt->member จะเข้าถึงสมาชิกได้โดยตรง โดยยังคงมีข้อสมมติว่าออปชันนัลไม่ว่าง

#include <iostream>
#include <optional>
#include <string>
int main() {
    std::optional<std::string> o = std::string("hello");
    if (o) std::cout << o->size() << "\n";
}

ตรวจสอบก่อนเข้าถึง

สำนวนที่ปลอดภัยคือ ตรวจสอบก่อนแล้วจึงใช้งาน การรวมการตรวจสอบและการเข้าถึงเข้าด้วยกันช่วยหลีกเลี่ยงทั้งข้อยกเว้นและพฤติกรรมไม่กำหนด

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 7;
    if (o.has_value()) {
        int x = *o;
        std::cout << x * 2 << "\n";
    }
}

คำสั่งเริ่มต้นใน if

คุณสามารถประกาศและตรวจสอบได้ในบรรทัดเดียวด้วยคำสั่งเริ่มต้นของ if โดยจำกัดขอบเขตของออปชันนัลไว้เฉพาะในแขนงนั้น

#include <iostream>
#include <optional>
std::optional<int> find() { return 3; }
int main() {
    if (auto v = find(); v.has_value())
        std::cout << *v << "\n";
}

การแปลง (C++23)

ตัวช่วยแบบโมนาด เช่น transform จะใช้ฟังก์ชันเฉพาะเมื่อมีค่าอยู่ และส่งคืนออปชันนัลตัวใหม่ วิธีนี้ช่วยเชื่อมการคำนวณได้อย่างเป็นระเบียบ

and_then สำหรับการเชื่อมต่อ

and_then (C++23) เรียกใช้ฟังก์ชันที่ตัวมันเองส่งคืนออปชันนัล แล้วทำให้ผลลัพธ์ที่ซ้อนกันถูกคลี่ออก เหมาะสำหรับขั้นตอนที่แต่ละขั้นอาจไม่สำเร็จ

การเลือกตัวเข้าถึง

ใช้ value_or เมื่อมีค่าเริ่มต้นที่เหมาะสม ใช้ value() เมื่อความว่างเปล่าเป็นข้อผิดพลาดที่ควรทำให้เกิดข้อยกเว้น และใช้ */-> หลังจากตรวจสอบอย่างชัดเจนแล้วเท่านั้น

หลีกเลี่ยงการยกเลิกการอ้างอิงโดยไม่ตรวจสอบ

อย่าเรียกใช้ *opt โดยไม่ยืนยันก่อนว่าออปชันนัลไม่ว่าง เพราะจะทำให้เกิดพฤติกรรมไม่กำหนดและเป็นสาเหตุที่พบได้บ่อยของโปรแกรมขัดข้อง

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ตรวจสอบความเข้าใจของคุณเกี่ยวกับการเข้าถึงออปชันนัล

ทบทวน

คุณได้เรียนรู้วิธีเข้าถึงออปชันนัล:

  • ใช้ * และ -> หลังจากตรวจสอบแล้ว
  • value() จะโยนข้อยกเว้นเมื่อว่าง
  • value_or จะจัดเตรียมค่าเริ่มต้น
  • ใช้ transform/and_then แบบโมนาดเพื่อเชื่อมการดำเนินการ (C++23)

คำถามที่พบบ่อย

บทเรียน “การเข้าถึงค่า optional” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเข้าถึงค่า optional” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเข้าถึงค่า optional”

ใช้ value_or และ has_value คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การเข้าถึงค่า optional” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การแทนค่าที่ไม่มีอยู่ด้วย optional
  2. การเข้าถึงค่า optional
  3. พื้นฐาน std::expected
  4. รูปแบบการจัดการข้อผิดพลาด
← กลับไปที่ C++ Academy