Curso de Raku / Avanzado / Control de flujo / Prefijos de sentencia

sink y quietly

Dos prefijos más se ocupan de ejecutar código por sus efectos en lugar de por su valor.

El prefijo sink evalúa algo en contexto sink (de hundimiento), puramente por sus efectos secundarios, descartando el resultado. Es útil con una operación perezosa que quieres forzar a ejecutarse:

sink (1..3).map({ print "$_ " });
print "\n"; # 1 2 3

El map aquí se ejecuta solo por la impresión que realiza; sink se asegura de que realmente se ejecute y descarta la lista resultante. Sin forzarlo, un map perezoso cuyo resultado nunca se usa podría no ejecutarse en absoluto.

El prefijo quietly ejecuta un bloque con sus advertencias suprimidas. El código que normalmente imprimiría una advertencia en el flujo de error permanece en silencio:

my $value;
quietly {
    say $value + 1; # 1, with no "uninitialized value" warning
}

Sumar 1 a un $value indefinido normalmente advierte sobre el uso de un valor no inicializado, pero dentro de quietly esa advertencia se oculta. Úsalo cuando a propósito hagas algo que genera advertencias y no quieras el ruido, pero con moderación, ya que las advertencias generalmente señalan un error real.

Práctica

Resuelve 1 cuestionario sobre el contenido de este tema.

Pereza y ansiedad   |   Quiz — Prefijos de sentencia


💪 O ve directamente a los ejercicios de esta sección.