Opcionales en Zig
?u32 es un número de amarradero o null, y el compilador no te deja olvidar cuál.
const std = @import("std");
fn findBerth(ship: []const u8) ?u32 {
if (std.mem.eql(u8, ship, "Persephone")) return 9;
return null;
}
pub fn main() void {
// ?u32 holds a number or null; if unwraps it by capture.
if (findBerth("Persephone")) |berth| {
std.debug.print("moor at berth {d}\n", .{berth});
}
// orelse supplies the value for the null case.
const anchorage = findBerth("Dreadnought") orelse 0;
std.debug.print("unknown ships anchor at {d}\n", .{anchorage});
}
Cómo funciona
?u32en el tipo de retorno admitenullcomo respuesta honesta.if (findBerth(...)) |berth|desenvuelve por captura solo cuando hay valor.orelse 0da el fondeadero para los barcos que el puerto no conoce.
Palabras clave y builtins usados aquí
constfniforelsepubreturnu32u8void
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 471
- Tokens
- 117
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 100 segundos.
Paso 1 de 3 en Opcionales y punteros; paso 10 de 27 en Fundamentos del lenguaje.