Schrift
[thread]12300[/thread]

map im void-Kontext böse und roh?



<< >> 6 Einträge, 1 Seite
GwenDragon
 2008-08-05 21:58
#113126 #113126
User since
2005-01-17
14760 Artikel
Admin1
[Homepage]
user image
Bezüglich http://board.perl-community.de/thread/12299/#MSG5

Ist das ein "Programmers Don't"?

Wir sind doch nicht bei einem Wettbewerb von Damian Conway: "Perl Best Practices", oder?
Oder ist das eine rein religiöse Frage unter Perl-Mönchen, Marketendern und -Evangelisten?

Ansonsten schreibe ich demnächts unter jedes Beispiel:
Achtung: Dieser Code verursacht bei Anfängern und Perl-Evangelisten üble Irritationen und ruft gar Damian C. zur Rettung des Guten Perl Programmierstils auf den Plan.

Mag mir bitte jemand erkären, was an dem void-Kontext falsch ist?

OK, manchmal schimmert bei mir immer noch ein bisschen C durch ;)


Siehe http://www.perlmonks.org/index.pl?node_id=296742
Also deprecated ist der void-Kontext nicht, soweit ich sehe und er kostet eigentlich auch nichts mehr als die for Schleife.

Und Larry sagte schon 1999:
Quote
Larry Wall (<larry {at} wall.org>)

Re: grep/map in void context
1999/11/01

perl.porters-gw
The argument against using an operator for other than its primary
purpose strikes me the same as the old argument that you shouldn't have
sex for other than procreational purposes. Sometimes side effects
are more enjoyable than the originally intended effect.

http://pq.tinita.de/?st=1999
Ein Dank an pqs Perl-Zitate!

Allerdings könnte ich auch eine gefühllose Schurkin sein und das arme Perl misshandeln:
Quote
Both grep and map build a return list, regardless of their context. This means you're making Perl go to the trouble of building up a return list that you then just ignore. That's no way to treat a programming language, you insensitive scoundrel!

PerlMonks
pq
 2008-08-05 23:11
#113128 #113128
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
soweit ich weiss, ist es ein performance-problem, das aber ab einer bestimmten perlversion
(5.10? edit: 5.8.1) so nicht mehr existiert, weil map da den kontext erkennt.
ich persönlich finde es manchmal lesbarer, map zu benutzen, da zuerst klar wird, ok,
hier wird also etwas auf das ganze array angewendet, und was, das steht in den klammern.
bei s/.../.../ for @bar steht halt die operation vorne und wird zuerst wahrgenommen.

(die perlquotes-seite muss ich unbedingt mal überarbeiten...)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Taulmarill
 2008-08-06 01:31
#113132 #113132
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Das Performance-Problem besteht nicht mehr seit 5.8.1 da perl jetzt sieht, wenn der Rückgabewert von map nicht verwendet wird. Habe ich aber auch erst im Nachhinein heraus gefunden.

IMHO sollte man map trotzdem nur verwenden, wenn der Rückgabewert auch benutzt wird, bzw. nur dann, wenn es einen guten Grund gibt, warum man eine for-Schleife nicht verwenden kann oder will. Andere, die versuchen den Code zu verstehen, könnten sonst an dem unüblich eingesetzten map hängen bleiben und unnötig lange darüber grübeln, warum das jetzt da ist und ob man den Sinn der Konstruktion evtl. missgedeutet hat.

Aber das ist nur (m)eine Meinung...
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
pq
 2008-08-06 11:34
#113142 #113142
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Taulmarill+2008-08-05 23:31:40--
Andere, die versuchen den Code zu verstehen, könnten sonst an dem unüblich eingesetzten map hängen bleiben und unnötig lange darüber grübeln, warum das jetzt da ist und ob man den Sinn der Konstruktion evtl. missgedeutet hat.

ja, aber das ist diese ewige diskussion - mit dem argument könntest du gleich zu java wechseln,
da perl viele ungewöhnliche funktionen und operatoren hat, die die sprache ausdrucksfähiger
machen, aber halt auch schwieriger zu lernen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
GwenDragon
 2008-08-06 16:22
#113155 #113155
User since
2005-01-17
14760 Artikel
Admin1
[Homepage]
user image
Nun, wer was nicht versteht beim Code, kann doch fragen.

Es gibt in Perl so viele Konstrukte, die wahrlich mehr zum verständnislosen Kopfschütteln bei Anfängern ermutigen.
bloonix
 2008-08-07 14:58
#113187 #113187
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Flexibilität ist das, was wir an Perl lieben.

TIMTOWTDI heißt nicht, dass nur die Wege eingeschlagen werden,
die auch jeder Anfänger versteht. Dann sollte man doch lieber zu
Python wechseln ;)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< >> 6 Einträge, 1 Seite



View all threads created 2008-08-05 21:58.