Funktionale Programmiersprachen Gruppe Error 404 Matej Juric Michael















































































- Slides: 79
Funktionale Programmiersprachen Gruppe: Error 404 Matej Juric, Michael Berneburg, Ibrahim Akkin, Lennart Reinke, Alexej Geiger
Gliederung • Einleitung • Ursprung – Geschichte • Definition“ – Funktionale Programmiersprachen • Zuordnung von Programmiersprachen • Programmier – Paradigmen • Konzepte des funktionalen Programmierens • • Wo funktionale Programmierung zum Einsatz kommt Vergleich – Funktional & Objekt-Orientiert Vor- und Nachteile des funktionalen Programmierens Fazit
Funktionale Programmierung „Die Programmierung mit mathematischen Funktionen“
Ursprung & Geschichte
Ursprung & Geschichte • Entspringt Mathematischen Grundlagenforschung • Alonzo Church – 1930 er Jahre entwickelt Lambda-Kalkül • Regelwerk für die Definition von Funktionen und gebundener Parameter
Ursprung & Geschichte • John Mc. Carthy – 1958 erstellte erste bedeutende Software – Eval • ist ein LISP – Interpreter, der Semantik von LISP in fünf einfache Funktionen darstellt
„Definition“ – funktionale Programmiersprachen
Defninition Kann man Programmiersprachen überhaupt als rein Funktionale bezeichnen?
Definition • meiste Sprachen unterstützen mehrere Paradigmen • Wann kann man dann eine Sprache als rein funktional bezeichnen? • allg. Definition: wenn sie keine Nebeneffekte zulassen • Welche Sprachen sind demnach Reine? • z. B. Haskell oder Erlang • Welche Sprachen sind Hybride? • Javascript, Python, Lisp und Dialekte uvm.
Programmier Paradigmen
Paradigmen Das Imperative Paradigma
Paradigmen • Ältestes Programmierparadigma • Programm besteht aus Folge von Anweisungen • geben Reihenfolge der Bearbeitung an • Befehlsausführung durch Kontrollstrukturen • Schleifen, Sequenzen, Verzweigungen • Fokus auf dem „Wie? “ • Beispiele: Java, C, C++
Paradigmen Das Deklarative Paradigma
Paradigmen • Problembeschreibung im Vordergrund • Lösungsweg wird nicht gegeben -> automatisch ermittelt • Fokus auf dem „Was? “ • Beispiele: SQL, Linda, Prolog
Konzepte der funktionalen Programmierung
Konzepte Lazy Evaluation Closures Currying Funktionen höherer Ordnung Rekursion Charakteristiken funktionaler Programmierun g Immutability Pure Functions
Konzepte Funktionen höherer Ordnung
Konzepte • Engl. Higher Order Functions • Funktionen welche Funktion als Argument erwartet Das „Imutable“ • Funktion welche Funktion zurückgibt – Prinzip • Verknüpfung zum „First-class Citizen“ – Konzept: • Funktion kann überall stehen wo auch andere primitive Werte stehen • wie z. B. Zahlen oder Strings
Konzepte Reinheit – Pure Functions
Konzepte Das „Imutable“ – Prinzip • Seiteneffekte: Veränderung des Zustands der Maschine • Bsp. Werteneuzuweisung von Variablen
Konzepte Das „Immutable“ – Prinzip
Konzepte • Datenstruktur die nach ihrer Erstellung nicht mehr verändert werden kann • Warum ist das was Gutes? Das „Imutable“ – Prinzip • Benutzung erzeugt keine Nebeneffekte • sie sind immer Thread-Safe; sie verhindern NULL-Referenzen • generell einfacher zu erstellen, zu benutzen und testen • Nachteile? • es kann deutlich Perfomance-teurer werden • ein Array in dem ein Int verändert werden soll? - es muss ein neues Array mit den gleichen Werten bis auf den Veränderten erstellt und zurückgegeben werden
Konzepte Das „Imutable“ – Prinzip Beispiel dafür aus der Objekt Orientierten Programmierung? Strings
Konzepte Closures
Konzepte Closures A closure is the combination of a function and the lexical environment within which that function was declared. – MDN
Konzepte • Funktionen, die innerhalb einer umschließenden Funktion definiert werden • alles umschließende gehört zum Erstellungskontext Das „Imutable“ – Prinzip • Closures binden ihren Erstellungskontext an sich • können geschlossen hin und her gereicht werden • auf die Variablen im Erstellungskontext kann fortan nicht mehr zugegriffen werden
Konzepte Allgemeines Beispiel: Das „Imutable“ – Prinzip wofür ist das nützlich? für ähnliche Funktionen Closure dient als Hersteller
Konzepte Spezifisches Beispiel: Das „Imutable“ – Prinzip Achtung: Currying!
Konzepte Currying Beim currying wird eine Funktion, die mehrere Argumente annimmt in mehrere Funktionen, die jeweils ein Argument annehmen, verwandelt.
Konzepte Spezifisches Beispiel: Das „Imutable“ – Prinzip
Konzepte Lazy Evaluation
Konzepte • Gegenteil ist „strict Evaluation“ Beispi el: 5+3 „Sie ist eine gute Programmiererin!“ Das „Imutable“ – Prinzip • Nicht immer sinvoll • weniger effizient
Konzepte Beispi el:
Konzepte Beispi el:
Wo funktionale Programmiersprachen zum Einsatz kommen
Vergleich zwischen Funktional und Objektorientiert
Vergleich Aufbau und Eigenschaften
Eigenschaften • Objektbasiert: • Gibt Objekte vor zum Kapseln von Funktionen und Daten • Objektorientiert: • Erweitern das Objektbasierte um Vexerbung und Polymorphie • Funktional • Bestehen aus Abfolge von Funktionsaufrufen • Alle Elemente können als Funktionen aufgefasst werden
Eigenschaften OOP • Man sagt dem Programm wie etwas getan werden soll FP • Man sagt dem Programm was getan werden soll
Eigenschaften
Eigenschaften
Eigenschaften
Eigenschaften
Eigenschaften OOP • Ist Imperativ • If Anweisungen, While und For Schleifen • Anweisungen werden nacheinander abgearbeitet • Änderungen an Werten während der Laufzeit möglich FP • • Ist Deklarativ Rekursion statt Schleifen Auf eine Eingabe wird eine Ausgabe geliefert Pur functional, keine imperativen Eigenschaften
Eigenschaften OOP • Variablen sind Platzhalter für Referenzen • Alter Wert wird bei Neuzuweisung gelöscht • Lokale Variablen existieren nur in dem eigenen Scope • Typsicher • Primitive Typen: String, Interger • Referenz Typen: Lebewesen, Hund FP • Funktionen können als Parameter in anderen Funktionen verwendet werden • Funktionen sind ineinander verschachtelte Funktionsaufrufe • Nicht Typsicher • Typisierung findet dynamisch während der Laufzeit statt
Eigenschaften OOP • Klassen • Vererbung • Polymorphie • Kein direkter Zugriff auf das Innere einer Klasse • Schnittstellen werden angeboten FP • Lazy Evaluation • Closure • immutable • Anonyme Funktionen
Vergleich Code-Beispiele
Vergleich
Konzepte Beispiel in OOP (Java): Beispiel in FP (Python): Das „Imutable“ – Prinzip
Vergleich
Konzepte Beispiel in OOP (Java): Beispiel in FP (Python):
Konzepte Beispiel in OOP (Java): Beispiel in FP (Python): Das „Imutable“ – Prinzip
Vergleich Wofür wird, was gebraucht?
Vergleich Meist genutzten Programmiersprachen (Umfrage von Stackoverflow)
Vergleich Top 15 Programmiersprachen im Jahre 2018 und 2019
Vergleich „Programming Language of the Year“ - Gewinner
Anwendungsbereiche
Vergleich OOP • Mobile Anwendungen(i. OS, Android) • Web-Entwicklung – Frontend • Grafik/Raytracer • Datenbanksysteme FP • Simulationen • Web-Entwicklung Backend • Komplexe Mathematische Berechnungen • Artificial Intelligence • Compiler-Bau
Vor- und Nachteile von funktionaler Prgrammierung
Nachteile
Nachteile - Rekursion • Rekursion oft langsamer Das „Imutable“ – Prinzip • Unterprogramme kosten Zeit • meistens sind Lösungen als Schleifen weniger komplex und damit leichter verständlich
Nachteile - Immutability • Zustandsaktualisierung komplexer und speicherintensiver OOP (Java) Das „Imutable“ – Prinzip FP(Scala) • Zustandsveränderung realitätsnäher • Bsp. : Tür-Objekt mit boolean-Attribut (offen/geschlossen)
Zustände und Nebeneffekte Java Codebeispiel
Functions I/O (Daten, Datenbanken, Internet etc. ) • verstößt gegen eigenes Paradigma • im Außenkern stehen Funktion bereit, die dafür zuständig sind Das „Imutable“ – Prinzip Nebeneffekte sind auch nützlich • vereinfachen Lösungsansätze • näher an der Realität Vollständige Applikationen • einzelne Funktionen schreiben ist leicht – sie zu einem Gesamtkonstrukt zu kombinieren kann schwierig sein
Vorteile
Vorteile - Immutability Verständlichkeit • Code besser nachzuvollziehen, da zu jedem Zeitpunkt feststeht, in welchen Zustand sich Variablen befinden Das „Imutable“ – Prinzip Thread-safe • Synchronisierung ist kein Problem – Variablen immer den selben Zustand • einzelne Threads können Zustand nicht ändern
Vorteile – Pure Functions Memoisation • Input des Ergebnisses kann zwischengespeichert werden – bei erneutem Aufruf mit gleichem Input muss nur der Speicher gelesen werden Keine Nebeneffekte Das „Imutable“ – Prinzip • ändert keine Variablen oder Daten außerhalb der Funktion • nachvollziehbarer Code, leichter zu testen – schwerer Bugs einzubauen Aussagekräftige Signatur und oft wenig Zeilen • bessere Lesbarkeit und kürzerer Code Modularisierung • Funktionen in sich abgeschlossen und erfüllen immer eigene Aufgaben • Funktionen können dadurch nebenläufig abgearbeitet werden
Fazit
Fazit – Technischer Hintergrund
Fazit – Technischer Hintergrund
Fazit – Technischer Hintergrund
Fazit – Recap • Thread-safe durch Immutability • Nebenläufigkeit durch modulare Funktionen • Nebenläufigkeit „per Default“ – einfacher einzurichten – nicht so Das „Imutable“ – Prinzip komplex wie OOP • Software muss mit den größer werdenden Datenmengen und der technischen Entwicklung mitgehen – FP hilft dabei
Programmiersprachen der neue Standard? • Trend in Richtung funktionale Programmierung Das „Imutable“ – Prinzip– nicht funktionale Sprachen • Vermutung: Beliebtheits-Trends von Programmiersprachen bleiben ähnlichen, aber: • Stärkere Vermischung von OOP und FP
Quellen • https: //funktionale-programmierung. de/2013/08/23/was-ist-funktionale-programmierung. html • http: //www. cse. chalmers. se/~rjmh/Papers/whyfp. html • https: //docs. python. org/3. 1/howto/functional. html • http: //book. realworldhaskell. org/read/ • https: //www. heise. de/select/ix/2017/6/1495900368728612 • https: //softwareengineering. stackexchange. com/questions/25056/purest-functional-programming-languages • https: //en. wikipedia. org/wiki/Programming_languages_used_in_most_popular_websites • https: //www. quora. com/Is-LISP-a-pure-functional-language-Why • https: //wiki. haskell. org/Learn_Haskell_in_10_minutes • http: //www. gm. fh-koeln. de/ehses/paradigmen/folien/functional. pdf • https: //de. wikipedia. org/wiki/Closure_(Funktion) • https: //jug-saxony-day. org/wp-content/uploads/JSD 2018 -Mauky-Immutable-Data-mit-Java. pdf • https: //www. yegor 256. com/2014/06/09/objects-should-be-immutable. html • https: //hackernoon. com/how-immutable-data-structures-e-g-immutable-js-are-optimized-using-structural-sharing-e 4424 a 866 d 56 • https: //cs. stackexchange. com/questions/37558/does-immutability-in-functional-programming-really-exist
Quellen • http: //intern. fh-wedel. de/~si/seminare/ss 02/Ausarbeitung/3. lazy/lazy. pdf • https: //medium. com/background-thread/what-is-lazy-evaluation-programming-word-of-the-day-8 a 6 f 4410053 f • https: //medium. com/@dis_is_patrick/practical-uses-for-closures-c 65640 ae 7304 • https: //de. wikipedia. org/wiki/Datei: Python-logo-notext. svg • https: //devstickers. com/lisp • https: //www. verywellmind. com/can-artificial-intelligence-help-depression-4158330 • https: //turingchurch. net/from-elon-musk-to-joseph-smith-a-material-simulation-hypothesis-aa 4758950577 • https: //www. nytimes. com/2011/10/26/science/26 mccarthy. html • https: //de. wikipedia. org/wiki/Datei: F_icon. svg • https: //de. wikipedia. org/wiki/Whats. App#/media/File: Whats. App. svg • https: //de. wikipedia. org/wiki/Twitter#/media/File: Twitter_bird_logo_2012. svg • https: //de. wikipedia. org/wiki/EBay#/media/File: EBay_logo. svg
Quellen • • • • • • https: //commons. wikimedia. org/wiki/File: Raytracing_reflection. png https: //blog. storagecraft. com/4 -areas-multi-core-processing-really-matters/ http: //cabol. github. io/posts/2013/11/24/programming-languages-and-multicore-crisis/# https: //www. deadcoderising. com/2017 -06 -13 -why-pure-functions-4 -benefits-to-embrace-2/ https: //alvinalexander. com/scala/fp-book/benefits-of-functional-programming https: //itnext. io/pros-and-cons-of-functional-programming-32 cdf 527 e 1 c 2 https: //docs. microsoft. com/de-de/dotnet/csharp/programming-guide/concepts/linq/functional-programming-vs-imperative-programming https: //de. wikipedia. org/wiki/Funktionale_Programmierung https: //www. geeksforgeeks. org/functional-programming-paradigm/ https: //insights. stackoverflow. com/survey/2018#most-popular-technologies https: //pythonconquerstheuniverse. wordpress. com/2009/10/03/python-java-a-side-by-side-comparison/ https: //www. domainssaubillig. de/blog-artikel/items/objektorientierte-vs-funktionale-programmierung-im-web. html https: //www. heise. de/select/ix/2017/6/1495900368728612 https: //www. grimm-jaud. de/index. php/blog/objektorientierte-generische-funktionale-programmierung https: //www. tiobe. com/tiobe-index/ https: //medium. com/@sho. miyata. 1/the-object-oriented-programming-vs-functional-programming-debate-in-a-beginner-friendly-nutshell-24 fb 6 f 8625 cc https: //www. codenewbie. org/blogs/object-oriented-programming-vs-functional-programming https: //wiki. selfhtml. org/wiki/Programmiertechnik/Programmierparadigma https: //www. informatik-verstehen. de/programmiersprachen/programmierparadigmen/ http: //www. enzyklopaedie-der-wirtschaftsinformatik. de/lexikon/technologien-methoden/Sprache/Programmiersprache/Paradigma http: //www. weiterbildung-programmierer. de/programmieren/paradigmen. php
Quellen • • • • https: //www. buildinformed. com/einekurzegeschichte/ https: //www. grimm-jaud. de/index. php/blog/funktionale-programmierung-die-definition https: //www. grimm-jaud. de/index. php/blog/reine-funktionen https: //de. wikipedia. org/wiki/Funktionale_Programmierung https: //de. wikipedia. org/wiki/Lambda-Kalk%C 3%BCl http: //webkrauts. de/artikel/2015/grundlagen-funktionaler-programmierung https: //www. it-talents. de/blog/it-talents/was-ist-funktionale-programmierung-wann-setze-ich-sie-ein https: //funktionale-programmierung. de/2013/08/23/was-ist-funktionale-programmierung. html http: //sun 45. informatik. uni-bremen. de/wordpress/wp-content/uploads/fp 2 k. script. pdf https: //de. wikipedia. org/wiki/First-Class-Funktion https: //ijoshsmith. com/2015/12/09/higher-order-functions-in-swift/ https: //de. wikipedia. org/wiki/Deklarative_Programmierung https: //de. wikipedia. org/wiki/Funktionale_Programmierung https: //de. wikipedia. org/wiki/Imperative_Programmierung