The_Muh schriebGenerell bin ich kein fan von Strikter Objekt Orientierung. Ich erkenne durchaus die stärken von OOP, auch wenn ich es in FB nie wirklich kennengelernt habe (siehe seite eins). Eine Sprache die mir OOP vorschreibt, möchte ich derzeit nicht lernen. Dafür hab ich bisher zuwenig erfahrung mit OOP - und ich sehe für manche einsatzgebiete keinen Sinn in OOP. Wenn ich ne Schleife schreibe die auf nen tastendruck wartet, und bis zum tastendruck ein "Bitte Taste Drücken" ausgiebt, dann brauch ich dafür kein Objekt.
Wie gesagt denke ich persönlich, dass OOP überbewertet wird – was nicht heißt, dass es generell etwas schlechtes ist. Zur Erläuterung greife ich Dein Beispiel in abgewandelter Form auf.
Nehmen wir an, Du wolltest jedes Element eines Arrays quadrieren. Das erste was Dir in den Sinn kommen mag ist eine Schleife, in welcher Du über das Array iterierst. Wenn Du DIESEN Ansatz in einer (vernünftigen) objektorientierten Sprache umsetzen willst, so gebe ich Dir Recht: es bietet keinerlei Vorteile, sich in irgendeiner Weise mit Objekten auseinanderzusetzen und die Umsetzung wäre wahrscheinlich ungelenk. Allerdings bietet Dir die jeweilige Sprache ja ihre eigenen Mittel und ihre eigenen unterstützten Paradigmen an. Zum Beispiel in Smalltalk:
#(1 2 3 4) collect: [:e | e * e].
Schön und gut, was soll da der Vorteil zur gewohnten Schleife sein? Ganz einfach: #(...) ist ein Objekt der Klasse Array, ihm wird die Nachricht collect: gesendet, welche als Argument eine anonyme Funktion (einen Block) empfängt, der seinerseits an jedes Objekt e (e für Element) die Nachricht * sendet, welche als Argument wiederum das Objekt e empfängt und das Ergebnis zurückgibt. Collect sorgt dafuer, dass dieser Block für alle Elemente des Arrays aufgerufen und die jeweiligen Ergebnise als Array zurückgegeben, quasi gesammelt, werden.
Moment. Hatte ich nicht einen Vorteil versprochen? Also, davon abgesehen, dass du keine off-by-one Fehler produzieren wirst, die zwangsläufig auch bei wirklich guten Programmierern nach der 10000 for-Schleife mal auftreten, sollte Dir aufgefallen sein, dass alles Genannte entweder Objekt oder Nachricht ist. Das ist Smalltalk, mehr gibt es im Prinzip nicht zu wissen. (Natürlich musst du Datenstrukturen unt Ähnliches kennenlernen, aber das Fundament der Sprache, das was sie ausmacht, was Du zu erwarten hast, ist damit geklärt. Stelle dem einmal Sprachen wie C++ gegenüber und du weisst, was ich mit Komplexität meine.) Alles ist ein Objekt und Objekten sendet man Nachrichten. Man bittet sie quasi darum, etwas zu tun. Wie sie das machen ist für Dich als Bittsteller erst einmal vollkommen egal. Ein einfaches Konzept, ein mächtiges Konzept. Trotz, und gerade ob, seiner Einfachheit bietet es eine elegante Möglichkeit, alle Programmieraufgaben zu bewältigen.
Langer Rede kurzer Sinn: Nicht jede OOP-Sprache ist unnötig komplex und "einschränkend". Auch wenn Smalltalk nur dieses eine Paradigma unterstützt, so tut es dies wenigstens optimal.
Bei lisp weiß ich nicht ob (bzw wie schnell) ich mich an die (umgekehrte) Polnische Notation gewöhne. Wer Jahrelang in der Schule die normale Notation nutzt, und auch mit dieser Programmiert, der guckt erstmal doof, wenn plötzlich "+ 1 1" = "2" ist.. das sieht einfach unnartürlich aus.
Ja, bei mathematischen Ausdrücken mag die Prefix-Notation ungewohnt und fremdartig sein, aber wie steht es mit sqrt(x) in C? Oder print "hallo" in Basic?
Lisp ist einfach konsequent, indem es Syntax auf ein Minimum reduziert. Durch diese Reduktion wird syntaktische Abstraktion soweit erleichtert, dass sie auch wirklich genutzt werden kann.
Ruby sieht ganz nett aus. Der Wikipedia-Artikel macht richtig apitit auf die Sprache 🙂. Allerdings weiß ich nicht wie verbreitet Ruby auf Unixoiden Systemen ist, und ich glaube nicht das ein Compiler existiert der das Problem lösen könnte. Python dagegen ist auf fast allen Maschinen zu finden, die sich mit einem Linux-kernel schmücken.
</code>
Ja, Python ist verbreiteter, aber ich denke nicht, dass Du mit Ruby in eine "exotische" Nische gedrängt wirst. Meine persönliche Meinung zu Perl, Python und Ruby ist wirklich, dass es fast egal ist, welche der Drei man benutzt. Fast.
<code>
Eine weile hab ich übrigens auch mit TCL / TK geliebäugelt... ich fand den Syntax hochinteressant, aber anfragen in div. IRC-Channels hat ergeben, das sich diese sprache nicht lohne. (Zumal die performance meist schlecht ist. wer mal aMSN benutzt hat wird wissen was ich meine).
Nicht lohnen ist meines Erachtens dummes Geschwätz. Erstens liefert Dir Tcl/TK eines der wenigen wirklich bequem und intuitiv zu benutzenden plattformübergreifenden Toolkits für GUI-Anwendungen (die, wenn man weiß wies geht seit 8.5. auch vernünftig aussehen), zweitens bietet die Sprache an sich auch so manche interessante Eigenschaft. (Homoikonizität, einfache, konsequente Syntax). Sicher, meine erste Wahl wäre es nicht, aber Tcl ist lange nicht so schlecht, wie sein Ruf es vermuten ließe.
Was es noch gibt? REBOL.