Raku

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 37

Lenguaje de

programación:
Raku
Historia
Diseñado por Larry Wall y originalmente conocido como Perl 6, su
diseño fue anunciado el 19 de Julio de 2000, pero no tuvo un
lanzamiento oficial hasta el 25 de Diciembre del 2015.

Algunos de sus objetivos, en palabras del diseñador, era eliminar la


confusión acerca del uso de Sigil en los contenedores de datos,
ambiguedad entre las funciones Select y el impacto sintactico de
los identificadores de archivos sin palabras. Con la caracteristica
que no poseia retrocompatibilidad con el codigo base de Perl.

Todo esto, ocasionó que Perl6 fuera renombrado a Raku.


Caracteristicas
Los tipos se pueden declarar pero no es obligatorio
Diferentes definiciones de funciones para diferentes valores de
entrada
Diferentes cuerpos de funciones para diferentes conjuntos de
tipos de argumentos
Secuencias generadas "perezosamente" para retrasar la
evaluación de una expresión hasta que sea necesario
Junctions, superposición lógica de valores.
Sintaxis integrada para definir gramáticas y generar
analizadores.
Paradigma: Programación funcional
Las funciones/subrutinas pueden pasarse como argumentos,
regresadas como otras funciones y ser asignadas a variables.

Los métodos pueden ser encadenados para que no sea necesario


pasar el resultado de un método a otro argumento.

El hiperoperador >> llama a un método en todos los elementos de


una lista y devolverá la lista de los resultados.

Todos los objetos de código en Raku son cierres, lo que significa


que pueden hacer referencia a variables léxicas desde un ámbito
externo.
Paradigma: Programación funcional
Un ejemplo es la función de orden superior "map" que puede
aceptar funciones como un argumento.

Dando de salida: ( 1 4 9 16)


Paradigma: Programación funcional
Una función anónima (lambda) está vinculada a un identificador
(sin nombre).

En lugar de declarar la subrutina cuadrada y pasarla como


argumento a "map", la definimos dentro de la subrutina anónima
como -> $x {$x ** 2}.
A esta notación se le conoce como bloque "puntiagudo", que
puede usarse para asignar funciones a variables.
Paradigma: Programación funcional
No-encadenado:

Encadenado, llamando a unique en @array, pasamos el resultado


como un argumento para ordenar y luego pasamos ese resultado
a reverse:
Paradigma: Programación funcional
Junction es una superposición lógica de valores. En el siguiente
ejemplo 1|2|3, es un junction.

El uso de junctions generalmente desencadena el


subprocesamiento automático; la operación se lleva a cabo para
cada elemento de cruce y todos los resultados se combinan en un
nuevo cruce y se devuelven.
Paradigma: Programación funcional
Una lista perezosa es una lista que se evalúa de forma perezosa.
La evaluación diferida retrasa la evaluación de una expresión
hasta que sea necesario y evita repetir las evaluaciones al
almacenar los resultados en una tabla de búsqueda.
Ejemplo de lista perezosa:

Los beneficios incluyen: Aumento del rendimiento al evitar cálculos


innecesarios, la capacidad de construir estructuras de datos
potencialmente infinitas y la capacidad de definir el flujo de
control.
Paradigma: Programación orientada a objetos
Un objeto es un conjunto de variables y subrutinas agrupados, las
variables se les conoce como atributos y las subrutinas como métodos.
Una “clase” es usada como plantilla para crear objetos.

Cuando necesitamos que el método en la clase secundaria se comporte


de manera diferente al heredado, redefinimos el método en la clase
secundaria, a esto se le denomina superposición.

En lenguaje orientado a objetos, decimos que los objetos son instancias


de una clase.
Paradigma: Programación orientada a objetos
La palabra clave “class” es usada para definir una clase, “has” para
definir atributos de una clase, y “.new()” para declarar un constructor.

La variable $john contiene una referencia a una nueva instancia de


"Humano" definida por Human.new(). Los argumentos pasados ​al
método .new() se utilizan para establecer los atributos del objeto
subyacente.
Paradigma: Programación orientada a objetos
La encapsulación agrupa un conjunto de datos y métodos. Los datos
(atributos) dentro de un objeto deben ser privados. Para acceder a los
atributos desde fuera del objeto, usamos métodos llamados accesores.
Acceso directo a la variable:

