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:
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:
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:
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:
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:
(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:
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).
