[linux-l] Ocml vs. Java

Volker Grabsch vog at notjusthosting.com
Fr Sep 23 19:03:58 CEST 2005


On Fri, Sep 23, 2005 at 08:09:48AM +0200, Oliver Bandel wrote:
> > > List.iter2 (fun a b -> print_endline (string_of_int(a + b))) liste1 liste2
> 
>                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
> statt:             print_endline (string_of_int(a + b))
> ginge es auch so:  Printf.printf "%d\n" (a + b)

Es geht darum, dass inline eine Funktion definiert wird, nämlich:
	(fun a b -> ...)

In Python brauchst du diese Ecke nicht zu denken, und hast stattdessen
eine Schleife mit Inhalt, was IMHO schneller und leichter erfasst werden
kann. Wenn das als Schleife dastehen würde, stünden Lister.iter2, liste1
und liste2  zusammen, statt vom Inhalt unterbrochen zu werden. Wird der
Schleifen-Inhalt sogar explzit in eine extra Funktion verpackt, ist das
nur dann übersichtlicher, wenn der Schleifeninhalt nicht so kurz ist.

Ich geb mal ein Analogon in der deutschen Sprache: Wenn man den Code
liest, ist es, als würde man einen Satz lesen. Die "Schleife" wird
in Python zuerst genannt, und danach der inhalt. In Ocaml wird die
Schleife wie durch einen Nebensatz unterbrochen:

	Es werden nun zwei Listen durchlaufen, deren Elemente paarweise
	addiert und ausgegeben werden, bezogen auf die Listen "liste1"
	und "liste2".

In Python sieht das eher so aus:

	Es werden die Listen "liste1" und "liste2" durchlaufen. Ihre
	Elemente werden paarweise addiert und ausgegeben.

Letzteres finde ich besser lesbar. Das spricht übrigens nicht
grundsätzlich gegen funktionale Sprachen. In Ocaml z.B. würde man sehr
viel Lesbarkeit gewinnen, wenn die Argumente einfach nur eine andere
Reihenfolge hätten:

List.iter2 liste1 liste2 (fun a b -> print_endline (string_of_int(a + b)))

Mmmmhh ... schon viel besser. :-)

Wiegesagt, sind nur Kleinigkeiten, aber eine einheitliche For/If-Syntax
ist auch bei funktionalen Sprachen (wo sie technisch nicht nötig sind)
von großem Wert für die Lesbarkeit des Codes. Wiegesagt, nur meine
persönliche Meinung, welche der Arternativen mir besser gefällt. Sie
wird von im Prinzip allen "Python-Leuten" geteilt ... das dürfte wohl
ein Grund sein, weswegen sie Python überhaupt erst für sich gewählt
haben. ;-)

> > Man fängt nämlich an, Funktionen zu verweden an Stellen, wo eigentlich
> > gar keine nötig sind. Egal, ob man sie nun inline definiert oder nicht,
> > ist das unnötig schwer lesbar, IMHO.  In Python:
> > 
> > for a,b in zip(liste1,liste2):  print a+b
>                                   ^^^^^^^^^^\
>                                              \
>                                  eine Funktion, wo garkeine nötig ist?

Da wird eine aufgerufen, nicht definiert. Hab ich ja oben nochmal
erklärt.

> Oder hat Dich bloß die Syntax genervt, weil Du sie nicht verstanden hast?

Keine Sorge, ich habe den Ocaml-Quelltext vollständig verstanden, denn
ich kenne genug ähnliche Sprachen. Bitte komme endlich mal von deinem
hohen Ross herunter, und unterstelle nicht gleich jedem, der anderer
Meinung ist als du, dass er dich nicht verstanden hätte.

Meine erste funktionale Sprache war übrigens Common Lisp, damit habe
ich mich schon vor vielen Jahren beschäftigt. Soo sehr haben mich die
Klammern übrigens gar nicht gestört.

> Oder meinst Du das string_of_int?
> Das ist nicht wegen FPL, sondern wegen des Typs so.

Nein, darauf hat sich das nicht bezogen. s.o.


Viele Grüße,

	Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l