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

EBB 1.2

Leser: 1


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
[E|B]
 2005-01-08 23:26
#16196 #16196
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
HiHo!
Endlich, nach langer Programmier- und Testphase ist mein neues Board fertig.
=> http://ebb.cgi-world.de
Hab sehr viel gegenüber der Vorgängerversion eingebaut. Dateiupload bei Beiträgen, GZIP Kompression (greetz to sk), sogar kann man das Board zu einem bestimmten Zeitpunkt wiederherstellen, wie man es von Windows her kennt. :) Schaut es euch mal an. Die Rohinstallation belegt ca, 1,5 MB. Es enthält über 20.000 Zeilen Code, den es aber noch nicht zum Download gibt. (erst später)
*stolz* :)
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Rambo
 2005-01-08 23:50
#16197 #16197
User since
2003-08-14
803 Artikel
BenutzerIn

user image
kommt mir sehr schnell vor die seite! viele themen die dort
behandelt werden!
klasse job!

fürti rambo
[E|B]
 2005-01-08 23:56
#16198 #16198
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Danke, ist ja auch super programmiert. ;)
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
lichtkind
 2005-01-09 01:23
#16199 #16199
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
respekt
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
esskar
 2005-01-09 02:23
#16200 #16200
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[E|B
,08.01.2005, 22:26]20.000 Zeilen Code, den es aber noch nicht zum Download gibt. (erst später)

angst, ich fall drüber her?
Strat
 2005-01-09 02:42
#16201 #16201
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@E|B: heisst das, dass du jetzt Zeit fuers PBoard hast? ;-) Z.B. fehlt dort noch eine Voting-Funktion

Habe mir uebrigens mal schnell den Code deines Gaestebuchs angeschaut; gefaellt mir gut, auch wenn ich persoenlich CGI und strict verwenden und das css als eigene Datei auslagern wuerde (bist ja auf Grund der c't jetzt ein Vorbild, und da sollte dann strict und CGI schon fast Pflicht sein)\n\n

<!--EDIT|Strat|1105231404-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
esskar
 2005-01-09 03:21
#16202 #16202
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hmm;
- in cgi hat "die" nix zu suchen
- und unlock vor close ist unsicher
- vorallem wären my's nicht schlecht
- außerdem stell ich immer wieder gerne fest, dass du spaghetti-code liebst und sehr selten code in funktionen auslagerst, ob wohl du die selben sachen mehrmals machst
Rambo
 2005-01-09 11:39
#16203 #16203
User since
2003-08-14
803 Artikel
BenutzerIn

user image
auch auf die gehfahr hin das es laecherlich ist.
habe das jetzt schon öfters gehört, was ist ein "spagetti code" und was ist "code in funktionen auslagern"?

fürti rambo
renee
 2005-01-09 12:25
#16204 #16204
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Rambo:

Spaghetti-Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#! /usr/bin/perl

use strict;
use warnings;

# berechnen von 14x^3 + 5x^2 - 7x
my $zahl = 14 * 2**3 + 5 * 2**2 - 7 * 2;
my $zahl2 = 14 * 3**3 + 5 * 3**2 - 7 * 3;

print $zahl,"\n",$zahl2,"\n";
# usw...


Bei Spaghetti-Code schreibt man alles in die "main", also im "normalen" Programm. Bei "in funktionen auslagern" fasst man gleichartige Sachen (wie oben die Werte berechnen) in sub's zusammen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#! /usr/bin/perl

use strict;
use warnings;

print func(2),"\n",func(3),"\n";

sub func{
my ($x) = @_;
return 14 * $x**3 + 5 * $x**2 - 7 * $x;
}


Gerade wenn man sehr häufig die gleichen Sachen macht (z.B. Parameter parsen etc...), lohnt sich ein "in funktionen auslagern". Dadurch wird der Code auch übersichtlicher und leichter "wartbar". Wenn Du feststellst, dass es x^4 statt x^3 heißen müsste, hast Du beim Spaghetti-Code Mühe alle Auftreten von x^3 zu ändern. Bei der Funktion musst Du es nur einmal ändern...
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
 2005-01-09 12:52
#16205 #16205
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Rambo,09.01.2005, 10:39]auch auf die gehfahr hin das es laecherlich ist.
habe das jetzt schon öfters gehört, was ist ein "spagetti code" und was ist "code in funktionen auslagern"?[/quote]
@Rambo: code in funktionen auslagern: haeufig wird funktionalitaet eines programmes an mehreren stellen benoetigt; da kann man die entweder an jeder stelle coden, oder man schreibt sie einmal gemeinsam und benuetzt sie dann an diesen x stellen.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my %hash = (a => 10, b => 20, c => 30);
my $hashRef = \%hash;
foreach (keys %$hashRef) {
print "$_ => $hashRef->{$_}\t";
}
print "\n";

