Los tipos representan datos opcionales:
fn main() {
let numbers = vec![10, 20, 30];
let first: Option<&i8> = numbers.first();
println!("first: {first:?}");
let idx: Result<usize, usize> = numbers.binary_search(&10);
println!("idx: {idx:?}");
}
Si ejecuto este codigo :
cargo run
Compiling hello_cargo v0.1.0 (/home/emanuel/Projects/rust/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.75s
Running `target/debug/hello_cargo`
first: Some(10)
idx: Ok(0)
Si por ejemplo busco el 39 :
let idx: Result<usize, usize> = numbers.binary_search(&39);
println!("idx: {idx:?}");
Si corremos esto :
cargo run
Compiling hello_cargo v0.1.0 (/home/emanuel/Projects/rust/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.27s
Running `target/debug/hello_cargo`
first: Some(10)
idx: Err(3)
El resultado es Err y no Ok.
- Option y Result se utilizan ampliamente no solo en la biblioteca estándar.
- La Option <&T> tiene cero espacio adicional en comparación con &T.
- El resultado es el tipo estándar para implementar el manejo de errores.
- binario_search devuelve Result<usize, usize>.
- Si se encuentra, Result::Ok contiene el índice donde se encuentra el elemento.
- De lo contrario, Result::Err contiene el índice donde se debe insertar dicho elemento.