Frage

Welche Sprachen zur Verfügung, die sowohl objektorientierte und funktionale Programmierung zu fördern? Ich weiß, dass jede Sprache, die First-Class-Funktionen unterstützt, kann funktional in Betracht gezogen werden, aber ich bin für eine Syntax, die für beide Codierungs Arten gezielt wird.

Unter Verwendung einer solchen Sprache, ich stelle mir vor, alle Zustandsänderungen an einem einzigen Teil des Codes zu isolieren und den Rest des Programms mit rein funktional sein. Denken Sie einfach an es mich (Debug-Himmel!) macht sabbern.

Bisher habe ich entdeckt Scala obwohl ich nur davon nur gehört habe (und es sieht toll aus). Gibt es große Anwärter in diesem „gemischten Stil“ Paradigma?

War es hilfreich?

Lösung

Die bekanntesten sind OCaml und F # (die vage als OCaml für .NET beschrieben werden kann).

Es gibt viele andere Multi-Paradigma Sprachen, wie Oz , aber sie haben meist pädagogischer Wert. Im Gegensatz dazu ist OCaml sehr praktisch. Es ist fast so schnell wie C und fast so schön wie Haskell:)

Die beliebten Skriptsprachen wie Python und Ruby können Sie auch in funktionalem Stil programmieren. Allerdings bieten sie nicht eine der stärksten Einrichtungen, die „klassische“ funktionale Sprachen (wie auch OCaml) haben: Musterabgleich (verwechseln sie es nicht für regexp).

Andere Tipps

Javascript: OO und Funktions .

Auch viele Skriptsprachen wie Python, Ruby, Lua, usw. haben diese Fähigkeit, aber es fehlen viele der netten Features von funktionalen Sprachen wie algebraische Datentypen und Mustererkennung.

OCaml und F # sind die beliebtesten Sprachen, die OOP und FP mischen, soweit ich weiß.

Die meisten Sprachen, wie Ruby, mischen funktionale Programmierung in, aber viele Menschen nicht einmal erkennen. Ich finde Sprachen wie das lassen viel über die Syntax vorne zu wünschen übrig und so weiter.

Haskell : Rein funktional, so ziemlich kein OO, aber gehen Sie vor, den Tauchgang nehmen. : D

Scala : Schöne Mischung aus OO und FP, könnte möglicherweise java als führende Sprache auf der JVM in einem Jahrzehnte überholen oder 2. Ich mag es, weil es funktionale Programmierung auf die Java-Plattform bringt, etwas, das dringend brauchen IMHO.

C # : Awesome Unterstützung für OO sowie weitere funktionelle bekommen (First-Class-Funktionen bereits, wir werden sehen, welche Verbesserungen .net 4 bringt)

F # . NET-Sprache Errichtet speziell funktional zu sein, wie C # gegenüber, die für OO Sachen ursprünglich konzipiert wurde

Python : Groß für OO, aber haupt nicht geeignet zu FP

Javascript : Unterstützt erstklassige Funktionen, aber nicht speziell für FP wie Scala und F # entworfen. Noch etwas besser als Python IMHO.

Warum wollen Sie OO und FP mischen? Als Sprungbrett?

C #. Es ist zwingend notwendig, die sehr nützlich sein kann, aber auch viele funktionelle Eigenschaften hat. Lambda-Ausdrücke, Iteratoren und LINQ alle funktionsfähig sind.

Es wird wahrscheinlich nicht viel zu Puristen ansprechen, aber es funktioniert für mich.

Sie JavaScript, Python und Ruby auf diese Weise verwendet werden könnte, aber Scala Beulen bis eine Kerbe durch die Funktion statisch und arbeiten unter JVM eingeben.

Sie sind wirklich die falsche Frage. Ihre Frage ist premised auf eine Unterscheidung zwischen „OO“ zu sein und „funktional“ Programmierung. Diese Unterscheidung ist nicht interessant oder relevant. In der Tat, nach dem "unterstützt First-Class-Funktion" Kriterien, auch Java funktionelle ist.

Aber Sie treffen den Nagel auf den Kopf mit „rein funktional“. Das ist der interessante Teil. Welche Sprachen bieten Sie referentielle Transparenz und Reinheit wie das? Nun, die meisten von ihnen, , wenn Sie sehr vorsichtig sind. Aber nicht viele von ihnen tatsächlich garantieren, dass Ihre Funktionen rein sind. Ich kann nur von ein paar Sprachen denken, die Sie anbieten, dass.

Einer von ihnen ist Haskell . In Haskell, schreiben Sie Programme, die rein funktional sind von Anfang bis Ende. Nebenwirkungen sind mit einer Datenstruktur genannt IO übertragen und der Zustand wird, indem es durch reine Funktionen oder Einkapseln es in Monaden behandelt. So haben Sie Ihren „Debug-Himmel“, wo nur ein kleinen Teil des Codes interagiert mit dem globalen Zustand und der Rest des Programms ist rein, und die Reinheit wird durch die Sprache erzwungen.

Solange Sie nicht auf „Reinheit“ bestehen darauf, Common Lisp unterstützt alle Ihre Bedürfnisse.

Ich frage mich, warum Sie für eine Sprache suchen, den sie fördert speziell, anstatt nur gut mischte tut es trotzdem mit einer Sprache, die tut funktionale Programmierung und OO-Programmierung? Es könnte leicht in Python, Ruby, Perl oder ähnlichen interpretierte Sprachen Wirkung gebracht werden. Darüber hinaus sind in der Regel C basiert OO-Sprachen reine C mit OO-Funktionen zu mischen, zum Beispiel Objective C leicht in einer solchen Art und Weise geschrieben werden könnten, sollten Sie sich entscheiden.

EDIT:. Ich habe darauf aufmerksam gemacht worden, ich bin falsch, ich habe diese Antwort hier links Incase jemand aus meinem Fehler lernen kann - siehe Kommentare

Python, Javascript, Common Lisp, Rubin, smalltalk, Haskell und ocaml, aus der Spitze von meinem Kopf. Es ist nicht wirklich eine exotische Kombination.

Rubin! In Ruby ist alles ein Objekt (auch Literale), und es hat auch voll funktionale Programmierung zu unterstützen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top