$hashRef->{d} = 40;
foreach (keys %$hashRef) {
print "$_ => $hashRef->{$_}\t";
}
print "\n";

$hashRef->{e} = 50;
foreach (keys %$hashRef) {
print "$_ => $hashRef->{$_}\t";
}
print "\n";

die ausgabe der hashreferenz wird hier 3 mal identisch gecoded, was das programm:
x) schwerer wartbar macht (wenn sich da was beim ausgabeformat aendert, muss an drei stellen geaendert werden)
x) schlechter lesbar macht (der unnoetige fuellcode verdeckt das wesentliche)
x) sowas ist ein beispiel von spaghetti-code

wenn man z.B. die ausgabe der hashreferenz in eine subroutine (~funktion) auslagert, koennte das folgendermaszen aussehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my %hash = (a => 10, b => 20, c => 30);
my $hashRef = \%hash;

$hashRef->{d} = 40;
&PrintHashref($hashRef);

$hashRef->{e} = 50;
&PrintHashref($hashRef);
# -------------------------------------
sub PrintHashref {
my ($hashref) = @_;

foreach (keys %$hashRef) {
print "$_ => $hashRef->{$_}\t";
}
print "\n";
}

hier sind folgende Vorteile:
x) wenn sich bei der ausgabe was aendert, muss nur an einer stelle (naemlich in PrintHashref) was geaendert werden
x) Die subroutine PrintHashref kann per Copy&Paste wiederverwendet werden
x) Da der Name PrintHashref schon recht sprechend ist, wird das programm besser lesbar, weil das wesentliche nicht durch kiloweise fuellcode "verdeckt" wird. Aus diesem Grund macht es auch oft sinn, auch Funktionalitaet, die nur einmal benoetigt wird, in einer subroutine zusammenzufassen, weil dadurch die lesbarkeit erhoeht wird:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#! /usr/bin/perl
use warnings;
use strict;

my $params = &ParseProgramParameters();

for my $i (0..$params->{count}) {
my $data = &ReadAndParseData($params, $i);
&WriteDataToDb($data, $i);
}
.......

laesst den ablauf des programmes schon recht klar erkennen. Jetzt stelle dir mal vor, dass anstelle der einzelnen subroutinenaufrufe jeweils 1000 zeilen code stehen, und versuche dann, die struktur mal auf die schnelle zu verstehen... da bekommst du dann auch wahrscheinlich das problem herauszufinden, welche variable wie von welchem teil in den naechsten teil uebergeben wird, waehrend du bei der obigen loesung klare schnittstellen hast, und zusaetzlich durch den scope der subroutinen klare gueltigkeitsbereiche der darin verwendeten variablen hast, sodass dich nicht kuemmern muss, ob irgendwo anders die variable mit selbem namen schonmal benuetzt wird, und du sie vielleicht ueberschreibst (vorausgesetzt, du verwendest lokale variablen)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-01-08 23:26.