stringtranslate.com

Citrino (lenguaje de programación)

Citrine es un lenguaje de programación de propósito general para varios sistemas operativos . Se centra en la legibilidad y la facilidad de mantenimiento. La legibilidad se logra mediante el minimalismo sintáctico y conceptual. El lenguaje está fuertemente inspirado en Smalltalk y Self , pero tiene algunas características muy distintivas. Al igual que Smalltalk, Citrine trata todo como un objeto y se centra en enviar mensajes a estos objetos. Sin embargo, a diferencia de Smalltalk, Citrine carece del concepto de clase. En este sentido, Citrine se parece más a Self y JavaScript porque utiliza prototipos . La combinación de mensajes y prototipos similares a Smalltalk es lo que hace que Citrine sea único.

Desde la versión 0.7, Citrine se ha centrado en utilizar formularios basados ​​en varios lenguajes naturales en lugar de solo inglés, lo que mejora la usabilidad para los usuarios de otros idiomas y reduce así el esfuerzo de programación y la incidencia de errores. Por ello, Citrine 0.7 y versiones posteriores incluyen una función para transformar código entre lenguajes naturales.

Sintaxis

Citrine tiene una sintaxis muy limitada, muy relacionada con Smalltalk. Todo en Citrine es un objeto . Hay 5 literales:

El bloque de código literal utiliza un símbolo de barra vertical ⟨|⟩ para separar los parámetros de la lógica; si no hay parámetros, se debe utilizar la barra invertida en su lugar.

Citrine solo admite comentarios de línea completa, que comienzan con ⟨#⟩.

Un programa Citrine es básicamente una secuencia de mensajes enviados a objetos. Por ejemplo, para determinar si 5 es un número par, se envía el mensaje '¿par?' al número 5.

5  incluso?

Esto se denomina mensaje unario , porque no acepta argumentos. Un mensaje binario siempre es un único carácter UTF-8; esto difiere de Smalltalk, donde hay un conjunto fijo de mensajes binarios. A continuación se muestra un ejemplo:

6  +  7 .

Aquí se envía un mensaje binario '+' al número 6, con el argumento del mensaje binario '7'. Esto da como resultado el nuevo objeto numérico '13'. Para asignar el resultado de esta operación a una variable se utiliza el operador de asignación: :=.

total  :=  dinero  +  deuda .

Además, cada línea de un programa de Citrine termina con un punto, al igual que en Smalltalk. Junto con los mensajes unarios y binarios, Citrine ofrece mensajes de palabras clave , que toman argumentos intercalados con el mensaje en sí, al igual que Smalltalk y Objective-C .

 x  :=  Número  entre:  1  y:  5 .

El fragmento de código anterior devolverá un objeto booleano True .

Flujo de control

Al igual que Smalltalk, el flujo de control en Citrine se implementa mediante el uso estratégico de mensajes. Por ejemplo, escribir una declaración condicional requiere enviar un bloque de código a un booleano.

( dinero  >  precio ) verdadero: {  escribir:  'Sí, puedes pagar esto' . }.

Del mismo modo, un bucle for se escribe como:

{ : paso   escribir:  'este es el paso:'  +  paso . } ×  10 .

Para salir de un bucle en Citrine, se debe enviar el mensaje 'break' a un booleano. Esto permite una interrupción condicional de un bucle sin tener que factorizar las condiciones de interrupción:

{ : i ( i  =  3 ) break .   escribir:  i .} *  5 .

Tuberías

A diferencia de Smalltalk, Citrine no tiene punto y coma para enviar un mensaje al receptor original. En su lugar, Citrine tiene un token de coma ',' que se utiliza para encadenar mensajes de palabras clave, lo que permite escribir pipelines similares a Unix . El siguiente código utiliza una sintaxis similar a pipeline para reemplazar todos los caracteres 'o' con ceros, la cadena resultante sería algo como: '1010101...'.

onesAndZeroes  :=  '1o1o1o1o1o1'  división:  'o' ,  mapa:  mapUp ,  unión:  '0' .

Prototipos

La mayor diferencia con Smalltalk es el uso de prototipos. Citrine no tiene un concepto de clase, sino que solo conoce objetos. Un objeto se crea utilizando el nuevo mensaje:

gato  :=  Objeto  nuevo .

Se puede hacer que este objeto responda a mensajes ordenándole que escuche eventos, de forma similar a agregar métodos en lenguajes como Java :

gato  en:  'miau'  hacer: { Pluma  escribir:  '¡miau!' .}.

Como se indicó anteriormente, la herencia se basa en prototipos. Para derivar un objeto de otro objeto, el nuevo mensaje debe enviarse al objeto que se va a extender:

 Animal  :=  Objeto  nuevo . Animal  en:  'makeSound'  hacer: {  escribir:  '?' .}. Gato  :=  Animal  nuevo . Gato  en:  'makeSound'  hacer: {  escribir:  '¡miau!' .}. Tom  :=  Gato  nuevo . Tom  hace Sonido .

Unicode

Citrine utiliza ampliamente el código Unicode UTF-8, tanto los objetos como los mensajes pueden estar compuestos por símbolos Unicode. La longitud de todas las cadenas se calcula utilizando UTF-8. Citrine distingue la longitud y el tamaño de las cadenas en bytes:

 longitud del 'texto' .

devuelve la longitud de la cadena en puntos de código UTF-8, mientras que:

 bytes de 'texto' .

devuelve el número de bytes.

Alcance

Citrine utiliza un alcance dinámico en lugar de un alcance léxico . Por lo tanto, no hay necesidad de inyección de dependencias ni de variables globales, pero puede resultar más difícil razonar al respecto que con el alcance léxico. Esto es similar en lenguajes de programación como Emacs Lisp y BASIC . En los bloques de código, se debe utilizar la palabra clave var para declarar una variable local.

La siguiente demostración hace que el objeto Mailer esté disponible en el módulo:

Aplicación  := {  mailer  :=  Mailer  nuevo .  módulo  ejecutar .}.

Véase también

Referencias

Enlaces externos