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