Encapsulacion:

El método sayvar es un accesor. Nos permite acceder al valor de la


variable sin tener acceso directo a ella.
Paradigma: Programación orientada a objetos
Los métodos son las subrutinas de un objeto. Al igual que las
subrutinas, son un medio para empaquetar un conjunto de funciones,
aceptan argumentos, tienen una firma y se pueden definir como
múltiples

Una vez que se definen los métodos dentro de una clase, se pueden
llamar en un objeto usando la notación de puntos: objetct.method o
$class.method

Dentro de la definición de un método, si necesitamos hacer referencia


al objeto mismo para llamar a otro método, usamos la palabra clave
self.
Paradigma: Programación orientada a objetos
La palabra clave "is" define la herencia. Todas las clases secundarias
heredan los atributos y métodos de la clase principal, por lo que no es
necesario redefinirlos.
Condiciones
Condición If
En Raku, podemos invertir el código y la condición. Incluso si el código y
la condición se han invertido, la condición siempre se evalúa primero.

Si no se cumple la condición, podemos especificar bloques alternativos


para su ejecución usando else o elseif:
Condición Unless
La versión negada de una declaración if se puede escribir usando
unless

La negación en Raku se realiza usando ! o not.


Unless(condición) se usa en lugar de if not (condición).
Unless no puede tener una cláusula else.
Condición With/Without
With se comporta como la sentencia if, pero comprueba si la variable
está definida. Si se ejecuta el código sin asignar un valor a la variable,
no debería pasar nada.

Without es la versión negada de With. Tal como If y Unless


Si no se cumple la primera condición with, se puede especificar una ruta
alternativa mediante orwith.
With y orwith se pueden comparar con if y elsif.
Condición For
El ciclo for itera sobre múltiples valores.

En el ejemplo se crea una variable de iteración $array-item y luego


realizamos la operación *100 en cada elemento de la matriz.
Condición Given
Given es el equivalente de Raku de la declaración de cambio en otros
idiomas, pero mucho más poderoso.
After a successful match, the matching process will stop.
Alternatively proceed will instruct Raku to continue matching even after a
successful match.
Condición Loop
Loop es otra forma de escribir un bucle for.
En realidad, Loop es cómo se escriben los bucles en los lenguajes de
programación de la familia C.
Raku pertenece a los lenguajes de la familia C.
Sintaxis
Convenciones léxicas
Forma libre
Raku es de forma libre: la mayoría de las veces eres libre de usar
cualquier cantidad de espacios en blanco, aunque en ciertos casos los
espacios en blanco tienen significado.

Las declaraciones suelen ser una línea lógica de código, deben terminar
con un punto y coma: say "Hello" if True;
Las expresiones son un tipo especial de instrucción que devuelve un
valor: 1+2 devolverá 3

Las expresiones están formadas por Términos y Operadores.


Términos
Los términos son:
Variables: un valor que se puede manipular y cambiar.
Literales: un valor constante como un número o una cadena.
Los operadores se clasifican en tipos:
Prefijo Antes del término ++1

Infijo Entre términos 1+2

Postfijo Antes del término 1+2

Circunfijo Alrededor del término (1)

Después de un término,
Postcircunfijo Array[1]
alrededor del otro
Regla de separación implícita
Las declaraciones completas que terminan en bloques descubiertos
pueden omitir el punto y coma final, si no hay declaraciones adicionales
en la misma línea después de la llave de cierre del bloque }. Esto se
llama la "regla de separación implícita". Por ejemplo, no necesita
escribir un punto y coma después de un bloque de declaración if como
se ve arriba y abajo.
Sin embargo, se requieren puntos y comas para separar un bloque de
las declaraciones finales en la misma línea.
Esta regla de separación de declaraciones implícitas se aplica de otras
maneras, además de las declaraciones de control, que podrían terminar
con un bloque desnudo. Por ejemplo, en combinación con la sintaxis de
dos puntos: para llamadas a métodos.
Comentarios
Los comentarios son partes del texto del programa que solo están
destinados a lectores humanos; los compiladores de Raku no los evalúan
como texto de programa. Son parte del código no ambiental que
incluye el texto de Pod6.
Los comentarios cuentan como espacios en blanco en lugares donde la
ausencia o presencia de espacios en blanco elimina la ambigüedad de
posibles análisis.
Pueden ser comentarios de una sola o varias lineas
Identificadores
Los identificadores son bloques de construcción gramaticales que se
pueden usar para dar un nombre a entidades/objetos como constantes,
variables (escalares) y rutinas (subs y métodos). En un nombre de
variable, cualquier sigil (y twigil) precede al identificador y no forma
parte del mismo.

