Im Workshop kam der Editor Nano zum Bearbeiten der Dateien zum Einsatz. Das Syntax-Highlighting richten Sie ein, indem Sie die online verfügbare Datei julia.nanorc [3] ins Verzeichnis ~/.nanorc kopieren (Abbildung 2).

Abbildung 2: Nach der Integration der Datei julia.nanorc zeigt Nano eine entsprechende Datei mit farbiger Syntax an.
Mittels der Funktion include("code.jl") binden Sie Codedateien in andere Files ein oder führen sie im interaktiven Modus aus. Das Verarbeiten von Argumenten auf der Kommandozeile sieht Julia dabei nicht vor. Beim Ausführen per include() im interaktiven Modus gibt der Interpreter das Ergebnis des letzten Ausdrucks im Terminal aus. Die in der eingebundenen Datei getroffenen Definitionen hält er aber im Speicher.
Kontrollstrukturen
Listing 10 zeigt weitere Beispiele für die Anwendung von For-Schleifen. Die erste gibt die Zahlen von 1 bis 3 aus, die zweite läuft von 0 bis 30 in Zehnerschritten, die dritte geht in Viertelschritten von 0 nach 1.
Listing 10
for i in 1:3 println(i) end for i in 0:10:30 println(i) end for f in 0:0.25:1 println(f) end
Der Typ Bool speichert Wahrheitswerte, die Literale schreiben sich true und false. Es gelten die üblichen Operatoren für Logik und Vergleich. Allerdings sind im Unterschied etwa zu Python, Ruby oder C lediglich boolesche Ausdrücke wahrheitsfähig. if 10 ... oder Ähnliches erzeugt also eine Fehlermeldung. Listing 11 zeigt die Anwendung boolescher Ausdrücke in einer If-Konstruktion.
Listing 11
for i in -3:3
if i < 2
println(i, " ist kleiner 2!")
elseif i > 2
println(i, " ist größer 2!")
else
println(i, " ist gleich 2!")
end
end
Listing 12 demonstriert eine While-Schleife in Aktion. In Zeile 3 sehen Sie auch, wie Julia Nutzereingaben mit readline() abfragt. Da die Eingabe zunächst als String vorliegt, erfordert die weitere Verarbeitung das Umwandeln in eine ganze Zahl.
Listing 12
while true
println("Bitte gib eine Zahl ein, die durch 7 teilbar ist!")
x = readline()
if tryparse(Int32, x) == nothing
println("Das war keine Zahl!")
continue
end
x = parse(Int32, x)
if mod(x,7) == 0
println(x, " ist durch 7 teilbar!")
break
end
end
Ob das mit dem jeweiligen String überhaupt funktioniert, prüft das Skript mittels der Funktion tryparse() in Zeile 4. Falls nicht, gibt es eine Warnung aus und führt mit continue den aktuellen Durchgang fort. Ist die Eingabe vom Typ Int32, schreibt die Funktion parse() in Zeile 8 den Wert in die Variable x. Zeile 9 prüft, ob es möglich ist, den Wert ohne Rest durch 7 zu teilen. Gelingt das, sorgt break für das Verlassen der While-Schleife und damit für das Ende des Programms.
Funktionen definieren
Julia bietet drei verschiedene Möglichkeiten, um Funktionen zu definieren. Listing 13 demonstriert diese drei Schreibweisen für eine identisch arbeitende Funktion, die das Argument x mit 3 multiplizieren soll. Die erste Variante bietet sich an, wenn der Funktionskörper nur aus einer Zeile besteht. Sie macht sehr knappen und gut lesbaren Code möglich. Die zweite empfiehlt sich bei mehrzeiligen Funktionskörpern. Auf den Nutzen der dritten, anonymen Variante kommen wir später zurück.
Listing 13
f1(x) = x*3 function f2(x) x*3 end f3 = x -> 3*x println(f1(3)) #> 9 println(f2(7)) #> 21 println(f3(9)) #> 27
Für Funktionen gilt: Das Ergebnis des zuletzt ausgewerteten Ausdrucks entspricht dem Rückgabewert der Funktion; das Schlüsselwort return ist optional. In manchen Situationen hilft es, explizit aus der Funktion herauszuspringen. Für Funktionen, die nichts zurückliefern sollen, schreiben Sie return nothing.
Typisierung von Funktionen
Optional gestattet Julia das Typisieren von Funktionen. Die Variante aus Listing 14 akzeptiert lediglich Argumente vom Typ Int32; einen Funktionsaufruf mit einer Fließkommazahl als Argument quittiert Julia dann mit einer Fehlermeldung. Diese weicht in einer aktuellen Version von Julia von der gezeigten ab.





