Open2b versione 7.5

Switch e gli altri for

In questa pagina è documentata l'istruzione switch e le altre forme dell'istruzione for.

switch

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

Altre forme di for

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.

for range

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

for condizione

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

Attenzione

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.

for loop

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

for init; condizione; post

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

Attenzione

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.

continue

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.

break

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