0Pricing
C++ Academy · Lección

Acceso a valores de optional

Use value_or y has_value

Acceso a valores de optional es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Operador de desreferenciación

La forma más rápida de leer un optional es *opt, pero solo cuando esté seguro de que contiene un valor; no se realiza ninguna comprobación.

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

El método value()

opt.value() devuelve el valor, pero lanza std::bad_optional_access si el optional está vacío. Úselo cuando un optional vacío represente un error real.

#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 para valores predeterminados

opt.value_or(fallback) devuelve el valor contenido si existe; de lo contrario, devuelve el valor alternativo. No requiere ramificaciones ni excepciones.

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

value_or con datos reales

Un uso habitual es proporcionar un valor predeterminado cuando falta una configuración o no se encuentra un resultado en una búsqueda.

#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";
}

Operador flecha

En optionals de tipos de clase, opt->member permite acceder directamente a los miembros, suponiendo de nuevo que el optional no está vacío.

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

Proteger el acceso

El modismo seguro es: comprobar y después usar. Combinar la comprobación y el acceso evita tanto las excepciones como el comportamiento indefinido.

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

Init-statement en if

Puede declarar y comprobar en una sola línea mediante un init-statement de if, de modo que el optional quede limitado al ámbito de la rama.

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

Transform (C++23)

Los ayudantes monádicos, como transform, aplican una función solo si hay un valor presente y devuelven un nuevo optional. Esto permite encadenar los cálculos de forma clara.

and_then para encadenar

and_then (C++23) llama a una función que también devuelve un optional y aplana el resultado; es ideal para pasos en los que cada uno puede fallar.

Elegir un accessor

Use value_or cuando tenga un valor predeterminado razonable, value() cuando un optional vacío sea un error que merezca una excepción, y */-> solo después de una comprobación explícita.

Evitar la desreferenciación sin comprobar

No llame nunca a *opt sin confirmar que el optional no está vacío. Es un comportamiento indefinido y una causa habitual de fallos.

Comprobación rápida

Compruebe sus conocimientos sobre el acceso a optionals.

Resumen

Ha aprendido a acceder a los optionals:

  • * y -> después de una comprobación.
  • value() lanza una excepción si está vacío.
  • value_or proporciona un valor predeterminado.
  • Los métodos monádicos transform/and_then encadenan operaciones (C++23).

Preguntas frecuentes

¿La lección «Acceso a valores de optional» es gratis?

Sí — el texto completo de «Acceso a valores de optional» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Acceso a valores de optional»?

Use value_or y has_value Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Acceso a valores de optional»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Representar la ausencia con optional
  2. Acceso a valores de optional
  3. Conceptos básicos de std::expected
  4. Patrones de gestión de errores
← Volver a C++ Academy