Declarar variables: var i let

Tant var com let es poden fer servir per declarar una variable. A diferència del que passa en JavaScript, a Ninox no hi ha cap diferència d'abast entre let i var.

El tipus de la variable depèn del tipus del valor que se li assigna:

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

Una variable es pot declarar diverses vegades dins d'un mateix codi. En aquests casos, la variable conservarà el tipus i el valor que se li han assignat fins que s'arribi a la declaració nova:

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

Confusió entre noms de variable i identificadors de taula o de camp

Ninox desa el codi en un format una mica diferent del que es mostra a la pantalla. Concretament, els noms dels camps i de les taules se substitueixen pels seus identificadors, que són lletres.

Per exemple, l'script següent, que calcula la suma dels articles venuts:

Ninox
sum('Invoice Items'.Total)

Es desarà al codi de sistema d'aquesta manera, on D és l'identificador de la taula 'Invoice Items' i E és l'identificador del camp Total:

Ninox
sum(D.E)

En aquest context, si es crea una variable D, pot confondre el compilador, ja que amb el codi de sistema següent no quedaria clar si D.E fa referència a una taula o a la variable D declarada abans:

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

Per evitar aquestes confusions, cal donar a les variables noms que difícilment coincideixin amb identificadors de taula o de camp, ni amb noms de taula o de camp. Per això sovint les variables reben noms curts en minúscula (per exemple, a, b o c), per evitar que es confonguin amb identificadors.

Qui guanya: la variable, sense cap missatge

Ninox no avisa de res: un cop desat el codi, la variable s'imposa al camp que té el mateix identificador. Exemple, en una base de dades on el camp Number de la taula Sessions té l'identificador B:

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

Aquest codi es desa amb la forma (var B := 5; cnt(select A[B = 1])). En rellegir-lo, el filtre ja no compara el camp Number amb 1, sinó la variable B: el resultat és 0, sense cap error. Amb [Number = 5] comptaria tots els registres; una ordenació order by Number ja no seguiria els números. (Mesurat mitjançant l'API, en una taula de 48 registres.)

El parany només apareix després de desar: una prova del text tal com es mostra, amb els noms dels camps (una consulta enviada mitjançant l'API, per exemple), compila i dona el resultat correcte. En el codi rellegit després de desar, l'identificador B continua escrit tal qual on hi havia el nom del camp: és el senyal de la confusió (constatat en el codi descarregat per l'eina de línia d'ordres de Ninox; no verificat a l'editor de codi).

La regla més senzilla: mai un nom de variable ni de paràmetre format per una o dues majúscules (B, KD, A1). Millor noms en minúscula que diguin què contenen (firstDay, total).