Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]9236[/thread]

Programmierstil (Seite 2)



<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten
pktm
 2007-07-27 16:44
#78973 #78973
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Was ich gerne mache wenn ich CGI::Application benutze ist POD als Kommentare benutzen, weil ich mir so direkt die Dokumentation aus meinen Modulen erzeugen lassen kann. So sieht eine typische Methode bei mit meistens so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
=head2 methode( $schnitstellen, $parameter, $optional? )

Beschreibung der Funktion der Methode, was sie als Parameter nimmt, was sie damit macht, was sie zurück gibt usw. ToDo-Abschnitte stelle ich hier auch meistens rein.

=cut

sub methode {
    my $self = shift;
    # alle Parameter hier oben instantiieren, nicht irgendwo mitten im Code auf $_[x] zugreifen oder so.


    return 'immer! :-)';
} # /methode
http://www.intergastro-service.de (mein erstes CMS :) )
kristian
 2007-07-27 17:56
#78974 #78974
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Code: (dl )
    return 'immer! :-)';

Nöööö.

Code: (dl )
1
2
return unless defined wantarray;
return 'the expected thing';

Gruss
Kristian
pktm
 2007-07-27 20:04
#78975 #78975
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[quote=kristian,27.07.2007, 15:56]Hallo

Code: (dl )
    return 'immer! :-)';

Nöööö.

Code: (dl )
1
2
return unless defined wantarray;
return 'the expected thing';

Gruss
Kristian[/quote]
Methoden in Perl geben immer einen return-Wert zurück. Und damit der nicht mit irgendwas, was zuletzt, vielleicht gar versehentlich nicht korrekt ausgeführtem belegt wird, sollte man immer einen Rückgabewert einstellen. So hab ich das gemeint. Dass der nicht immer als letztes steht ist klar, aber zumindest der voreingestellte Rückgabewert, auch wenn "eigentlich keiner von nöten wäre", sollte m.E. unten stehen, das erhöht die Leserlichkeit und Wartbarkeit des Kodes.
http://www.intergastro-service.de (mein erstes CMS :) )
kristian
 2007-07-27 20:56
#78976 #78976
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Ähhemmm nein.
Wenn du es so machst wie ich es vorschlage brauchst du dir über den Rückgabewert keinen Kopf machen, wenn nichts erwartet wird gibt es auch nichts zurück, ausser dem Programmablauf.
Ansonsten ist der angefragte Rückgabewert der erwartete.

Was erwartet man mehr ;-)

Gruss
Kristian

EDIT: Wenn man ein altes Modul benutzt ist es sinnig den Rückgabewert nicht kennen zu müssen, sonst muss man ja ewig nachschauen...\n\n

<!--EDIT|kristian|1185555559-->
renee
 2007-07-27 22:08
#78977 #78977
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=MisterL,27.07.2007, 13:52]Da war doch noch was Optisches wie:
Variablendeklaration immer oben, Methoden immer unten im Code[/quote]
Mmmmhh... eingeschränkt würde ich Dir zustimmen. Globale Variablen ja (jetzt aber bitte nicht gleich alles zu globalen Variablen machen), wenn es Variablen sind, die Du mitten in der Sub brauchst, dann macht es meiner Meinung nach keinen Sinn, die oben in der Sub zu deklarieren. Beispiel:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
sub test{

    # code
    # noch mehr code

    my @array = (1..20);
    for my $i ( @array ){
        print $i;
    }
}


vs.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub test{

    my @array;
    my $i;
    # code
    # noch mehr code

    @array = (1..20);
    for $i ( @array ){
        print $i;
    }
}


Es ist auch immer ein ganzes Stück persönliches Empfinden dabei...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Strat
 2007-07-28 14:08
#78978 #78978
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=MisterL,27.07.2007, 13:52]Variablendeklaration immer oben[/quote]
Ich schlage vor, Variablen nur in einem so kleinen Gueltigkeitsbereich zu verwenden wie moeglich. Und da macht es meist mehr Sinn, Variablen erst bei der ersten Verwendung zu definieren. Dann braucht der Leser die Variable nur relativ kurz im Auge behalten. (wobei globale Variablen - wenn man welche verwenden muss - schon moeglichst frueh definiert werden sollen, also janz weit oben)

[edit|Strat]Das schrieb eh schon Renee alles...[/edit]

die 80-Zeichen-Grenze besteht beim Editor i.d.R. nicht mehr; sie besteht aber haeufig bei Mail und manchen Webforen.\n\n

<!--EDIT|Strat|1185617492-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2007-07-28 14:16
#78979 #78979
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
zu wantarray: ich gehe damit immer sehr sparsam um, weil es manchmal mehr verwirrt als komfort bringt.
Code: (dl )
1
2
3
4
5
6
sub XYZ {
my @array = 1..100;
defined( wantarray )
? return @array
: return \@array;
}

finde ich meist unnoetig und - wenn man die sub als parameter einer weiteren Sub aufruft, sogar manchmal sehr umstaendlich:
Code: (dl )
&ABC( 'value1, &XZZ(...), ... ); # skalar oder liste ??? ich will aber skalar


deshalb gebe ich so gut wie immer ein arrayref zurueck
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2007-07-28 14:35
#78980 #78980
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Strat,28.07.2007, 12:08]Ich schlage vor, Variablen nur in einem so kleinen Gueltigkeitsbereich zu verwenden wie moeglich. Und da macht es meist mehr Sinn, Variablen erst bei der ersten Verwendung zu definieren. Dann braucht der Leser die Variable nur relativ kurz im Auge behalten. (wobei globale Variablen - wenn man welche verwenden muss - schon moeglichst frueh definiert werden sollen, also janz weit oben)[/quote]
"Möglichst kleiner Gültigkeitsbereich" heitß bei mir, dass ich Blöcke innerhalb einer Sub definiere. Also
Code: (dl )
1
2
3
4
5
6
7
8
9
sub foo {
...
...
{
my $i;
...
...
}
}

Das macht das Umstellen von Code oder ggfs. das Auslagern des Blocks in eine eigene Sub viel einfacher.
kristian
 2007-07-29 12:39
#78981 #78981
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Code: (dl )
1
2
3
4
5
6
sub XYZ {
my @array = 1..100;
defined( wantarray )
? return @array
: return \@array;
}


perldoc -f wantarray

Quote
Returns true if the context of the currently executing subroutine or "eval" is looking for a list value.
Returns false if the context is looking for a scalar.
Returns the undefined value if the context is looking for no value (void context).


Also eher so:
Code: (dl )
1
2
return unless defined wantarray;
return wantarray ? @array : \@array;


Gruss
Kristian
Strat
 2007-07-29 13:56
#78982 #78982
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
kristian: danke, war ein fehler
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten



View all threads created 2007-07-27 10:38.