Dichiarare variabili: var e let

Sia var sia let servono a dichiarare una variabile. A differenza di JavaScript, in Ninox non c'è alcuna differenza di ambito di visibilità tra let e var.

Il tipo della variabile dipende dal tipo di valore che le viene assegnato:

Ninox
var t := "my text";
var b := false;
var n := 10;

Una variabile può essere dichiarata più volte nello stesso codice. In tal caso conserva il tipo e il valore assegnati fino a quando non si raggiunge la nuova dichiarazione:

Ninox
var b := true;
dialog("Message 1", "Value of b: " + b, ["ok"]);
var b := 12;
dialog("Message 2", "Value of b: " + b, ["ok"]);

Confusione tra nomi di variabile e ID di tabelle o campi

Ninox salva il codice in un formato leggermente diverso da quello mostrato a schermo: i nomi dei campi e delle tabelle sono sostituiti dai loro ID, che sono delle lettere.

Per esempio, lo script seguente, che calcola la somma degli articoli venduti:

Ninox
sum('Invoice Items'.Total)

sarà salvato nel codice di sistema così, dove D è l'ID della tabella 'Invoice Items' ed E è l'ID del campo Total:

Ninox
sum(D.E)

In questo contesto, se viene creata una variabile D, il compilatore può confondersi: nel codice di sistema seguente non sarebbe chiaro se D.E si riferisca a una tabella o alla variabile D dichiarata prima:

Ninox
(var D := "hello"; sum(D.E))

Per evitare questa confusione, alle variabili conviene dare nomi che difficilmente coincidano con ID o nomi di tabelle e campi. È per questo che le variabili prendono spesso nomi brevi e minuscoli (per esempio a, b o c), così da non essere confuse con gli ID.

Chi prevale: la variabile, senza alcun messaggio

Ninox non segnala nulla: una volta salvato il codice, è la variabile a prevalere sul campo che ha lo stesso ID. Esempio, in un database in cui il campo Number della tabella Sessions ha l'ID B:

Ninox
var B := 5;
cnt(select Sessions[Number = 1])

Questo codice viene salvato nella forma (var B := 5; cnt(select A[B = 1])). Riletto, il filtro non confronta più il campo Number con 1, ma la variabile B: il risultato è 0, senza alcun errore. Con [Number = 5] conterebbe tutti i record; un ordinamento order by Number non seguirebbe più i numeri. (Misurato tramite l'API, su una tabella di 48 record.)

La trappola compare solo dopo il salvataggio: una prova del testo così come appare, con i nomi dei campi (per esempio una query inviata tramite l'API), viene compilata e dà il risultato giusto. Nel codice riletto dopo il salvataggio, l'ID B resta scritto in chiaro là dove c'era il nome del campo: è il segno della confusione (constatato nel codice scaricato dallo strumento a riga di comando di Ninox; non verificato nell'editor di codice).

La regola più semplice: mai un nome di variabile o di parametro fatto di una o due lettere maiuscole (B, KD, A1). Meglio nomi minuscoli che dicano cosa contengono (firstDay, total).