Gli operatori di confronto in Julia sono simili a quelli di molti altri linguaggi, anche se con qualche opzione in più per gli amanti della matematica.
Per l'uguaglianza, gli operatori sono == (uguale) e != o ≠ (diverso).
txt = "abc"
txt == "abc" # true
txt != "abc" # false
txt ≠ "abc" # false (synonym for !=)
Inoltre, ci sono i vari operatori di maggiore/minore.
1 < 3 # true
3 > 3 # false
3 <= 3 # true
3 ≤ 3 # true (synonym for <=)
4 >= 3 # true
4 ≥ 3 # true (synonym for >=)
Come spesso accade con Julia, un editor adatto rende facile usare i simboli matematici.
Digita \ne, \le o \ge e poi TAB per ottenere ≠, ≤ o ≥.
L'esempio precedente usa solo numeri, ma vedremo in altre parti del percorso che vari altri tipi hanno un senso di ordinamento e possono essere confrontati con gli operatori di maggiore o minore.
Gli operatori di confronto si possono concatenare, il che permette una sintassi chiara e concisa:
n = 3
1 ≤ n ≤ 5 # true (n "between" two limits)
L'esempio precedente è un sinonimo di 1 ≤ n && n ≤ 5.
if
Questa è la forma completa di un'istruzione if:
if conditional1
statements...
elseif conditional2
statements...
else
statements...
end
Non c'è bisogno di parentesi tonde (()) né di parentesi graffe ({}), e l'indentazione serve «solo» a migliorare la leggibilità (ma la leggibilità è molto importante!).
Sia elseif che else sono opzionali, e possono esserci più blocchi elseif.
Tuttavia, l'end è obbligatorio.
È possibile annidare istruzioni if, anche se per aiutare la leggibilità conviene usare con cura parentesi, rientri e commenti.
La forma più breve di un'istruzione if è qualcosa del genere:
if n < 0
n = 0
end
Come promemoria: solo le espressioni che danno come risultato true o false possono essere usate come condizioni.
Julia evita deliberatamente qualsiasi concetto di «truthiness», quindi i valori zero, le stringhe vuote e gli array vuoti non sono equivalenti a false.
Una situazione semplice e comune è scegliere uno tra due valori in base a una condizione.
Julia, come molti linguaggi, ha un operatore ternario che rende tutto più conciso.
La sintassi è conditional ? value_if_true : value_if_false.
Quindi l'esempio precedente si può riscrivere così:
n = n < 0 ? 0 : n
Le parentesi non sono richieste dal compilatore, ma possono migliorare la leggibilità.
match?Al momento non esiste alcuna struttura match/case nel linguaggio di base.
Per i casi semplici, si consiglia di usare if..elseif..else.
Per il pattern matching sofisticato, simile a quello di Scala, il pacchetto Match.jl è molto usato.
Tuttavia, come la maggior parte dei pacchetti di terze parti, Match non è disponibile nel test runner di Exercism.