Open2b versione 7.5

Operatori

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.

Operatori di base

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 == != ! && ||

And, or e not

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 %}

"vero" o "falso"

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.

Contains

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.

Esempi

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