Manipular tipos

Manipular tipos

> Tutorial de LeekScript

Este artículo se basa en el conocimiento de Les_Expressions, Les_Variables y Les_Functions. Solo pretende ofrecer una herramienta más para la resolución de problemas. Debido al hecho de que leekscript no tiene herramientas de anotación nativas (como la mayoría de los lenguajes de escritura dinámica), cada persona tenderá a tener su propia sintaxis.

Objeto y Tipo

Como recordatorio, los objetos son simplemente algo que puede ser manipulado por el lenguaje, podemos asignarlos a variables, pasarlos como argumentos, devolverlos a funciones y usarlos en expresiones. En leekscript tenemos acceso a los siguientes objetos básicos:

Como podéis ver, estos objetos han sido recopilados de una forma no despreciable. Cada objeto forma parte de una familia, a la que llamaremos tipo.

Calificación

Tipos de hormigón

Cada objeto tiene por tanto un tipo, y para poder razonar con él necesitaremos una forma de escribirlos. Usaremos en el marco de este artículo la siguiente notación: object: Type, el nombre del tipo que comienza con una letra mayúscula. Eres libre de usar otro sistema de puntuación. Aquí está la lista de los tipos más básicos, junto con algunos valores posibles:

nulo: nulo verdadero, falso: Bool 1, -273: Int 1.0, 2.34: Flotante "a", "abc": Cadena

Los nombres usados aquí son arbitrarios. Esta no es una convención utilizada por la comunidad Leek Wars. También es posible agrupar los objetos incluidos en Int y Float en la misma categoría Num porque es muy raro tener que hacer la distinción cuando los manejamos.

Tenga cuidado, Leekscript no admite la anotación de tipo, solo tendrá que comentarlos si desea realizar un seguimiento de ellos.

// tipo de objeto objeto; objeto; // : Amable

Tipos de variables

Esta notación se utiliza para poder representar la posibilidad de que un objeto tenga cualquier tipo. Se anota de la misma forma, pero con una letra minúscula al principio del nombre. objeto: a, aquí no sabemos qué tipo de objeto es. Puede ser cualquier cosa. Si definimos otherObject: b, tampoco sabemos cuál es su tipo, incluso puede ser del mismo tipo que object. Sin embargo, si configuramos sameObject: a, obtenemos un poco más de información. Todavía no sabemos cuál es el tipo exacto de sameObject, pero sabemos que es lo mismo que object. Por ejemplo, si object: Num entonces sameObject también es de tipo Num. otherObject podría ser de tipo Num, pero también podría ser de tipo String o Bool, etc.

Tipos parametrizados

Estos son tipos un poco más complejos. Debe haberse preguntado por qué las matrices y las funciones no se presentaron antes. Podemos decir, en cierto modo, que contienen otros tipos. Por ejemplo, [1] contiene Num, function(x) { return "" + x; } toma cualquier cosa (a) y lo devuelve como una cadena (String).

Para anotar estos Tipos, usamos un tipo concreto, seguido de otros tipos concretos o variables. Por ejemplo, para una matriz de números, podemos anotarla así: array: Array Num, y para una matriz de cadenas: array: Array String . La función que tomó cualquier objeto y devolvió su representación como una cadena se puede anotar: toString: Function a String. Por lo tanto, es posible tener varios tipos como argumentos. Otro ejemplo son las matrices asociativas. Por ejemplo, una matriz asociativa que indica si las celdas están fuera de la vista de un adversario se puede anotar: safeCells: Assoc Cell Bool.

En el futuro, cuando escribamos matrices o funciones, usaremos una sintaxis más ligera:

matriz: [Número] aCadena: a->Cadena celdas seguras: {Celda: Bool}

En el caso de funciones que no toman argumento, usaremos (). Es posible usarlo en principio en la devolución de funciones, pero cualquier función que no devuelve nada, implícitamente devuelve null en Leekscript. Por ejemplo, rand: () -> Float, say: String -> () o say