[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Python oder Perl



Andreas Pakulat <apaku@gmx.de> wrote:

> On 02.Aug 2005 - 10:09:38, Frank Küster wrote:
>> Naja, ich kenne keine der beiden Sprachen, finde aber trotzdem gleich
>
> Ich kenne Ruby nicht aber,...
>
>> - Python verwendet die in tausend Sprachen geläufige Syntax "for <name>
>>   in <liste> <separator> <body>", während Ruby offenbar sowas macht:
>>   "<Kommando_das_liste_produziert> { | <name> | <body> }, das finde ich
>>   schwer lesbar (vor allem wenn ich mir vorstelle wie ich das dann von
>>   while, until, etc. unterscheiden soll).
>
> Ich finds schonmal gut das man sowohl in Python als auch in Ruby
> (offensichtlich) einfach so ueber listen iterieren kann, ohne dabei
> selbst mitzaehlen zu muessen ala for (int i=0; i<laenge; ++i)... 

Das geht in Perl aber auch.

>> - Python verwendet zum Erstellen der Liste ein Kommando mit intuitiv
>>   verständlichem Namen (os.listdir('<directory>'), Ruby dagegen offenbar
>>   ein Suffix .each hinter dem Namen der Variable, die auf das
>>   Verzeichnis zeigt.  Das finde ich schon in diesem Fall ungewohnt, und
>>   wenn ich mir vorstelle, dass das Verzeichnis nicht in "dir" steckt,
>>   sondern in "newplace" oder "wget_target" oder so, wird es noch
>>   schwerer.  Zumal dann, wenn .each auch auf anderen Dingen als
>>   Verzeichnissen agieren kann (z.B. URLs oder Datenbank-dingsens).
>
> Ich denke da verstehst du was falsch. Ruby und Python sind sich da IMHO
> ziemlich aehnlich. In Python kann ich mit for <x> in <y> ueber jedes
> Objekt iterieren das sich wie eine Liste verhaelt. Das koennte auch eine
> Klasse sein, die einfach nur die passenden funktionen implementiert
> (frag mich nicht welche das sind, weiss ich ausm Kopf nicht). Ruby hat
> statt dieser for-Geschichte einfach eine Funktion "each" fuer
> entsprechende Objekte die die Iteration ueber jedes Element der Liste
> durchfuehrt. Ist also im Prinzip auch nichts anderes als ein Unterschied
> im Dialekt.

Ja, aber genau den finde ich beim Lesen in Ruby unübersichtlicher.  In
Python:

for <name> in <liste>
    body

und in Ruby

<liste>.each { |<name>|
    body
}

Hier passieren zwei Dinge, die für mich ungewohnt sind.  Zum einen dass
eine Variable einer Funktion als Argument übergeben wird, indem man sie
mit '.' verbindet (anstatt wie üblich mit Klammern oder ganz ohne), und
das ganze auch noch in postfix-Notation - also nicht each.<liste>.  Zum
zweiten ein Mix von Syntaxelementen und Funktionen.  Der Pythonstil ist
"reine Syntax", er besteht nur aus Schlüsselworten (und Schlüsselsymbol-
en, wenn man die Einrückung berücksichtigt). In Ruby verwendet man eine
*Funktion*, um das gleiche syntaktische Konstrukt zu erzeugen.

Und dann - aber das fällt mir erst jetzt auf - wird Prefix-Notation mit
Space und Postfix-Notation mit dot gemischt:

if <name>.funktion.eins?
   funktion.zwei "is a directory"


Gruß, Frank
-- 
Frank Küster
Inst. f. Biochemie der Univ. Zürich
Debian Developer



Reply to: