[vienna.pm] Aufruf namentlich bekannter Methoden

Peter J. Holzer hjp at wsr.ac.at
Wed May 22 04:10:12 CDT 2002


On 2002-05-22 00:33:24 +0200, Karlheinz wrote:
> ist es denn wirklich so furchtbar den code 
> 
> On Tue, 21 May 2002 22:36:59 +0200, Peter J. Holzer wrote:
> >    my $apple = Fruit->new();
> >
> >    print "Diameter: ", $apple->diameter();
> >    print "Color: ",    $apple->color();
> >    print "Taste: ",    $apple->taste();
> >    print "Has worm: ", $apple->has_worm();
> 
> zu akzeptieren?

Capture regularity with data, irregularity with code. (Kernighan)

(Schamlos von http://wwwinfo.cern.ch/dis/perl/tchrist/style/slide33.html
geklaut).

> mir ist schon klar dass die sache etwas "theoretisches" hat 
> und etwas von in-perl-muss-das-doch-eleganter-gehen. 

Das ist gar nicht theoretisch, und hat mehr mit Maintainability als mit
mit Eleganz zu tun (ok, Eleganz ist Teil von Maintainability). Ich sehe
hier zwei ganz konkrete Vorteile, das über eine Datenstruktur zu lösen
statt es auszuprogrammieren:

1) Kann ich mir dann sehr einfach aussuchen, welche Felder ich ausgebe
und welche nicht - ausprogrammiert würde das in eine if-Orgie ausarten.

2) Kann ich die Label-Texte zu den Methoden einfach auszauschen, indem
ich eine andere Tabelle nehme (Stichwort Localization).

> foreach (@irgendwas) {
>     	$t->$_;
> }
> 
> das ist okay wenn @irgendwas 10 zeilen darueber definiert ist, aber es
> ist definitiv nicht mehr okay wenn @irgendwas mal 1000 zeilen vorher
> ueber eine logik der art 
> 
> if ($x == 1) { 
> 	@irgendwas = $someopackageobject->method()
> } else {
> 	@irgendwas = $someotherpackageobject->method()
> }
> 
> befuellt wurde.

Das ist aber genau das, worauf es hinauslaufen soll:

@methods = $config->interesting_fruit_attributes();

%labels = $locale->fruit->labels();

for (@methods) {
	print $labels{$_), ": ", $f->$_(), "\n";
}

oder so ähnlich. Welche Attribute ausgegeben werden und welcher Text
dabeisteht, steht ganz woanders (vermutlich in einem Config-File) und
kann geändert werden, ohne die Programmlogik zu beeinflussen.

	hp

-- 
   _  | Peter J. Holzer      | Aeltere Sources (also solche, die schon
|_|_) | Sysadmin WSR / LUGA  | aelter als 12 Stunden sind) sollte man
| |   | hjp at wsr.ac.at        | bei Linux generell nicht einsetzen -
__/   | http://www.hjp.at/   | Real Time Linux??    -- Gerhard Schneider
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 431 bytes
Desc: not available
Url : http://mail.pm.org/archives/vienna-pm/attachments/20020522/5ad054b9/attachment.bin


More information about the Vienna-pm mailing list