tutorial strawberry logo historia perl

strawberry - ¿Qué usos puedes pensar para las uniones de Perl 6?



perl tutorial (3)

Más información de la entrada Perl 6 Wikipedia

Juntas

Perl 6 introduce el concepto de uniones: valores que son compuestos de otros valores. [24] En los primeros días del diseño de Perl 6, estos fueron llamados "superposiciones", por analogía al concepto en física cuántica de superposiciones cuánticas, formas de onda que pueden ocupar simultáneamente varios estados hasta que la observación los "colapse". Un módulo de Perl 5 lanzado en 2000 por Damian Conway llamado Quantum :: Superpositions [25] proporcionó una prueba inicial del concepto. Si bien al principio, tales valores superpositivos parecían meramente una curiosidad programática, con el tiempo su utilidad e intuición se volvieron ampliamente reconocidas, y las uniones ahora ocupan un lugar central en el diseño de Perl 6.

En su forma más simple, las uniones se crean combinando un conjunto de valores con operadores junctivos:

my $any_even_digit = 0|2|4|6|8; # any(0, 2, 4, 6, 8) my $all_odd_digits = 1&3&5&7&9; # all(1, 3, 5, 7, 9)

| indica un valor que es igual a sus argumentos izquierdo o derecho. & indica un valor que es igual a sus argumentos izquierdo y derecho. Estos valores se pueden usar en cualquier código que use un valor normal. Las operaciones realizadas en una unión actúan sobre todos los miembros de la unión por igual, y se combinan de acuerdo con el operador junctive. Entonces, ("manzana" | "plátano") ~ "s" produciría "manzanas" | "plátanos". En las comparaciones, las uniones arrojan un único resultado verdadero o falso para la comparación. "cualquier" unión devuelve verdadera si la comparación es verdadera para cualquiera de los elementos de la unión. "todas" las uniones devuelven verdadero si la comparación es verdadera para todos los elementos de la unión.

Las uniones también se pueden usar para aumentar más ampliamente el sistema de tipos mediante la introducción de un estilo de programación genérica que se limita a las uniones de tipos:

sub get_tint ( RGB_Color|CMYK_Color $color, num $opacity) { ... } sub store_record (Record&Storable $rec) { ... }


La característica más atractiva de las uniones es que no necesita escribir una gran cantidad de pruebas de código para situaciones complejas. Usted describe la situación con las uniones, luego aplica la prueba. No piensas en cómo obtienes la respuesta (por ejemplo, usando operadores de cortocircuito o bloques) pero qué pregunta estás haciendo.


La autothreading suena genial, aunque no sé cuál es su estado actual.

for all(@files) -> $file { do_something($file); }

Las uniones no tienen orden, por lo que la máquina virtual es libre de engendrar un hilo para cada elemento en @files y procesarlos todos en paralelo.


¿Cuántos días hay en un mes determinado?

given( $month ){ when any(qw''1 3 5 7 8 10 12'') { $day = 31 } when any(qw''4 6 9 11'') { $day = 30 } when 2 { $day = 29 } }