Sicher kann Racket auch OOP, dennoch scheint funktionale Programmierung im Vordergrund zu stehen. Ada scheint auch eine recht spezielle (und zu Anfangs pre-OOP) Entwicklung hinter sich zu haben.andy_m4 schrieb:Erstens hat Racket auch ein klassenbasiertes Objektsystem, wo man diesen ganzen Typkram übrigens auch drauf anwenden kann. Zum anderen die die Idee ja nicht neu. Das geht z.B. auch in Ada. Da kann man ebenfalls Typen mit Contraints einschränken:
subtype Monthtype is Integer range 1 .. 12;
und viola hat man ein Typ mit denen man Variablen deklarieren kann, die eben nur Ganzzahlen von 1 bis 12 annehmen können.
Und Ada ist nicht funktional. Eher strukturiert und natürlich seit den 90er Jahren auch Objektorientierung.
Ja, absolut, so war es auch gemeint.andy_m4 schrieb:Was ja auch eine große Stärke ist. Weil man eben nicht für jeden Kram eine extra Syntax braucht, sondern das nehmen kann, was man sowieso immer nimmt.
Mir fallen überhaupt nicht sehr viele Beispiele ein, wo man einen Monat modellieren will aber kein zugehöriges Datum oder Zeiträume. Generell scheint mir das gegebene Beispiel auch eher wenn schon dann auf enums hinaus zu laufen.andy_m4 schrieb:Das hätte ich jetzt gern mal näher erläutert. Also inwiefern das schlechter Stil ist.
Ein Monat ist jedenfalls keine Zahl bzw. wird nur schlecht durch die natürlichen Zahlen kleiner als 13 repräsentiert. Wenn schon Zahlen, dann halte ich es z.B. für üblich, dass wenn ich vom zwölften Monat einen Monat weiter zähle keine Fehlermeldung kommt, sondern ich wieder beim ersten Monat lande.
Und wenn ich z.b. etwas anzeige, dann wird der Monat in der Regel ja nicht als "1" oder "2", sondern als "Januar" oder "Februar" oder zumindest "01", "02" dargestellt.
Sprich, wir haben Verhalten, verschiedene Repräsentationen und Gleichheit ist in natürlicher weise nicht Objektgleichheit, sondern Wertgleichheit -> ValueObject.
Ja, das kann schon sein.andy_m4 schrieb:Sehe ich komplett anders. Funktionales Programmieren bringt in vielen Situationen Vorteile. Weil es es einfacher macht fehlerfreie Programme zu schreiben (durch die Minimierung von Nebeneffekten) und weil man (auch daraus resultierend) gute Unterstützung für Multithreading quasi nebenbei geschenkt bekommt.
Ich will funktionales Programmieren jetzt hier nicht als Allheilmittel verstanden wissen. Aber es sollte halt zum Repertoire eines Programmierers genauso dazu gehören, wie eben OOP und andere Paradigmen.