Dienstag, 17. November 2009

map (chr.(158-).ord)

Mein Lieblingsfitzel Haskell. Der Ausdruck ist eine Funktion, die eine Zeichenkette als Argument erwartet und eine andere zurückliefert, die jedes Zeichen durch 158 minus originalen Zeichenwert ersetzt. Angewandt auf "oo~W909,=*9:~8529r~:/~0/*~9:5*~58~%/)~2/(9~%/),~'/,3", damit der
Klartext nicht im Quellcode steht.

Das in Java zu schreiben ist kein Fest. Und nicht annähernd so kurz. Und vor allem bekommt man das Idiom nicht hin. Was hier passiert, ist nämlich, daß man eine Funktion '(chr.(158-).ord)' schreibt, die man mit map auf jedes Zeichen des Argumentstrings losläßt, und aus den Resultaten wird ein neuer String gebaut und als Resultat zurückgegeben. (Das geht hier so elegant, weil Strings in Haskell einfach Listen von Zeichen sind, und map arbeitet generisch auf Listen.) In Java eine Methode schreiben, die irgendeine Funktion derart auf Listen anwendet und dann die Funktion selbst zu definieren, artet einfach nur in Arbeit aus.

Dann wird jedes Fragment einzeln verständlicher, aber man sieht den Wald vor lauter Bäumen nicht mehr.

Keine Kommentare: