Controlar el flujo
Condiciones y bucles
let label = if value > 0 { 1 } elif value < 0 { -1 } else { 0 }
let mut index: usize = 0
while index < len(values) {
index = index + 1
}
for item in values {
consume_copy(item)
}
if es una expresión. while y for son compatibles con break y continue. for sobre rangos, matrices y cortes desciende a un bucle index/length sin asignación directa. Los elementos de solo movimiento requieren una indexación y un manejo de propiedad explícitos.
Partido y ADT
type response {
ok(i64)
error(str)
}
fn status(value: response) -> i64 {
match value {
ok(code) => code
error(message) => -1
}
}
Los brazos de coincidencia no tienen comas y deben ser exhaustivos a menos que sea inalcanzable el flujo restante. Los patrones admiten literales, tuplas, estructuras, variantes, enlaces, descartes y guardias. Las cargas útiles de solo movimiento se transfieren solo cuando se selecciona un brazo; un patrón o guardia fallido preserva al propietario para armas posteriores.
Opciones, resultados y ?
fn find(enabled: bool) -> ?i64 {
if enabled { some(42) } else { none }
}
fn forward(enabled: bool) -> ?i64 {
let value = find(enabled)?
some(value)
}
? produce el present/success carga útil o devuelve el error correspondiente. La propagación de resultados puede cambiar el tipo de éxito pero conserva el tipo de error. No se produce ninguna asignación o clonación implícita. ? no puede cruzar un spawn límite.
Limpieza en bordes de flujo
caída, ret, break, y continue ejecutar el plan de limpieza verificado para propietarios vivos. Panic/trap/abort Los bordes nunca se desenrollan y no se limpian.