Los identificadores pueden ser: ordinarios, extendidos y compuestos.


Sintaxis
Declaraciones y
expresiones
Declaraciones y expresiones
Los programas Raku están hechos de listas de declaraciones. Un caso
especial de una declaración es una expresión, que devuelve un valor.
Por ejemplo, si True { say 42 } es sintácticamente una declaración, pero
no una expresión, mientras que 1 + 2 es una expresión (y por lo tanto
también una declaración).

El prefijo do convierte declaraciones en expresiones.


my $x = do if True { 42 }; es un error
my $x = do if True { 42 }; asigna el valor de retorno de la instrucción if
(aquí 42) a la variable $x.
Términos
Los términos son los sustantivos básicos que, opcionalmente junto con
los operadores, pueden formar expresiones. Ejemplos de términos son
variables ($x), palabras simples como nombres de tipo (Int), literales
(42), declaraciones (sub f() { }) y llamadas (f()).

Por ejemplo, en la expresión 2 * $salario, 2 y $salario son dos términos


(un literal entero y una variable).
Variables
Las variables suelen comenzar con un carácter especial llamado sigilo y
van seguidas de un identificador. Las variables deben declararse antes
de poder usarlas.
Sigils
Hay cuatro sigils. El sigil escalar $, el sigil posicional @, el sigil
asociativo % y el sigil invocable &.
Los sigils proporcionan un vínculo entre la sintaxis, el sistema de tipos y
los contenedores. Proporcionan un atajo para las restricciones de tipo
más comunes al declarar variables y sirven como marcadores para la
interpolación de cadenas. El sigil posicional y el sigil asociativo
proporcionan una restricción de tipo que impone los subíndices de tipo
base necesarios para saber a qué métodos enviar. Callable-sigil hace lo
mismo para las llamadas a funciones. Este último también le dice al
compilador dónde se pueden omitir los paréntesis para las llamadas. El
sigil posicional y asociativo también simplifica la asignación al aplanar
por defecto.
Literales
Un literal es una representación de un valor constante en el código
fuente. Raku tiene literales para varios tipos integrados, como cadenas,
varios tipos numéricos, pares y más.

Los literales de cadena están entre comillas.


Los números literales generalmente se especifican en base diez (que se
puede especificar literalmente, si es necesario, a través del prefijo 0d),
a menos que un prefijo como 0x (hexadecimal, base 16), 0o (octal, base
8) o 0b (binario, base 2). ) o una base explícita en notación adverbial
como :16<A0> especifica lo contrario.
Declaraciones
Declaración de variable

Declaración de subrutina

Asignación de subrutinas a variables


Operadores
Los operadores son funciones con una sintaxis compuesta y más
cargada de símbolos. Al igual que otras funciones, los operadores
pueden ser multidespacho para permitir un uso específico del contexto.

Hay cinco tipos (arreglos) de operadores, cada uno de los cuales toma
uno o dos argumentos.
Dominio
Raku es un lenguaje de programación de propósito general. Se puede
usar para abordar una multitud de tareas que incluyen: manipulación
de texto, gráficos, web, bases de datos, protocolos de red, etc.

La reutilización es un concepto muy importante mediante el cual los


programadores no tienen que reinventar la rueda cada vez que quieren
realizar una nueva tarea.

Raku permite la creación y redistribución de módulos. Cada módulo es


un conjunto empaquetado de funcionalidad que se puede reutilizar una
vez instalado.
Referencias
https://raku.guide/
https://www.raku.org/

También podría gustarte