Per continuare a scrivere del codice di Pinescript dobbiamo passare obbligatoriamente per la comprensione dell’indentazione del codice. Questa necessità nasce dal fatto che il codice, per essere leggibile, non è possibile farlo stare in una sola riga, ma abbiamo la necessità di “spezzarlo” in più linee, tuttavia senza che il linguaggio macchina non si guasti durante la compilazione.
Per funzionare richiede delle convenzioni di base che governano l’indentazione. Che altro non è che una sequenza di 4 spazi oppure uno spazio tabulato (tasto tab sulla tastiera). Questa sequenza o tab, possono essere messe in serie, ovvero ripetersi più volte creando di fatto il “livello” di rientro, disegnando come delle “colonne immaginarie”.
Passiamo al pratico che è più semplice da spiegare, prendiamo questo semplice listato di codice:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tosolini
//@version=4
study("Il mio Script")
a = open + high + low + close
se guardiamo l’ultima riga abbiamo la dichiarazione di una variabile, chiamata “a”, che contiene alcuni comandi, se li vogliamo indentare dovremo scrivere il codice così:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tosolini
//@version=4
study("Il mio Script")
a = open +
high +
low +
close
come si può notare la variabile di fatto è sempre la stessa, ma abbiamo separato in più righe i comandi, il primo “high” è di fatto sul primo “livello” con 1 tab, low ne ha due, close ne ha tre. Questo esempio si può intuire visivamente i tre livelli di indentazione, che formano appunto una sorta di gerarchia visiva con i rientri.
Per funzionare l’indentazione deve comprendere apertura e chiusura di un oggetto, cioè non possiamo metterle a casaccio. Ad esempio vediamo un codice più strutturato, come una funzione, di cui non ha importanza in questo momento comprenderne il contenuto.
updown(s) =>
isEqual = s == s[1]
isGrowing = s > s[1]
ud = isEqual ?
0 :
isGrowing ?
(nz(ud[1]) <= 0 ?
1 :
nz(ud[1])+1) :
nz(ud[1]) >= 0 ?
-1 :
nz(ud[1])-1)
in questo caso il codice si propone con una serie di indentazioni multiple, ma la prima di fatto apre la chiamata iniziale (infatti al suo livello compare solo updown), contenendo le successive che sono nidificate in sotto-livelli poiché sono relative alle sotto funzioni. Ad esempio la variabile “ud” è un livello, e quelli successivi contengono altri sotto-livellli.
E’ importante ricordare che durante l’indentazione, a dispetto di moltissimi altri linguaggi di programmazione, non possiamo usare commenti. Quelli li dovremo obbligatoriamente inserire prima di una funzione, dichiarazione di una variabile eccetera.