💾 Archived View for nc.k4p5.de › gemfeed › 2021-11-05-starting_with_nim.gmi captured on 2024-06-16 at 12:23:41. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-12-28)
-=-=-=-=-=-=-
Published at 2023-11-24T19:16:14+01:00
Date: 2021-11-05 10:48:00
Modified: 2021-11-05 10:48:00 Category: Programming Tags: nim, examples,
tutorial Slug: starting-with-nim Author: Reiko Kaps
Die Programmiersprache Nim besitzt eine leicht handhabbare Toolchain und
einen Sprachumfang, der sich etwa an Python orientiert. Beides hilft
nicht nur Programmieranfängern.
Anders als Urgesteine wie C haben jüngere Programmiersprachen wie Go
oder Rust bereits Tools an Bord, mit denen sich der geschriebene
Quellcode schnell und einfach in ausführbare Programme übersetzen
lässt oder mit dem sich Bibliotheken nachladen lassen. Das hilft
besonders Anfängern, die damit schnell zu Ergebnissen kommen.
Auch die Nim-Entwickler gehen diesen Weg - und selbst die Installation
geht dabei flott von der Hand: So lasst sich Nim unter Unix(64 Bit)
über den Befehl:
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
downloaden und installieren. Anschließend ergänzt man noch den
Suchpfad in .bashrc oder .zshrc und lädt diese Konfigurationen neu
(source ~/.bashrc). Unter Windows oder auf 32-Bit-Systemen muss man
für die Installation allerdings andere Wege beschreiten, die aber
dokumentiert sind. Anschließend schreibt man folgende Zeilen mit
seinem Lieblings-Editor in eine Datei (helloworld.nim):
echo "Hello, World!"
und ruft auf der Konsole den Befehl nim c helloworld.nim auf und erhält
im selben Verzeichnis ein ausführbares Programm gleichen Namens.
Hallo-Welt-Beispiele sind jedoch etwas schlicht, sodass ich hier gleich
ein längeres Beispiel folgen lasse. Es ist ein kleines Konsolenprogramm,
dass Textzeilen aus einer Datei einliest, per Zufall ein von diesen
Zeilen auswählt und ausgibt. Die Zeilen besitzen einen per Doppelpunkt
abgetrennten Prefix (de, en), sodass man zudem auch mehrsprachige Text
ausgeben kann.
Bibliotheken und eigene Module lädt Nim ähnlich Python über import. Nim
bringt bereits eine Reihe von
mit,
lädt man bequem mit dem
nach.
Variablen deklariert man jedoch etwas anders: Nach dem Schlüsselwort var
folgt der Name sowie der Variablentyp. Weist man anschließend mittels =
der Variable einen Wert zu, kann man den Variablentyp auch offenlassen,
da Nim ihn aus dem Variablenwert ermittelt.
Zeilen die mit einer Raute beginnen interpretiert Nim als Kommentar,
ganze Textblöcke lassen sich in Nim mit den beiden Zeichenfolgen #[**
und **]# auskommentieren.
Funktionen oder Prozeduren definiert man in Nim über das Schlüsselwort
proc.
Wichtige Dinge wie etwa eine Bibliothek um Kommandozeilen-Argumente
auszuwerten hat Nim (ähnlich wie Python) bereits an Bord. Die folgenden
Zeilen illustrieren deren Einsatz:
Nach dem Import der Standard-Bibliothek parseort lässt sich mit der
Funktion declared prüfen, ob überhaupt Kommandozeilen-Parameter
übergeben wurden: Ist das der Fall, wird der Parser eingerichtete und
die Parameter nacheinander ausgewertet. Anders als Python kann Nim
mittels case zwischen mehreren Fällen unterscheiden, was in diesem Falle
sehr günstig und übersichtlich ist.
Alle bisher gezeigten Code-Beispiele befassen sich hingegen nicht direkt
mit der obengenannten Hauptfunktion des Programms. Die folgenden 15
Zeilen sind dafür zuständig.
Während Zeile 1 die Datei “zitate.de.txt” einliest, zerlegt der folgende
Befehl den Text in einzelne Zeilen und speichert das Ergebnis im Array
lines.
Die beiden Befehle in den Zeilen 4 und 5 entstammen der Bibliothek
random: Während randomize() den Zufallsgenerator initialisiert, würfelt
shuffle(lines) die Elemente des Array durcheinander.
Die nachfolgende For-Schleife soll nun das erste Element im Array lines
ausgeben, dessen Prefix dem Wert von lang - also der eingestellen
Sprache entspricht. Dazu überprüft es den String line mittels startsWith
(stammt aus strutils), gibt ihn ggf. aus und setzt count auf 1 - was im
nächsten Durchlauf die Schleife abbricht.
Diese und andere Beispiele findet Ihr in
.