In dieser Facharbeit geht der Autor auf die wesentlichen Bestandteile der Programmiersprache Haskell ein und verdeutlicht diese kurz an Beispielen. Dabei zeigt er Ähnlichkeiten mit der Sprache Java auf und stellt beide Sprachen nochmals gezielt am Ende gegenüber.
Inhaltsverzeichnis
1. Haskell
1.1. Allgemeines
1.2. Programmieren in Haskell
1.2.1 Datentypen
1.2.2 Typ – Synonyme
1.2.3 Grundlagen der Funktion
1.2.4 Typklassen
1.2.5 Liste
1.2.6 Bytestring
1.2.7 Tupel
1.2.8 If – else, Guards und lokale Funktionen
1.2.9 Funktionen höherer Ordnung
1.2.10 Curry
1.2.11 Pattern Matching
1.2.12 Rekursion
1.2.12 Module
1.2.13 Ein- und Ausgabe
1.2.14 Exceptions
2. Allgemeines über Java
Zielsetzung & Themen
Die vorliegende Arbeit gibt einen einleitenden Überblick über die funktionale Programmiersprache Haskell, erläutert deren grundlegende syntaktische und strukturelle Konzepte an anschaulichen Beispielen und stellt diese anschließend der imperativen Sprache Java gegenüber, um die wesentlichen Unterschiede in der Programmierphilosophie herauszuarbeiten.
- Grundlagen funktionaler Programmierung und Lambda-Kalkül
- Typisierung, Datenstrukturen und Typklassen in Haskell
- Konzepte wie Lazy Evaluation, Pattern Matching und Rekursion
- Gegenüberstellung von Haskell und Java hinsichtlich Paradigmen und Laufzeitverhalten
Auszug aus dem Buch
1.1 Allgemeines
Haskell ist eine nach dem Mathematiker und Logiker "Haskell Brooks Curry" benannte rein funktionale Programmiersprache von 1990. Wie die meisten funktionalen Programmiersprachen basiert Haskell auf dem Lambda-Kalkül, weshalb das Lambda-Zeichen auch als Logo festgelegt wurde.[7] Anfangs sollte Miranda als Grundlage dienen, jedoch waren die Entwickler nicht gewillt, den Quellcode freizugeben[4]. Ein Haskell-Programm ist im Gegensatz zu imperativen Programmiersprachen eine einzige Kette von Ausdrücken, die nach der Auswertung einen Ergebniswert liefert. Es besteht also ausschließlich aus Funktionen. Nach dem Lambda-Kalkül können jegliche Ausdrücke durch „Reduktionen“ bis zu den elementaren Ausdrücken hin vereinfacht werden[4]. Ausdrücke sind jegliche Stücke von Code, die einen Wert zurückgeben. Außerdem ist Haskell stark statisch typisiert, was bedeutet, dass jedem Ausdruck genau ein Typ zugewiesen wird, welcher bereits beim Kompilieren bekannt ist. Dadurch werden mögliche Fehler übergangen. Dies kann auch durch „type interference“ - Haskell kann also selbst auf einen Typ schließen, sodass man diesen nicht selbst bestimmen muss. Da bei der Eingabe von gleichen Argumenten die Rückgabe immer gleich ist, hängt der Ergebniswert ausschließlich von den Parametern ab. Es gibt also keine Zustandsvariablen. Haskell hat unter anderem Python und Scala beeinflusst.
Zusammenfassung der Kapitel
1. Haskell: Dieses Kapitel erläutert die theoretischen Wurzeln der Sprache und führt detailliert in die Syntax, Datentypen, Funktionsweisen und spezifische Konzepte wie Lazy Evaluation und Monaden ein.
2. Allgemeines über Java: Dieses Kapitel gibt einen kurzen Überblick über die historische Herkunft und die imperativen, objektorientierten Grundprinzipien der Programmiersprache Java.
Schlüsselwörter
Haskell, Java, funktionale Programmierung, imperativ, Datentypen, Typklassen, Rekursion, Lazy Evaluation, Pattern Matching, Lambda-Kalkül, Compiler, Monade, Seiteneffekte, Polymorphismus, statische Typisierung
Häufig gestellte Fragen
Worum geht es in dieser Arbeit grundsätzlich?
Die Arbeit behandelt die Einführung in die funktionale Programmiersprache Haskell sowie deren vergleichende Gegenüberstellung zur imperativen Sprache Java.
Was sind die zentralen Themenfelder?
Zentrale Themen sind funktionale Konzepte wie Rekursion, Funktionen höherer Ordnung, Lazy Evaluation, algebraische Datentypen sowie die grundlegenden Paradigmenunterschiede zwischen funktionaler und objektorientierter Programmierung.
Was ist das primäre Ziel der Arbeit?
Das Ziel ist es, die wesentlichen Bestandteile von Haskell verständlich zu machen und die Vor- und Nachteile der Sprache im direkten Vergleich mit Java aufzuzeigen.
Welche wissenschaftliche Methode wird verwendet?
Es handelt sich um eine deskriptive und vergleichende Analyse, die auf Literaturrecherche und der praktischen Erläuterung von Code-Beispielen basiert.
Was wird im Hauptteil der Arbeit behandelt?
Der Hauptteil gliedert sich in eine detaillierte technische Einführung in die Features von Haskell (z.B. Datentypen, Module, Ein- und Ausgabe) und einen direkten tabellarischen Vergleich zwischen Haskell und Java.
Welche Schlüsselwörter charakterisieren die Arbeit?
Die Arbeit lässt sich durch Begriffe wie funktionale Programmierung, statische Typisierung, Lazy Evaluation und Compiler-Technologien beschreiben.
Warum spielt die Unterscheidung zwischen funktionalem und imperativem Programmierstil eine Rolle?
Die Unterscheidung ist zentral, da sie bestimmt, wie Zustände verwaltet werden, wie Fehler behandelt werden und wie ein Programm strukturiert ist (Ausdrücke vs. Anweisungsfolgen).
Was bedeutet "Lazy Evaluation" im Kontext von Haskell?
Lazy Evaluation bedeutet, dass Ausdrücke in Haskell nicht sofort berechnet werden, sondern erst dann, wenn ihr Ergebnis tatsächlich benötigt wird, was unter anderem unendliche Datenstrukturen ermöglicht.
Wie unterscheidet sich die Fehlerbehandlung in Haskell von Java?
Haskell verzichtet auf einen speziellen Exception-Syntax wie Java und nutzt stattdessen funktionale Typen wie "Maybe" oder "Either", um Fehlerzustände explizit in den Datenfluss zu integrieren.
Welche Rolle spielen Typklassen in Haskell?
Typklassen in Haskell definieren Schnittstellen für Typen, über die Funktionen polymorph auf verschiedene Datentypen angewendet werden können, ähnlich wie Interfaces in Java, jedoch mit einem anderen theoretischen Unterbau.
- Citar trabajo
- Malte Weiss (Autor), 2011, Haskell im anschließenden Vergleich mit Java, Múnich, GRIN Verlag, https://www.grin.com/document/173817