typestar

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

  1. (if (result i32) ...) promete un valor de cualquiera de las ramas.
  2. (then ...) y (else ...) dejan ese valor cada una.
  3. Un if sin resultado puede saltarse el else; return sale de la función.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Control de flujo; paso 10 de 28 en Fundamentos del lenguaje.

← Anterior Siguiente →