Dookie hat geschrieben:1. das leidige end bei Blöcken
wie immer der erster und wichtigster punkt für alle Python-programmierer
ich finde das ein wenig kindisch, weil es wichtigere dinge gibt als ein paar eingesparte end's. warum muss Python so was experimentelles haben?
da ich meine bisherigen bedenken zu nichtredundanten indents (oder wie nennt ihr das?) nicht einfach kopieren will, link zum thread im Ruby-forum:
http://www.rubyforen.de/ptopic,2191.html#2191
kritik erwünscht
aber ich glaube, wir sollten uns auf wichtigere kriterien konzentrieren.
2. daß man bei Methoden vor dem Namen bei der Deklaration nochmal den Klassennamen angeben muss.
muss man nicht. was du meinst, ist vermutlich folgendes:
das ist eine klassenmethode (was mir in Python leider fehlt.) normalerweise benutzt man instanzmethoden, genau wie in Python:
kein Foo nötig.
3. die in vielen Fällen sehr Perlartige Syntax von Ruby hat mich auch abgeschreckt, wie damals als ich eine Sprache für Websachen suchte und zum Glück nach Perl dann PHP entdeckte.
ja, Ruby
kann fast wie Perl aussehen, wenn du magst. es kann auch (semantisch) wie Smalltalk aussehen. oder wie Haskell oder Delphi oder Python. das ist die freiheit von Ruby.
Matz (Erfinder von Ruby) mochte an Perl vor allem die möglichkeit, einfache dinge ganz kurz hinzuschreiben. Perl erkauft sich das mit z.T. grausligem zeichenwust, Ruby dämmt diesen wust ein und packt alles in eine solide OO-struktur: /Regexps/, $1, if-modifier können den code lesbarer machen, wenn man sie gut einsetzt. darum gibt es sie auch in Ruby. im unterschied zu Python wollte man bei Ruby ganz klar auch Perl-ideen weiterentwickeln.
PHP ist auch nicht ganz frei von allen Perl-kürzeln, aber dafür frei von gutem design
leider muss ich trotzdem da drin programmieren!
4. keine Möglichkeit von Mehrfachvererbung unter Ruby. Ich vermeide Mehrfachvererbung zwar nach Möglichkeit, aber manchmal ist es sehr praktisch ein Objekt von str und einer anderen Klasse abzuleiten.
Aber Ruby kann afaik auch eine Art Mehrfachvererbung durch sogenannte Mixins, von denen murphy uns sicher einiges erzählen kann.
das ist ein größeres thema. falls Dookie mit "von str ableiten" meint, dass das objekt fähigkeiten von einer anderen Klasse übernehmen soll: genau das tun mixins. ein paar infos hier:
http://www.approximity.com/rubybuch2/node72_main.html
http://www.rubygarden.org/faq/section/show/8
@Dookie: bitte poste mal ein beispiel für eine sinnvolle mehrfachvererbung.
Dem Text in dem Link merkt man sein Alter wirklich an. Dort wird gesagt daß bei Ruby eben alles ein Objekt ist. Seit Python Version 2.1 gilt das auch für Python.
sind klassen objekte? was ist mit true, null oder 0? kann ich sie auch syntaktisch als objekte behandeln, also 0.abs() oder null.__str__() ? ich kenne Python leider nicht gut genug.
Einen Vorteil sehe ich auch darin, daß ich bei Python frei bin imperativ, funktional oder objektorientiert zu programmieren und das innerhalb eines Scripts, so wie es die Problemstellung eben erfordert.
genau das kann man in Ruby auch. beim funktionalen gibt's defizite, das stimmt, aber ich habe gehört, dass Python's lambda auch seine grenzen hat.
Leonidas hat geschrieben:Python hat eine klare Struktur und OOP auch wenn die Ruby Leute uns sagen wollen dass das nicht so ist *g*.
Python ist mit sicherheit klarer als Perl und objektorientierter als C++.
ich finde die tendenz von Python zu funktionen (damit meine ich alles, was keinen empfänger hat wie len) nicht sinnvoll...warum nicht "test".len()?
noch was: die zwingenden klammern bei funktionen verhindern schöne methodenreihen, wie sie in Ruby allgegenwärtig sind:
(ähnlicher gedankengang wie bei unix-befehlen, nur OO.) wozu diese klammern?