emang menurut aturan pemrograman berstruktur pun mesti
pake if-else's, jangan pake goto. :-)

tapi emang kalo percabangannya banyak, levelnya bisa
jadi dalem, dan kalo indentasi ngga bener, bisa pusing
nelusurin bloknya. trus, alur logikanya harus dipikirkan 
dan ditentukan dulu, sebab agak repot saat harus mengubah-
ubah (indenting & unindenting banyak baris).

saran saya sih, sementara (selama belum ada cara yang
lebih sip), pake nested if (cara 1) aja. tapi:

1. untuk yang percabangannya banyak, bisa digabung pake
cara 4 (menggunakan 'variabel state'). misalnya, biasanya 
kalo di awal kode itu kan ada serangkaian prekondisi yang 
harus dipenuhi (umumnya cek parameter). saya biasanya pake 
cara gini: (kode contoh: Embperl):


<HTML>
[# bagian atas, ngecek2... #]
[- $error = '' -]
[$ if $ENV{REQUEST_METHOD} !~ /^(?:GET|POST)$/ $]
  [- $error = 'Please only use GET or POST.' -]
[$ elsif !defined($name) || !length($name) $]
  [- $error = 'Please fill-in name field.' -]
[$ elsif !defined($age) || !length($age) $]
  [- $error = 'Please fill-in the age field.' -]
[$ elsif $age =~ /\D/ || $age > 120 $]
  [- $error = 'Please enter a reasonable age.' -]
...dst...
[$ endif $]

[# bagian tengah... #]
[$ if $error $]
  Error: [+ $error +]
[$ else $]
  You entered: name=[+ $name +], age=[+ $age +], etc.
[$ endif $]
</HTML>


2. selalu jaga agar indentasi tetap jelas. keep everything
indented, if possible. indentasikan juga HTML (terutama TABLE), 
sebab membantu juga dalam menelusuri kesalahan penulisan tag2 
TABLE. mis: (kode contoh: HTML::Mason. contoh buruk kali ya, 
:-p, soalnya satu escape Mason, %, tidak bisa ditaruh di 
luar kolom pertama)

<HTML>
    <HEAD>
%       if (defined $title) {
        <TITLE>$title</TITLE>
%       }
    </HEAD>

    <BODY>
%       # tabel utama
        <TABLE>
            <TR>
                <TD COLSPAN=9>
                    <SPAN CLASS="title">Jadwal Puasa</SPAN>
                </TD>
            </TR>
            <TR>
                <TD>Hari ke</TD>
                <TD>Tanggal</TD>
                <TD>Imsak</TD>
                <TD>Subuh</TD>
                <TD>Terbit</TD>
                <TD>Dzuhur</TD>
                <TD>Ashar</TD>
                <TD>Magrib</TD>
                <TD>Isya</TD>
            </TR>
%           $i=1; for (@data) {
            <TR>
                <TD><% $i %></TD>
                <TD><% $_->{tgl} %></TD>
                <TD><% $_->{imsak} %></TD>
                <TD><% $_->{subuh} %></TD>
                <TD><% $_->{terbit} %></TD>
                <TD><% $_->{dzuhur} %></TD>
                <TD><% $_->{ashar} %></TD>
                <TD><% $_->{magrib} %></TD>
                <TD><% $_->{isya} %></TD>
            </TR>
%           $i++; }
        </TABLE>

(ups, kepanjangan kali ya?)

nanti, kalau dirasa HTML-nya terlalu besar, sebelum
di-output ke client bisa diilangin dulu indent2 ini
(dengan Mason atau mod_perl kayaknya ngga susah 
tuh... ;-)

untuk heredoc di perl, kurang lebih bisa diganti dengan 
quote biasa dan fungsi unindent() seperti di bawah, 
supaya heredoc bisa tetep di-indent rapi.

sub unindent($$) {
    my ($num, $str) = @_;
    $str =~ s/(?<=\n)\s{1,$num}//sg;
    $str;
}
===
    <TEXTAREA>[+ unindent(8,qq{
        Ini adalah teks
        yang nantinya bakal ke-unindent,
        tapi sekarang {belon},
        tapi nantinya {bakal}.}
    )+]</TEXTAREA>

(hm, tapi tetep jelek ya... di 'html mode' tapi kan
jarang pake heredoc).

btw, yang dibahas di sini mungkin terlalu sempit untuk
disebut "style pemrograman." untuk pedoman yang lebih 
umum, bbrp bacaan di bawah (meskipun untuk pemrograman
non-web/tradisional) menurut saya cukup berguna:

- buku: code complete
- guide: ExtremeProgramming (url-nya lupa...)

trus, katanya:
- buku: the pearls of programming
- buku klasik: the practice of programming

juga bagus, tapi belon saya baca. :-)

HTH


At 09:30 14-12-99 +0700, you wrote:
>mana sih style pemrograman yang paling cocok untuk web?
>biasanya pemrograman di web meliputi penggunaan beberapa tahap yang dilakukan
>secara berurutan, tapi kalau salah satu tahap gagal, tahap berikutnya yang
>bergantung pada tahap yang gagal tsb tidak boleh dikerjakan....
>output HTML ke browser juga harus valid dan gak boleh terpotong, dilengkapi
>dengan pesan error yang informatif...
>contoh adalah proses pengambilan data dari database pakai perl...
>
>
>cara 1 (pakai nested if):
>print_header();
>if (!$dbh = DBI->connect(....)) {
>  print_errmsg(...);
>} elsif (
>  if (!$ary_ref = $dbh->selectall_arrayref(....)) {
>    print_errmsg(...);
>  } elsif {
>    .......
>  }
>}
>print_footer();
>
>
>cara 2 (pakai goto):
>print_header();
>$dbh = DBI->connect(...) or { print_errmsg(...) ; goto FOOTER };
>$sth = $dbh->selectall_arrayref(....) or { print_errmsg(...) ; goto FOOTER };
>.........
>FOOTER:
>print_footer();
>
>
>cara 3 (hampir sama dengan goto, tapi diganti dengan function call):
>print_header();
>$dbh = DBI->connect(...) or { print_errmsg(...) ; print_footer() };
>$sth = $dbh->selectall_arrayref(....) or { print_errmsg(...) ;
print_footer() };
>.........
>print_footer();
>
>
>cara 4 (pakai variabel state):
>print_header();
>my $state = 1;
>$dbh = DBI->connect(...) or { print_errmsg(...) ; undef $state };
>if ($state) 
>  { $sth = $dbh->selectall_arrayref or { print_errmsg(...) ; undef $state }};
>if ($state)
>  { ..... }
>print_footer();
>
>
>cara 1 adalah cara yang paling 'resmi', tapi kelemahannya, kalau
>terlalu banyak nesting bisa susah dilihat, apalagi kalau dikombinasikan
>dengan here doc atau HTML mode (php, embperl), misalnya:
>....
>      } elsif {
>        print << _END_;
><TR>
><TH>Judul</TH>
><TH>Keterangan</TH>
></TR>
>_END_
>      }
>
>cara 2 kelihatannya paling bersih, tapi semua orang selalu anti-goto :)
>
>cara 3 tidak pakai goto dan juga bersih, tapi agak repot kalau ada beberapa
>pekerjaan, misalnya 2 atau lebih pengambilan data dalam satu HTML
>
>cara 4 tidak sebersih cara 2, dan sedikit agak repot kalau lebih dari satu
>pekerjaan
>
>atau ada yang punya cara lain?
--
Steven Haryanto <[EMAIL PROTECTED]>


-= Dual T3 Webhosting on Dual Pentium III 450 - www.indoglobal.com =-
To unsubscribe, e-mail : [EMAIL PROTECTED]
To subscribe, e-mail   : [EMAIL PROTECTED]
Netika BerInternet     : [EMAIL PROTECTED]

Kirim email ke