In questa pagina è documentata l'istruzione switch
e le altre forme dell'istruzione for
.
L'istruzione switch
può essere usata in alternativa all'istruzione if
quando la condizione non è semplicemente vera o falsa. Questa istruzione esegue una parte di codice in base al valore della condizione:
{% switch department.Name %}
{% case "Tappeti" %}
Tappeti e tappetini in offerta per la casa
{% case "Cuscini", "Federe" %}
Offerte per la camera da letto
{% default %}
Offerte varie
{% end %}
Offerte per la camera da letto
I valori di ogni case
devono avere lo stesso tipo della condizione.
I vari case
sono valutati in ordine ed è eseguito solo il codice del primo che ha il valore uguale a quello della condizione. Se nessun case
ha questo valore ed è presente default
allora viene eseguito il codice di default
.
La condizione può non essere presente, in questo caso i valori di ogni case
dovranno essere espressioni booleane:
{% switch %}
{% case stock > 10 %}
Disponibile
{% case name == "Cuscini" %}
Offerte per la camera da letto
{% default %}
Offerte varie
{% end %}
Offerte per la camera da letto
L'istruzione for
esegue ripetutamente il codice al suo interno. Ci sono ben cinque forme di for
, ma per la maggior parte degli usi in un template può bastare conoscere anche solo for in
descritta a parte. Quelle documentate in seguito sono le altre forme di for
.
La forma for range
è simile a for in
ma consente di assegnare anche l'indice dell'elemento, a partire da zero:
{% for i, product := range products %}
<div>{{ i+1 }}. {{ product.Name }}</div>
{% end %}
Per far in modo che i valori dell'indice e dell'elemento dello slice siano assegnati a due variabili precedentemente dichiarate, al posto di :=
si può usare =
, come in questo esempio:
{% var i int %}
{% var product Product %}
{% for i, product = range products %}
<div>{{ i+1 }}. {{ product.Name }}</div>
{% end %}
Ci sono {% i %} prodotti e l'ultimo si chiama {{ product.Name }}
Se una delle due variabili non è usata si può usare _
al suo posto:
{% for _, product = range products %}
<div>{{ i+1 }}</div>
{% end %}
Se è usato solo l'indice allora si può scrivere:
{% for i := range products %}
<div>{{ i+1 }}</div>
{% end %}
Se invece è nessuna delle due variabili ad essere usata, si possono omettere entrambe:
{% for range products %}
<div></div>
{% end %}
L'istruzione for
può essere usata assieme ad una condizione. In questo caso il codice nel for
viene eseguito fintanto che la condizione è vera.
{% for i < len(products) %}
<div>{{ i+1 }}. {{ products[i].Name }}</div>
{% i++ %}
{% end %}
La condizione dell'istruzione {% for condizione %}
può avere un qualsiasi tipo. Questa è differente dalla condizione dell'istruzione for
del linguaggio Go che può essere solo booleana.
L'istruzione for
da sola senza condizioni esegue il codice al suo interno fintanto che non viene interrotta con una istruzione break
.
{% for %}
{% var v = value() %}
{% if not v %}{% break %}{% end %}
{% end %}
La forma for init; condizione; post
è composta da tre parti separate da un punto e virgola ;
. La prima parte serve per dichiarare o assegnare una variabile prima di iniziare la prima iterazione, la parte centrale è la condizione e la parte finale serve ad incrementare una variabile, o in generale ad assegnarle un nuovo valore, prima di eseguire ogni iterazione successiva alla prima.
L'iterazione prosegue fintanto che la condizione è verà.
{% for i := 0; i < len(products); i++ %}
<div>{{ i+1 }}. {{ products[i].Name }}</div>
{% end %}
La condizione dell'istruzione {% for init; condizione; post %}
può avere un qualsiasi tipo. Questa è differente dalla condizione dell'istruzione for
del linguaggio Go che può essere solo booleana.
L'istruzione continue
si usa in una istruzione for
per interrompere l'iterazione corrente e riprendere l'esecuzione con la successiva.
Ad esempio il seguente codice mostra solo i prodotti in products
che hanno un prezzo:
{% for product in products %}
{% if not product.Price %}
{% continue %}
{% end if %}
<div>{{ product.Name }}</div>
{% end %}
Lo stesso si sarebbe potuto fare senza usare continue
, ma usando continue
a volte il codice risulta più semplice e leggibile.
L'istruzione break
si usa in una istruzione for
per interromperne definitivamente l'esecuzione.
Ad esempio il seguente codice visualizza 1 2 3
:
{% for n in []int{1, 2, 3, 4, 5} %}
{% if n > 3 %}
{% break %}
{% end if %}
{{ n }}
{% end %}