Referencia de sintaxis de rayos
Ray es en realidad el lenguaje de programación Noct con API Suika3 adicionales.
Asignaciones
Las variables en Noct se escriben dinámicamente y no requieren
declaración. El operador de asignación (=) se utiliza para crear y
asignar valores a las variables.
Como se muestra en el siguiente ejemplo, Noct admite varios tipos de datos incluidos números enteros, números de punto flotante y cadenas. Las variables pueden reasignarse a diferentes tipos en cualquier momento durante la ejecución.
func main() {
var a = 123;
print(a);
var b = 1.0;
print(b);
var c = "string";
print(c);
}
Variables globales
Las variables globales se pueden definir en funciones y no se pueden definir fuera de funciones.
func main() {
globalVariable = 123;
print(globalVariable);
}
Variables locales
El uso de la palabra clave var le permite declarar una variable como
locales. Sin la declaración var, la asignación a una variable crea una
variables globales.
func main() {
var a = 123;
print(a);
}
Matriz
Las matrices son colecciones ordenadas de valores, a las que se accede por índice. matrices
admite la iteración a través de la construcción del bucle for, lo que le permite
iterar a través de cada valor directamente.
func main() {
var array = [0, 1, 2];
for (value in array) {
print(value);
}
}
Las matrices pueden contener valores de diferentes tipos simultáneamente, lo que refleja El sistema de escritura dinámica.
func main() {
var array = [123, "string"];
}
El lenguaje proporciona una función incorporada push() para agregar elementos a
el final de una matriz. Además, pop() elimina el elemento final.
func main() {
var array = []
array->push(0);
array->push(1);
array->push(2);
var last = array->pop();
print("Length = " + array.length);
}
Diccionario
Los diccionarios almacenan pares clave-valor, similares a mapas hash u objetos en otros idiomas. Se definen mediante llaves con clave-valor. pares separados por dos puntos. Los diccionarios admiten la iteración donde ambos Se puede acceder a la clave y al valor simultáneamente.
func main() {
var dict = {key1: "value1", key2: "value2"};
for (key, value in dict) {
print("key = " + key);
print("value = " + value);
}
print("Length = " + dict.length);
}
Los diccionarios se pueden construir en un solo paso. una tarea
puede ser un estilo de matriz que usa [], o un estilo de objeto que usa
..
func main() {
var dict = {};
dict["key1"] = "value1";
dict.key2 = "value2";
}
La función incorporada remove() permite la eliminación de entradas por
clave.
func main() {
var dict = {key1: "value1", key2: "value2"};
remove(dict, "key1");
}
Bucle For
La construcción de bucle for proporciona una sintaxis concisa para iterar a través de secuencias como rangos, matrices y diccionarios.
La sintaxis de rango (usando el operador ..) crea un iterador que
genera valores desde el inicio hasta uno menos que el valor final.
func main() {
for (i in 0..10) {
print(i);
}
}
Los bucles For también pueden iterar directamente sobre matrices y otras colecciones. tipos.
Las matrices se pueden iterar mediante la sintaxis de valor.
func main() {
array = [0, 1, 2];
for (value in array) {
print(value);
}
}
Los diccionarios se pueden iterar mediante la sintaxis for-key-value.
func main() {
var dict = {key1: "value1", key2: "value2"};
for (key, value in dict) {
print(key + "=" + value);
}
}
Mientras bucles
El bucle while proporciona un mecanismo de iteración tradicional que continúa la ejecución mientras permanezca una condición específica cierto. A diferencia de los bucles for que están diseñados para iterar sobre colecciones, los bucles while son más flexibles y se pueden utilizar para implementar varios algoritmos donde el número de iteraciones no es conocido de antemano. El ejemplo muestra una implementación de contador básica. incrementando de 0 a 9.
func main() {
var i = 0;
while (i < 10) {
print(i);
i = i + 1;
}
}
Bloques If y Else
Los flujos de control permiten ejecuciones condicionales basadas en evaluaciones. expresiones. La construcción if-else sigue una sintaxis familiar donde Las condiciones se evalúan en secuencia.
func main() {
var a = readint();
if (a == 0) {
print("0");
} else if (a == 1) {
print("1");
} else {
print("other");
}
}
Funciones Lambda
Las funciones son objetos de primera clase en el lenguaje. anónimo
Las funciones, también conocidas como expresiones lambda, le permiten crear
funciones sin nombre.
func main() {
var f = (a, b) => { return a + b; }
print(f(1, 2));
}
Las funciones Lambda simplemente se traducen a funciones con nombre en el proceso de compilación. Por lo tanto, no pueden capturar variables declaradas. en funciones exteriores.
Incremento/Decremento (+=, -=, ++, --)
func main() {
var a = 123;
a += 321;
a++;
var b = 123;
b -= 321;
b--;
}
++ y -- solo se admiten como declaraciones independientes (a++;, b--;).
No se permite su uso dentro de expresiones para evitar efectos secundarios complejos.
POO en noviembre
El modelo orientado a objetos en Noct es una variación ligera de la programación orientada a objetos basada en prototipos.
- Las clases son simplemente plantillas de diccionario.
- La herencia y la creación de instancias se realizan mediante la fusión de diccionarios.
- No existe una cadena de prototipos y la modificación de una clase no afecta las instancias existentes.
Este diseño trata los diccionarios como objetos de primera clase y el autor se refiere a ellos como POO basada en diccionarios (D-OOP).
func main() {
// The base class definition. (A class is just a dictionary.)
Animal = class {
name: "Animal",
cry: (this) => {
}
};
// The subclass definition. (Just a dictionary merging.)
Cat = extend Animal {
name: "Cat",
voice: "meow",
cry: (this) => {
print(this.name + " cries like " + this.voice);
}
};
// Instantiation. (Just a dictionary merging.)
var myCat = new Cat {
voice: "neee"
};
// This-call uses -> () syntax. (Equal to myCat.cry(myCat))
myCat->cry();
}
Intrínsecos
int()
var i = int(1.23);
float()
var f = float(123);
newArray()
var array = newArray(10);
push()
var array = [1, 2, 3];
array->push(4);
pop()
var array = [1, 2, 3];
var last = array->pop();
resize()
var array = [1, 2, 3];
array->resize(2);
charCount()
var s = "ABC文あいう";
var l = s->charCount();
charAt()
var s = "ABC文あいう";
for (i in 0 .. s.length) {
var c = s->charAt(i);
print(c);
}
substring()
var s1 = "ABCDEFG";
var s2 = s1.substring(0, 3); // from the char 0, three characters
var s3 = s1.substring(2, -1); // from the char 1, to the end
}
unset()
var dic = {key1: "ABC"};
dic->unset("key1");
API de matemáticas
Matemáticas
abs()
var a = abs(x);
random()
var r = random(); // 0 .. 1.0
Math.sin()
var y = sin(x);
Math.cos()
var y = cos(x);
Math.tan()
var y = tan(x);