Curso de Raku / Esenciales / Variables tipadas
Alomorfos
Considera el siguiente programa. Antes de ejecutarlo, ¿puedes decir qué valores de entrada lo romperían y en qué línea?
my $input = prompt 'Enter something: ';
my Int $i = $input;
my Str $s = $input;
say $i;
say $s;
Aquí se crean tres variables escalares. Dos de ellas, $i
y $s
, son variables tipadas. Eso significa que $i
solo puede almacenar enteros y $s
solo puede almacenar cadenas.
El tipo de retorno de prompt
depende de los caracteres que escribimos. Si la cadena de entrada puede representar un número entero, el resultado será del tipo IntStr
, que es tanto Int
como Str
, y por lo tanto, puede asignarse a una variable Int
o Str
. Así que, si ingresas, por ejemplo, 1234
, el programa no se rompe.
$ raku allomorphs.raku
Enter something: 1234
1234
1234
El tipo IntStr
es un ejemplo del llamado alomorfo — un tipo de dato que combina dos otros tipos. Aquí hay algunos ejemplos más.
Si ingresas una cadena que no puede ser un número entero, el programa se rompe en el momento en que asignamos $input
a $i
:
$ raku allomorphs.raku
Enter something: Hello, World!
Type check failed in assignment to $i; expected Int but got Str ("Hello, World!")
in block <unit> at allomorphs.raku line 2
Nota que obtienes un error incluso si la cadena de entrada puede convertirse a un número, pero no a un entero. Como no es posible almacenar un número de punto flotante o racional en un contenedor entero, Raku emitirá una excepción:
$ raku allomorphs.raku
Enter something: 3.14
Type check failed in assignment to $i; expected Int but got RatStr (RatStr.new(3.14, "3....)
in block <unit> at allomorphs.raku line 2
La segunda asignación, $s = $input
, nunca se romperá ya que una cadena puede tomar cualquier entrada.
🦋 Puedes encontrar el código fuente de este programa en el archivo allomorphs.raku.
Navegación del curso
← Variables tipadas / Conversión de tipos para variables tipadas | 💪 Ejercicios: Variables tipadas →
Esta página está traducida automáticamente con ChatGPT 4o. Texto original en inglés.
Traducciones de esta página: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська