/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Kodestil i Perl
Fra : Christian Bohr-Halli~


Dato : 28-02-08 10:21

Uden den store erfaring med Perl er jeg igang med at læse noget Perl-kode.
Det går da også ok, men en ting undrer mig. Personen, som har skrevet
koden, bruger konsekvent en, synes jeg, lidt mystisk if-konstruktion.

if (...)
{
}
else
{
if (...)
{
}
else
{
}
}


Koden er på 1000 linjer, inderholder ca. 150 if-sætninger og dette i op
til 4 indlejrede niveauer. Den valgte konstruktion gør det, IMO, ikke ret
let at overskue.

Jeg ville have skrevet:

if (...)
{
}
elsif(...)
{
}
else
{
}

Er den første konstruktion normal i Perl-land?

--
Sendt med Operas banebrydende postklient: http://www.opera.com/mail/

 
 
Peter Makholm (28-02-2008)
Kommentar
Fra : Peter Makholm


Dato : 28-02-08 10:41

"Christian Bohr-Halling" <nospam@cbh.softwolves.dk> writes:

> Koden er på 1000 linjer, inderholder ca. 150 if-sætninger og dette i
> op til 4 indlejrede niveauer. Den valgte konstruktion gør det, IMO,
> ikke ret let at overskue.

Jeg ville måske finde det mere problematisk at 15% af koden er
if-sætninger, end lige præcis om de er formatteret på den ene eller
anden måde.

Nogle gange[0] bliver der advaret mod "cascading if's" med lange
if-elsif-elsif-elsif-else konstruktioner, men løsningen er
selvfølgelig ikke bare at fjerne betingelserne endnu længere væk fra
resultatet.

I en hurtig vending kunne jeg godt finde på at bruge den første
konstruktion. Så skal jeg nemlig ikke lave en kontekstskift for at slå
op om det er elsif eller elseif - jeg bruger slet ikke den
konstruktion særlig ofte.

//Makholm

Peter Makholm (28-02-2008)
Kommentar
Fra : Peter Makholm


Dato : 28-02-08 10:45

Peter Makholm <peter@makholm.net> writes:

> Nogle gange[0] bliver der advaret mod "cascading if's" med lange
> if-elsif-elsif-elsif-else konstruktioner, men løsningen er
> selvfølgelig ikke bare at fjerne betingelserne endnu længere væk fra
> resultatet.

0) /Perl Best Practices/, by Damian Conway. Copyright 2005 O'Reilly
Media, Inc., ISBN: 0-596-00173-8

Christian Bohr-Halli~ (28-02-2008)
Kommentar
Fra : Christian Bohr-Halli~


Dato : 28-02-08 11:29

Den 28.02.2008 kl. 10:40:53 skrev Peter Makholm <peter@makholm.net>:

> Jeg ville måske finde det mere problematisk at 15% af koden er
> if-sætninger, end lige præcis om de er formatteret på den ene eller
> anden måde.

Formateringen er nu med til at gøre det ret problematisk at læse. Der er
eksempelvis en else-del på 500 linjer, som selv indeholder mange og lange
if-sætninger.

--
Sendt med Operas banebrydende postklient: http://www.opera.com/mail/

Peter Makholm (28-02-2008)
Kommentar
Fra : Peter Makholm


Dato : 28-02-08 11:57

"Christian Bohr-Halling" <nospam@cbh.softwolves.dk> writes:

> Formateringen er nu med til at gøre det ret problematisk at læse. Der
> er eksempelvis en else-del på 500 linjer, som selv indeholder mange og
> lange if-sætninger.

Men uanset hvordan du formatere det vil du have en kodeblok der er 500
linjer lang og betingelsen vil være lige så langt væk. Det er efter
min mening for langt uanset hvordan du formattere det.

//Makholm

Christian Bohr-Halli~ (28-02-2008)
Kommentar
Fra : Christian Bohr-Halli~


Dato : 28-02-08 12:03

Den 28.02.2008 kl. 11:57:05 skrev Peter Makholm <peter@makholm.net>:

> Men uanset hvordan du formatere det vil du have en kodeblok der er 500
> linjer lang og betingelsen vil være lige så langt væk. Det er efter
> min mening for langt uanset hvordan du formattere det.

Helt enig. Formateringen gør det blot værre, IMO.

--
Sendt med Operas banebrydende postklient: http://www.opera.com/mail/

Flemming Frandsen (28-02-2008)
Kommentar
Fra : Flemming Frandsen


Dato : 28-02-08 11:44

Christian Bohr-Halling wrote:
> Uden den store erfaring med Perl er jeg igang med at læse noget
> Perl-kode. Det går da også ok, men en ting undrer mig. Personen, som har
> skrevet koden, bruger konsekvent en, synes jeg, lidt mystisk
> if-konstruktion.
>
> if (...)
> {
> }
> else
> {
> if (...)
> {
> }
> else
> {
> }
> }
>
>
> Koden er på 1000 linjer, inderholder ca. 150 if-sætninger og dette i op
> til 4 indlejrede niveauer. Den valgte konstruktion gør det, IMO, ikke
> ret let at overskue.
>
> Jeg ville have skrevet:
>
> if (...)
> {
> }
> elsif(...)
> {
> }
> else
> {
> }
>
> Er den første konstruktion normal i Perl-land?

Larry Wall har en gang sagt at er Perl program er korrekt hvis det løser
opgaven før man bliver fyret.

Jeg tror personen der har skrevet den første gang kode har overset at
elsif findes og lavet en workaround, det pæneste og korteste ville IMHO
være #2 eksempel, med one-true-bracket style:

if (...) {
} elsif (...) {
} elsif (...) {
} else {
}

Christian Bohr-Halli~ (28-02-2008)
Kommentar
Fra : Christian Bohr-Halli~


Dato : 28-02-08 12:00

Den 28.02.2008 kl. 11:43:42 skrev Flemming Frandsen
<ff-news@partyticket.net.invalid>:

> Larry Wall har en gang sagt at er Perl program er korrekt hvis det løser
> opgaven før man bliver fyret.

Ja, den tanke kunne man godt få her. Tror nu ikke direkte, han bliver
fyret (en PhD'er på et tysk universitet, og koden er blot en art proof of
concept)

> Jeg tror personen der har skrevet den første gang kode har overset at
> elsif findes og lavet en workaround, det pæneste og korteste ville IMHO

Også min tanke. Måske har der tidligere ikke har været den mulighed, og
den gamle stil er måske blot fulgt med? Kender som sagt ikke meget til
Perl eller dens udvikling.

> være #2 eksempel, med one-true-bracket style:
>
> if (...) {
> } elsif (...) {
> } elsif (...) {
> } else {
> }

Don't even get me started on that... Jeg ville være glad, om koden bare
var konsekvent på det punkt, men det er den ikke... nogle gange er
if/else-kroppen indrykket, andre gange ikke.


--
Sendt med Operas banebrydende postklient: http://www.opera.com/mail/

Peter Makholm (28-02-2008)
Kommentar
Fra : Peter Makholm


Dato : 28-02-08 12:07

"Christian Bohr-Halling" <nospam@cbh.softwolves.dk> writes:

>> if (...) {
>> } elsif (...) {
>> } elsif (...) {
>> } else {
>> }
>
> Don't even get me started on that... Jeg ville være glad, om koden
> bare var konsekvent på det punkt, men det er den ikke... nogle gange
> er if/else-kroppen indrykket, andre gange ikke.

$ perltidy -l=78 -i=4 -ci=4 -cti=0 -nsfs -ce code.pl

kunne gøre underværker.

Christian Bohr-Halli~ (28-02-2008)
Kommentar
Fra : Christian Bohr-Halli~


Dato : 28-02-08 12:15

Den 28.02.2008 kl. 12:07:00 skrev Peter Makholm <peter@makholm.net>:

>> bare var konsekvent på det punkt, men det er den ikke... nogle gange
>> er if/else-kroppen indrykket, andre gange ikke.
> $ perltidy -l=78 -i=4 -ci=4 -cti=0 -nsfs -ce code.pl

Smukt. Tak for tippet.

--
Sendt med Operas banebrydende postklient: http://www.opera.com/mail/

Michael Zedeler (28-02-2008)
Kommentar
Fra : Michael Zedeler


Dato : 28-02-08 17:11

Christian Bohr-Halling wrote:
> Uden den store erfaring med Perl er jeg igang med at læse noget
> Perl-kode. Det går da også ok, men en ting undrer mig. Personen, som har
> skrevet koden, bruger konsekvent en, synes jeg, lidt mystisk
> if-konstruktion.
>
> [klip]
>
>
> Koden er på 1000 linjer, inderholder ca. 150 if-sætninger og dette i op
> til 4 indlejrede niveauer. Den valgte konstruktion gør det, IMO, ikke
> ret let at overskue.
>
> Jeg ville have skrevet:
>
> if (...)
> {
> }
> elsif(...) [klip]
>
> Er den første konstruktion normal i Perl-land?

Jeg har læst kildeteksten på en håndfuld moduler. Det langt mest
almindelige er BSD KNF style, som ser sådan her ud:

if( ...) {
...
} else {
...
}

Men noget helt andet er at 150 indlejrede if-sætninger tyder på at
programmet er skrevet af en, der ikke har lært at programmere. Det er
desværre alt for almindeligt. Afhængigt af opgaven ville jeg i dit sted
overveje at finde en helt anden måde at skrive koden på. Enten ved at
indføre nogle velafgrænsede og veldefinerede funktioner eller ved at
bruge nogle opslagstabeller. Der er sikkert også andre måder at
pænificere koden på.

Mvh. Michael.

Christian Bohr-Halli~ (28-02-2008)
Kommentar
Fra : Christian Bohr-Halli~


Dato : 28-02-08 17:31

Den 28.02.2008 kl. 17:10:47 skrev Michael Zedeler <michael@zedeler.dk>:

> Men noget helt andet er at 150 indlejrede if-sætninger tyder på at
> programmet er skrevet af en, der ikke har lært at programmere. Det er

Jeg kender ikke personens baggrund yderligere, andet end den er
formelvidenskabelig og han er tilknyttet et datalogisk inst.

> desværre alt for almindeligt. Afhængigt af opgaven ville jeg i dit sted
> overveje at finde en helt anden måde at skrive koden på. Enten ved at

Formålet er nu ikke at genimplementere det, og det er heller ikke fordi,
der er umulig at læse - blot sværere end den burde være. Den omtalte
perlfil på 1000 linjer har iøvrigt følgeskab af yderligere nogle stykke,
så der samlet er omkring 3000 linjer.

--
Sendt med Operas banebrydende postklient: http://www.opera.com/mail/

Morten Guldager (03-03-2008)
Kommentar
Fra : Morten Guldager


Dato : 03-03-08 22:05

2008-02-28 Christian Bohr-Halling wrote
> Uden den store erfaring med Perl er jeg igang med at læse noget Perl-kode.
> Det går da også ok, men en ting undrer mig. Personen, som har skrevet
> koden, bruger konsekvent en, synes jeg, lidt mystisk if-konstruktion.
>
> if (...)
> {
> }
> else
> {
> if (...)
> {
> }
> else
> {
> }
> }

Ikke at det nødvændigvis kan bruges i dit tilfælde, men jeg plejer faktisk ofte
at tilstræbe en struktur der mindre mere om en case/switch ting:

{
if (...)
{
..
last;
}
if (...)
{
...
last;
}
}

Så har jeg da kun 1 niveau at holde styr på....

At jeg så gerne gør det på en måde som mange finder forkastelig er en anden sag:

sub s
{
if (...)
{
...
return($v);
}
if (...)
{
...
return($v);
}
}

Det plejer alligevel at passe fint ind i mine programmer med en værdi ud af en
case/switch tingst.


/Morten

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste