Scriggo mette a disposizione diversi operatori aritmetici, di comparazione e logici. Siccome Scriggo è fortemente tipizzato, ogni operatore può essere usato solo con alcuni tipi di dato e per gli operatori con due operandi, questi devono essere dello stesso tipo. Fanno eccezione i tre operatori logici and
, or
e not
per i quali gli operandi possono avere un qualsiasi tipo e l'operatore contains
che si può usare con determinati tipi.
Oltre a questi operatori è presente anche l'operatore render
per renderizzare un file partial.
I seguenti sono gli operatori di base di Scriggo:
== |
Ugualianza |
!= |
Disugualianza |
< |
Minore |
<= |
Minore o uguale |
> |
Maggiore |
>= |
Maggiore o uguale |
|| |
Or logico |
&& |
And logico |
! |
Negazione |
+ |
Somma e concatenazione |
- |
Sottrazione |
* |
Moltiplicazione |
/ |
Divisione |
% |
Modulo |
Esempio:
{% if stock > 10 %}
Disponibilità ampia
{% end %}
La seguente tabella indica quali operatori si possono usare con quali tipi di dato:
Tipo di dato | Operatori |
---|---|
Numerico | == != < <= > >= + - * / |
Intero | % |
Stringa | == != < <= > >= + |
Booleano | == != ! && || |
Scriggo consente di mettere in "and", "or" e "not" qualsiasi espressione di qualsiasi tipo tramite gli operatori and
, or
e not
. La loro valutazione ritorna true
o false
in base al valore di verità dei loro operandi.
Gli operatori and
, or
e not
non sono presenti nel linguaggio Go ma rendono delle semplici condizioni dell'istruzione if
più comprensibili ad un primo approccio al sistema di template di Scriggo.
Per un controllo più forte sui tipi usare invece gli operatori logici &&
, ||
e !
di Go in quanto i loro operandi possono essere solo booleani e se sono due devono avere lo stesso tipo booleano.
{% if promotion and stock %} offerta con disponibilità immediata {% end %}
{% if not price %} registati per vedere il prezzo {% end %}
Tutti i valori sono "veri" a parte i seguenti che sono "falsi".
Tipo di dato | Valore "falso" |
---|---|
bool |
false |
int |
0 |
float64 |
0.0 |
string |
"" |
[]string |
nil o vuoto |
Decimal |
decimal(0) |
Product |
Product{} |
Inoltre è "falso" qualsiasi valore su cui si può chiamare il metodo Zero
e il quale chiamato ritorna true
.
Gli operatori booleani contains
e not contains
indicano se uno slice contiene o non contiene un elemento, un map contiene o non contiene una chiave, una stringa contiene o non contiene una sottostringa o una runa. I due operatori hanno la seguente forma:
a contains b
a not contains b
Gli operatori contains
sono specifici di Scriggo e non sono presenti in Go.
Verifica se uno slice di strighe contiene una stringa:
{% var colors = []string{"red", "blue", "yellow", "green"} %}
{% if colors contains "yellow" %}
colors contiene "yellow"
{% end %}
colors contiene "yellow"
Verifica se una stringa contiene una sottostringa:
{% if product.Name contains "bundle" %}
il nome del prodotto contiene la parola "bundle"
{% end %}
Verifica se un map contiene una chiave:
{% var nameOf = map[int]string{1: "one", 4: "four", 7: "seven"} %}
{% if nameOf contains 7 %}
nameOf contiene la chiave 7
{% end %}
nameOf contiene la chiave 7