====== Festlegungen / Wichtige Informationen ====== Bevor wir uns aufmachen können und Haskell lernen, gibt es einige Informationen, die man als Haskell-Programmierer im Hinterkopf halten sollte. ===== Kommentare ===== Kommentare sollen den Quellcode erklären und helfen ihn auch in einem halben Jahr wieder zu verstehen. Bei Haskell ist es, wenn man C gewohnt ist, schwieriger später lesbaren Quellcode zu schreiben. Die Denkweise, die man in Haskell braucht unterscheidet sich einfach zu sehr von der C-Denkweise. Daher ist kommentieren der Funktionen (und evtl.) Parameter unbedingt notwendig. Kommentarzeilen können mit zwei Minuszeichen begonnen werden: -- Dies ist ein Kommentar -- Der nachfolgende Quellcode tut ganz wichtige Sachen: antwort :: Int antwort = 42 ===== Datentypen- und Funktionsnamen ===== Namen von eigenen Funktionen und Variablen müssen grundsätzlich klein begonnen werden, wohingegen Datentypennamen (bspw. Int, mehr dazu im Kapitel [[type|Datentypen]]) grundsätzlich groß beginnen - das gilt auch für eigens definierte Datentypen. ===== Variablen ===== Variablen in Funktionen sind grundsätzlich **nicht** veränderlich! Haskell basiert nicht auf der Veränderung von Speicherzellen (repräsentiert durch Variablen), sondern es wird vielmehr eine mathematische Definition geliefert, anhand der sich der Compiler den Ablauf des auszuführenden Programms herleiten kann. Variablen repräsentieren einen Wert, stellen aber keine Speicherzelle dar, und können in einem Funktionsruf nicht verändert werden. Will man im Quellcode einen Wert mehrfach verwenden, so kann der Wert mit einem Variablennamen versehen werden, sodass der Wert nur an einer Stelle im Code geändert werden muss. Bspw. addiert diese Funktion einen übergebenen Wert mit 42: add :: Int -> Int add b = let a = 42 in a + b Alternativ gibt es noch die Variante mit ''where'': add :: Int -> Int add b = a + b where a = 42 Über das Schlüsselwort ''where'' lassen sich auch Funktionen definieren, wohingegen ''let'' nur Variablennamen an Werte binden kann. ===== Schleifen ===== Schleifen gibt es nicht - wie auch, wenn die Variablen nicht verändert werden können? Soll Code mehrfach ausgeführt werden, muss die Funktion mehrfach ausgeführt werden. Dabei ist zu beachten, dass Funktionen immer das gleiche Ergebnis liefern auf die gleiche Eingabe. Es ist zu beachten, dass die Rekursion immer ein Ende finden muss. Mehr dazu im Kapitel [[recursion|Rekursion]]. ===== Einrückung ===== Schauen wir uns obiges Beispiel an: add :: Int -> Int add b = let a = 42 in a + b Zu Beachten ist, dass die eigentlichen Funktionsanweisungen eingerückt sind. Haskell nutzt die Einrückungstiefe von Code dazu um die Zugehörigkeit des Codes festzulegen. Behalten Sie das im Hinterkopf, wenn Sie mit ''if-then-else'' das Ergebnis einer Funktion auswählen. Mehr zu ''if-then-else'' im Kapitel [[pure_function|Pure Funktionen definieren]].