Hallo! Mein Name ist Katerina und ich habe die wärmsten Gefühle für funktionale Programmierung. Ich benutze ständig funktionale Sprache und unterrichte sogar ein wenig.
Unsere Hauptentwicklungssprache bei Typeable ist Haskell, und während sich alle darüber stritten, ob Haskell für die Produktion bereit ist, haben wir sie nur verwendet und als Wettbewerbsvorteil angesehen. Aufgrund dieser Erfahrung möchten wir unsere Meinung mitteilen.
Wie FP die Programmierung verbessert
Die funktionale Programmierung ist im Moment sehr beliebt, und FP-Elemente tauchten in vielen zwingenden Sprachen auf, wie Lambda-Funktionen, Teilanwendung (Currying) und Funktionen höherer Ordnung (Karte, Filter, Faltungen). Irgendwo sehen diese Anleihen gut aus, aber irgendwo führen sie zu einer ziemlich seltsamen, fremden Syntax. Das Programmierparadigma ist jedoch ein Ansatz, der im Kopf des Programmierers lebt und im Allgemeinen nicht Teil der Sprache ist. Bis zu dem einen oder anderen Grad unterstützt jede Sprache unterschiedliche Paradigmen, und ihre Entwürfe ermöglichen die Entwicklung von Programmen in unterschiedlichen Stilen. Ob es sich lohnt, in einem funktionalen Stil zu entwickeln, ist eine offene Frage, und jeder Entwickler beantwortet sie anhand seiner Vorlieben, Sprachfähigkeiten und anderer Überlegungen.
Wir glauben, dass die Verwendung des Funktionsstils in imperativen Sprachen oder besser noch einer funktionalen Sprache, insbesondere statisch typisierten, dazu beitragen wird, den Code viel besser zu machen, nämlich:
- Der Code wird prägnanter und ausdrucksvoller. "Ausdruckskraft" kann als die Anzahl der Ideen pro Codeeinheit definiert werden, und im Allgemeinen sind funktionale Sprachen auf höherer Ebene auch ausdrucksstärker. Zum Beispiel wird die Transformation jedes Elements in einem Array oder einer Liste in einem funktionalen Einzeiler (unter Verwendung von map / foreach / Whatever und einer anonymen Funktion) durchgeführt, während in einem imperativen Stil eine Schleife organisiert und eine Variable deklariert werden müsste für einen Zähler oder Iterator und verwenden Sie eine explizite Zuweisung. Bei komplexeren Beispielen nimmt der Unterschied in der Ausdruckskraft nur zu.
- . « » . , . , , , - , : , (, ) , . , . ( ), « » . , , , . (working memory), , . , . — . , , C, SOLID GoF-, , , .
- . — , . : , , . , , , ? . «» , , « ».
- Der Code wird einfacher zu debuggen und zu testen. Dieser Punkt folgt aus den beiden vorhergehenden: Wir haben eine Reihe kleiner Funktionen, von denen einige rein sind, d.h. Wir wissen, dass ihr Ergebnis nur von der Eingabe abhängt. Das Debuggen des Codes wird einfacher - Sie müssen nur überprüfen, welche Funktionen separat zurückgegeben werden, um zu verstehen, wie sie zusammenarbeiten. Es ist genauso einfach, Komponententests für die "saubere" Logik Ihrer Anwendung zu schreiben.
Wie FP den Programmierer verbessert
Als nächstes möchte ich meine Erfahrungen teilen, die nicht direkt mit dem Schreiben von Programmen in funktionalen Sprachen zusammenhängen, und Ihnen mitteilen, welche anderen Kenntnisse und die Verwendung von FP für mich nützlich waren und für Sie nützlich sein können:
- , -. - , . , «» « » , , . , : , , Haskell, Brainfuck, Piet. . , .
- , , computer science. , . , , - , , .
- . , « » , , . , . , . , , , . , , - , - , . , , .
- : Haskell! , Haskell, . , Haskell-, . - . «» «» , , . , , «Haskell-». , , . , , . . , , , , . , , , . , : — !
Fazit
Das Aufkommen von FP-Elementen in beliebten industriellen Entwicklungssprachen wie Python, C ++, Kotlin, Swift usw. bestätigt, dass dieser Ansatz wirklich nützlich ist und Stärken aufweist. Das Anwenden des Funktionsstils ermöglicht robusteren Code, der unabhängig von der Programmiersprache leichter zu trennen, zu verallgemeinern und zu testen ist. Mit einer funktionalen Sprache können Sie diese Vorteile natürlich voll ausnutzen, indem Sie natürlichen Konstrukten ein hohes Maß an Ausdruckskraft verleihen.
Es gibt eine große Anzahl funktionaler Sprachen, aber wie es uns scheint, sind derzeit diejenigen, die statische Typisierung verwenden, für die Entwicklung am bequemsten und nützlichsten. Auf diese Weise können Sie beim Kompilieren viele Fehler abfangen und einen Teil der Anwendungslogik auf Typebene ausdrücken.
Abschließend möchte ich allen wünschen, dass sie keine Angst haben, alternative Ansätze zu verwenden und sie in der Praxis auszuprobieren, auch wenn dies nur für Ihre eigene Entwicklung nützlich ist.