LeekScript 2

LeekScript 2

> LeekScript

LeekScript 2 (precedentemente LeekScript 1.1) è la seconda versione di LeekScript, il linguaggio di Leek Wars, rilasciato il 28 febbraio 2021. Ha lo scopo di ripulire il linguaggio, apportare correzioni e aggiungere oggetti di programmazione orientati.

Presentazione

Poiché vengono apportate profonde modifiche al modo in cui funziona il linguaggio, questa è una versione senza retrocompatibilità che viene attivata manualmente dall'utente nell'editor.

La versione 2 è un passo verso la futura versione annunciata nel 2016. Molte funzionalità pianificate sono quindi presenti nella versione 2, consentendo al linguaggio di avanzare gradualmente, queste funzionalità sono molto utili per la codifica di IA complesse.

Una pagina di aiuto dedicata alla migrazione è disponibile qui: LeekScript 1 to 2 Migration.

Nuovi arrivi

Programmazione orientata agli oggetti

Aggiunta programmazione orientata agli oggetti: classi e oggetti. Vedi la pagina Classes and Objects per tutta la documentazione su questa aggiunta.

Le parole chiave new, class, extends, static, public, protected, private, implements, interface, constructor, this , super e instanceof sono riservati per OOP e pertanto non sono più disponibili per nomi di variabili o funzioni.

Passa per riferimento

I valori non primitivi, ad esempio array e oggetti, vengono passati per riferimento per impostazione predefinita. I valori primitivi (numero, booleano, stringa) vengono sempre copiati.

La sintassi @ non è più utilizzata ed è quindi deprecata ovunque. Non è possibile in LeekScript 2 creare riferimenti a un valore primitivo.

Riferimenti nelle tabelle

Possibilità di aggiungere riferimenti in array (e oggetti), permettendo di creare strutture complesse e/o ricorsive a un costo ragionevole.

Esempi di strutture dati difficili da realizzare in 1 e molto facili in 2:

funzione clone()

Aggiunta una funzione clone(value, [level]) per clonare precisamente un valore:

Errori multipli

Diversi errori semantici restituiti nell'editor invece di uno solo (disponibile anche in LS 1).

![](/image/encyclopedia/multiple_errors_2.png)

![](/image/encyclopedia/multiple_errors_1.png)

Stack di chiamate completo

Lo stack di chiamate completo viene visualizzato sotto ogni errore, anziché solo una riga prima (disponibile anche in LS 1).

![](/image/encyclopedia/stacktrace.png)

Punto e virgola non richiesto

Ma è sempre possibile usarlo ovviamente. (disponibile anche in LS 1)

Limite della dimensione della RAM rimosso

Il limite della dimensione dell'array viene rimosso, il costo delle operazioni è sufficiente a limitarne l'uso.

Correzioni

arrayFilter

Corretto arrayFilter: l'array viene reindicizzato correttamente senza lasciare valori nulli.

Catena "\\\\"

Risolto il problema con l'escape della stringa "\\" che visualizza correttamente un singolo \ invece di due.

Dichiarazione di globali

Correzione delle dichiarazioni globali su più file.

Operatore ^=

Risolto il problema con l'operatore ^= che diventava l'OR binario invece della potenza.

Funzione casuale

La funzione shuffle tiene conto del generatore di numeri casuali collegato al seme di combattimento ed è quindi deterministica per il seme stesso. Potrebbe causare variazioni tra due lotte generate dallo stesso seme, il che influisce sui test.