Da Oracle Corporation einige funktionale Konstrukte in Java SE 8 eingeführt hat, sind heutzutage die meisten Interviewer daran interessiert, einige Fragen zur funktionalen Programmierung zu stellen. Als Java/Groovy/Scala-Entwickler oder als Entwickler für funktionale Programmierung sollten wir die folgenden Fragen und Antworten lernen, um Interviews erfolgreich zu bestehen:
- Was ist funktionale Programmierung?
- Was sind die „Vor- und Nachteile“ der funktionalen Programmierung?
- Was sind die Unterschiede zwischen funktionaler Programmierung und imperativer Programmierung?
- Was sind die Unterschiede zwischen funktionaler Programmierung und objektorientierter Programmierung?
- Was sind die Unterschiede zwischen funktionaler Programmierung, imperativer Programmierung (IP) und objektorientierter Programmierung?
- Was sind die Hauptvorteile der funktionalen Programmierung gegenüber imperativer Programmierung oder objektorientierter Programmierung?
- Wann sollte funktionale Programmierung verwendet werden?
- Wann sollte objektorientierte Programmierung verwendet werden?
- Was sind die Nachteile von OOP?
- Was sind die Nachteile von OOP-Vererbung?
… Und mehr
In diesem Beitrag werden wir nacheinander die folgenden drei populären Programmierparadigmen diskutieren und auch die obigen Fragen beantworten:
- Funktionale Programmierung (FP)
- Imperative Programmierung (IP)
- Objektorientierte Programmierung (OOP)
Was ist funktionale Programmierung?
In einfachen Worten ist Funktionale Programmierung (FP) eines der beliebten Programmierparadigmen, das Berechnungen wie mathematische Funktionen ohne Zustandsänderung und Datenmutation durchführt. In der funktionalen Programmierung sind Funktionen Kandidaten erster Klasse. Wir schreiben Programme, indem wir eine Reihe von Funktionen und unveränderlichen Daten definieren. Beispiele für FP-Sprachen sind Scala, Haskell, Erlang usw. Java SE 8 hat ebenfalls einige funktionale Konstrukte (Bitte lesen Sie die Java 8-Beiträge für weitere Details)
Was sind die Merkmale von FP?
Funktionale Programmiersprachen wie Scala weisen die folgenden Merkmale auf.
- 1. Der Zustand existiert nicht.
FP-Programme enthalten keinen Zustand. Das bedeutet, alle Daten sind unveränderlich, und Funktionen können den Zustand nicht ändern.2. Geringe Bedeutung der Ausführungsreihenfolge
In funktionalen Programmiersprachen schreiben wir Programme mit einer Reihe unabhängiger Funktionen. Funktionen enthalten eine Reihe von Anweisungen. In der funktionalen Programmierung hat die Reihenfolge der Ausführung dieser Funktionen nicht viel Bedeutung, weil sie keinen Zustand haben und alle Funktionen unabhängig voneinander arbeiten. Selbst wenn wir die Ausführungsreihenfolge ändern, produzieren sie immer noch die gleichen Ergebnisse.3. Zustandsloses Programmiermodell
Alle FP-Programme verwenden unveränderliche Daten und Funktionen, die diese Daten nicht ändern können. Das bedeutet, dass FP-Sprachen das zustandslose Programmiermodell unterstützen.4. Funktionen sind Bürger erster Klasse
In funktionalen Programmiersprachen sind Funktionen Objekte erster Klasse. Funktionen sind unabhängige Einheiten, die wir in beliebiger Reihenfolge ausführen können.5. Primäre Manipulationseinheiten
In funktionalen Programmiersprachen sind die primären Manipulationseinheiten Funktionen und Datenstrukturen, da alle Programme diese Einheiten verwenden.6. Modulare Programmierung
In funktionalen Programmiersprachen müssen wir kleinere und unabhängige Einheiten namens Pure Functions schreiben, um das zustandslose Programmiermodell zu unterstützen. Das bedeutet, FP unterstützt eine bessere Modularität als OOP.7. Higher-Order Functions und Lazy Evaluation
Funktionale Programmiersprachen sollten Higher-Order-Funktionen und Lazy-Evaluation-Features unterstützen.8. Primäre Flusssteuerungen
FP-Sprachen verwenden keine Flusssteuerungen wie For…Loop, Do…While Loop, While…Loop usw. und verwenden auch keine bedingten Anweisungen wie If…Else oder Switch-Anweisungen. Alle FP-Sprachen schreiben Programme unter Verwendung der folgenden Elemente:
- Funktionen
- Funktionsaufrufe
- Funktionsaufrufe mit Rekursion
- Abstraktion, Kapselung, Vererbung und Polymorphismus
Wie OOP unterstützen auch FP-Sprachen alle 4 Konzepte: Abstraktion, Kapselung, Vererbung und Polymorphismus. FP-Sprachen unterstützen Vererbung mit Typklassen oder Impliziten. Sie unterstützen Polymorphismus mit Hilfe von Generika. Es ist auch als Parametrischer Polymorphismus bekannt.
Was ist der Hauptfokus von FP?
Im Gegensatz zu OOP-Sprachen konzentrieren sich alle FP-Programme hauptsächlich auf „Was Sie tun“ oder „Was getan werden soll“. Sie konzentrieren sich hauptsächlich auf folgende Dinge:
- Welche Informationen gewünscht sind, das sind die Eingaben.
- Welche Transformationen erforderlich sind, das ist die eigentliche Logik.
Das bedeutet, FP konzentriert sich hauptsächlich auf „Was getan werden soll“. Es konzentriert sich nicht sehr auf „Wie es gemacht werden soll“. Daher können wir funktionale Programmierung genau wie die Beschreibung des Problemfelds schreiben. Deshalb können nicht nur Entwickler, sondern auch andere Personen FP-Code sehr einfach verstehen. Nun werden wir über die „Vor- und Nachteile“ (Vorteile und Nachteile) der funktionalen Programmierung diskutieren.
Vorteile der funktionalen Programmierung?
Funktionale Programmiersprachen haben die folgenden Vorteile oder Nutzen oder Pros:
- Fehlerfreier Code
Da FP-Sprachen keinen Zustand unterstützen, erzeugen sie keine Nebeneffekte, was bedeutet, dass wir fehlerfreien Code oder fehlerfreien Code oder weniger fehleranfälligen Code schreiben können. Effiziente parallele Programmierung
Da FP-Sprachen keinen veränderlichen Zustand haben, erzeugen sie keine Zustandsänderungsprobleme. Das bedeutet, dass sie nur unveränderliche Daten verwenden. Sie verwenden unabhängige Einheiten, um Programme zu schreiben, das sind „Funktionen“. Wir können sehr effiziente parallele oder nebenläufige Programmierung schreiben, weil sie unabhängig voneinander ohne Zustandsänderung ausgeführt werden. Bessere Leistung
Da FP-Programme mit allen unabhängigen Einheiten zusammengesetzt sind, können sie parallel oder gleichzeitig ausgeführt werden. Aus diesem Grund erzielen FP-Anwendungen bessere Leistung. Bessere Encapsulierung
Im Gegensatz zu OOP unterstützt FP eine bessere Encapsulierung mit reinen Funktionen. Reine Funktionen bedeuten ohne Nebenwirkungen. Unterstützt verschachtelte Funktionen
Verschachtelte Funktionen bedeutet, Funktionen innerhalb anderer Funktionen zu komponieren, um Probleme zu lösen. FP unterstützt verschachtelte Funktionen. Erhöhung der Wiederverwendbarkeit
Da FP-Programme aus unabhängigen Einheiten bestehen, das sind „Funktionen“, können wir sie sehr einfach wiederverwenden. Bessere Modularität
In FP-Sprachen müssen wir kleinere und unabhängige Einheiten schreiben, sogenannte reine Funktionen, um das modell der zustandslosen Programmierung zu unterstützen. Das bedeutet, dass FP eine bessere Modularität als OOP unterstützt. Einfache Lazy-Evaluation
In FP-Sprachen ist es sehr einfach, Lazy-Evaluation zu schreiben. Sie unterstützen Lazy-Funktionale Konstrukte wie Lazy-Listen, Lazy-Maps usw. Erhöhung der Lesbarkeit und Wartbarkeit
Funktionale Programmierung (FP) verbessert auch die Lesbarkeit und Wartbarkeit, weil sie unabhängig arbeiten und den Zustand nicht ändern. Erhöhung der Testbarkeit
Da wir unsere FP-Programme mit unabhängigen Einheiten schreiben, das sind „Funktionen“, können wir sie sehr einfach unit testen. Unterstützt Abstraktion über Verhalten
Im Gegensatz zu OOP unterstützt FP sowohl „Abstraktion über Daten“ als auch „Abstraktion über Verhalten“. Weil die Realität beides enthält. Unterstützung für BigData
Da FP parallele Programmierung und bessere Leistung unterstützt, eignet sich FP sehr gut zur Entwicklung von BigData-Anwendungen. Robuster und zuverlässiger Code
Da FP unveränderliche Daten verwendet, können wir mit FP leicht robusten und zuverlässigen Code entwickeln.
Nachteile der funktionalen Programmierung?
Abgesehen von den großen Vorteilen haben funktionale Programmiersprachen auch sehr wenige oder vernachlässigbare Nachteile. Sie haben nur die folgenden Nachteile:
- Erfordert viel Speicher
FP hat keinen Zustand. Sie erstellen immer neue Objekte, um Aktionen auszuführen, anstatt vorhandene Objekte zu ändern. Aufgrund dessen benötigen FP-Anwendungen viel Speicher. – Konzentriert sich nicht auf Liskov-Substitution
Was sind die wichtigsten Konzepte der funktionalen Programmierung?
Die folgenden Konzepte sind wichtige Konzepte der funktionalen Programmierung.
- First-Class Functions.
- Lazy Evaluation.
- Higher-Order Functions.
- Unveränderlichkeit (nicht mutierbare Daten).
- Modularität.
- Keine Nebeneffekte.
- Lazy Evaluation.
- Rekursive Funktionsaufrufe.
Was ist Imperative Programmierung?
Die imperativen Programmierung (IP) ist eines der beliebten Programmierparadigmen, das eine Sequenz von Schritten/Anweisungen/Aussagen in einer bestimmten Reihenfolge ausführt. Beispiele für IP-Sprachen:- Java, C, C++ usw.
Hauptmerkmale der imperativen Programmierung?
Jede imperativ programmiersprache (IP) kann die folgenden Merkmale enthalten:
- Sequenz von Anweisungen.
- Reihenfolge der Ausführung von Anweisungen ist sehr wichtig.
- Sie enthalten Zustand.
- Sie verwenden sowohl unveränderliche als auch veränderliche Daten.
- Sie können den Zustand ändern.
- Sie können Nebenwirkungen haben.
- Zustandsorientiertes Programmiermodell.
- Sie ändern den Zustand des Programms direkt.
- Sie stellen den Zustand mit Datenfeldern dar.
Was ist objektorientierte Programmierung?
Object Oriented Programming ist eine weitere Art von Programmierparadigma. Es stellt alles als ein Objekt dar. Jedes Objekt enthält einige Datenfelder und Methoden. Alle OOP-Programme enthalten Zustand. Sie verwenden mutable Daten und Datenstrukturen. Wie bei FP können wir vollständige Programme unter Verwendung von unveränderlichen Daten schreiben, aber es erzwingt diese Regel nicht. Object Oriented Programming (OOP) ist eine Übermenge der Imperativen Programmierung. Es folgt allen Charakteristika von IP mit einigen zusätzlichen Features. Diese zusätzlichen Features sind:
- Alles ist ein Objekt.
- Jedes Objekt enthält einige Datenfelder und Methoden.
- OOP-Konzepte: Abstraktion, Encapsulation, Vererbung und Polymorphismus.
Im Gegensatz zu funktionalen Programmiersprachen konzentrieren sich OOP-Sprachen hauptsächlich auf „Wie wird es gemacht“. Das bedeutet, als Entwickler konzentrieren wir uns auf „Wie du es machst“. Darüber hinaus kombiniert OOP sowohl „Was du machst“ als auch „Wie du es machst“. Deshalb können wir keinen prägnanten und leicht lesbaren Code schreiben. Nur Entwickler können den Code verstehen, andere Personen können mehr Verwirrung haben, um den Anwendungscode zu verstehen, sie können ihn nicht verstehen.
Nachteile der objektorientierten Programmierung (OOP)?
Auch wenn OOP viele Echtzeitprobleme löst, hat es immer noch die folgenden Nachteile (im Vergleich zu FP):
- Es unterstützt keine vollständige Wiederverwendbarkeit.
- Es ist nicht vollständig modular.
- Es verletzt das Konzept der Kapselung.
- Vererbung hat viele Nachteile.
Wesentliche Nachteile der Vererbung:
- Verletzt das Prinzip der Kapselung
- Bei zunehmender Vererbungsebene ist es sehr schwierig und aufwendig, Objekte zu pflegen und zu erstellen.
Wann sollte Funktionale Programmierung verwendet werden?
Wir sollten uns für Funktionale Programmierung (FP) in folgenden Szenarien entscheiden:
- Wenn wir viele verschiedene Operationen an Daten durchführen, die festgelegt sind.
- Mit anderen Worten, wenn wir wenige Dinge mit vielen Operationen haben.
Wann sollte Objektorientierte Programmierung verwendet werden?
Wir sollten uns für Objektorientierte Programmierung (OOP) in folgenden Szenarien entscheiden:
- Wenn wenige Operationen an vielen verschiedenen Varianten durchgeführt werden, die ein gemeinsames Verhalten aufweisen.
- Mit anderen Worten, wenn wir mehr Dinge mit wenigen Operationen haben.
HINWEIS:- Hier sind Dinge realweltliche Objekte und Operationen reale Handlungen. Zum Beispiel stellen wir in Java diese realweltlichen Dinge als „Klassen“ und reale Handlungen als Methoden (Operationen) dar.
Unterschiede zwischen FP und OOP (IP)?
Functional Programming | OOP |
---|---|
Does not exist State | Exists State |
Uses Immutable data | Uses Mutable data |
It follows Declarative Programming Model | It follows Imperative Programming Model |
Stateless Programming Model | Stateful Programming Model |
Main Fcous on: “What you are doing” | Main focus on “How you are doing” |
Good for Parallel (Concurrency) Programming | Poor for Parallel (Concurrency) Programming |
Good for BigData processing and analysis | NOT Good for BigData processing and analysis |
Supports pure Encaspulation | It breaks Encaspulation concept |
Functions with No-Side Effects | Methods with Side Effects |
Functions are first-class citizens | Objects are first-class citizens |
Primary Manipulation Unit is “Function” | Primary Manipulation Unit is Objects(Instances of Classes) |
Flow Controls: Function calls, Function Calls with Recursion | Flow Controls: Loops, Conditional Statements |
It uses “Recursion” concept to iterate Collection Data. | It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java |
Order of execution is less importance. | Order of execution is must and very important. |
Supports both “Abstraction over Data” and “Abstraction over Behavior”. | Supports only “Abstraction over Data”. |
We use FP when we have few Things with more operations. | We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java. |
Das ist alles über drei beliebte Programmierparadigmen. HINWEIS:- Ich komme eigentlich aus der OOP, habe aber erst vor einem Jahr mit FP begonnen. Wenn Functional Programming-Experten Fehler in diesem Beitrag finden, geben Sie mir bitte Ihre wertvollen Rückmeldungen. Hinterlassen Sie bitte einen Kommentar, wenn Ihnen mein Beitrag gefällt oder wenn Sie Fragen oder Anregungen haben.