if y else en WebAssembly
Las ramas van tipadas: un if con resultado debe llenar ambos brazos.
(module
;; if is typed: (result i32) says both branches leave one value.
(func (export "abs") (param $n i32) (result i32)
(if (result i32)
(i32.lt_s (local.get $n) (i32.const 0))
(then (i32.sub (i32.const 0) (local.get $n)))
(else (local.get $n))))
;; Without a result type, if is a statement and else may vanish.
(func (export "cap_at_ten") (param $n i32) (result i32)
(if (i32.gt_s (local.get $n) (i32.const 10))
(then (return (i32.const 10))))
(local.get $n)))
Cómo funciona
(if (result i32) ...)promete un valor de cualquiera de las ramas.(then ...)y(else ...)dejan ese valor cada una.- Un if sin resultado puede saltarse el else;
returnsale de la función.
Palabras clave y builtins usados aquí
elseexportfunci32ifmoduleparamresultreturnthen
El intento, en números
- Líneas
- 13
- Caracteres a escribir
- 464
- Tokens
- 108
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 100 segundos.
Paso 1 de 3 en Control de flujo; paso 10 de 28 en Fundamentos del lenguaje.