PHP Centeri avaleht Skriptikogu Küsimuste-vastuste leht Teadete vaatamine ja saatmine Foorum - koht küsimiseks Otsingumootor Siit saad infot meie kohta

Kasutajanimi:  
  Parool: 
  Registreeri!   Unustasid salasõna?

 Skriptid (427) 

 Bannerisüsteemid
 E-kaardid
 E-maili saatmine
 E-poed
 Failihaldus
 Flash ja PHP
 Foorumid
 Jututoad
 Kalendrid
 Kalkulaatorid
 Kellad
 Klikilugejad
 Kommentaarid
 Külalisteraamatud
 Küsitlused
 Lehe turvamine
 Lingikogud
 Mängud
 Otsingusüsteemid
 Pildid ja PHP
 Shoutboxid
 Sisuhaldussüsteemid
 Statistika
 Suunamine
 Templeidisüsteemid
 Testid
 Uudised
 Uudistelistid
 Varia


 Otsing 

 

 Utiliidid 

 Kes on kus
 Kasutajate info
 Küsitlused
 PHP manuaal
 Õpetused
 Jututuba
 Lingikogu
 Lemmikskriptid


 Kuidas kirjutada viisakat skripti
Autor: muidumeez
Kolmapäev, 03. september 2003 16:30
Kuidas kirjutada viisakat skripti

Antud kirjatüki iva seisneb selles, et jagada oma kogemusi nn viisaka programmeerimise osas, eelkõige muidugi seda, mis puudutab PHP-d. Kuna alates septembrist on mul võimalik suhteliselt vabalt vaadata skripte, kartmata punktide kaotust (ehee, kuulen kadedushüüdeid), siis olen seda ka tegema hakanud. Skriptide juures, mida ma laadinud olen, võite siis leida minu kommentaare, kus ma 10 palli süsteemis hindan skripide sisulist poolt. Millised on kriteeriumid, millest ma hindamisel lähtun, sellest kirjatüki lõpus.
Olen neid skripte vaadanud ja kaalunud, ütlen ausalt, minul ei ole neist suurt midagi õppida. Ja minu jaoks on vägagi oluline just sisuline pool.
Allpool toon puudused, mis skriptides on üldlevinud.

1. Skriptid ei ole loetavad

Skriptid kirjutatakse nii, et praktiliselt ei ole võimalik neid normaalselt lugeda, puuduvad kommentaarid, liigestatus ja stiil. Mida siis teha, et skriptid oleksid loetavad
a) kasutage reavahetust - kõik asjad üksteise all ilma mingite vahedeta muudab skripti äärmiselt loetamatuks
b) lisage kommentaare - mingi tegevuse alguses oleks viisakas lisada kommentaar, mida alljärgnev lõik teeb
c) kasutage treppimist - programmi sõlmed võiksid olla nihkes paremale teatud sammu võrra (tabuleeritud). Allpool on kaks näidet, eks otsutsage ise, kumb on loetavam (näide on võetud ühest allalaaditud skriptist).
Esiteks originaal
PHP kood:


if($HTTP_POST_VARS[reg]) {

$kasutajanimi $HTTP_POST_VARS[kasutajanimi];
$salasona $HTTP_POST_VARS[salasona];
$salasona2 $HTTP_POST_VARS[salasona2];
$email $HTTP_POST_VARS[email];

$avakasfail fopen($kasfailnimi"r");
$kasfailsisu fread($avakasfailfilesize($kasfailnimi));
fclose($avakasfail);

eregi("(.*)#\|$kasutajanimi\|(.*)"$kasfailsisu$tulemus);
$kasutajanimi2 $tulemus[2];

eregi("(.*)#\|(.*)\|(.*)\|(.*)\|$email\|(.*)"$kasfailsisu$tulemus2);
$email2 $tulemus2[2];



Teiseks natuke parandatud variant koos treppimise ja kommentaaridega
PHP kood:


# Kui parameeter reg on olemas
    
if($HTTP_POST_VARS[reg])
    {
        
# Määrame muutujate väärtused
        
$kasutajanimi  $HTTP_POST_VARS[kasutajanimi];
        
$salasona      $HTTP_POST_VARS[salasona];
        
$salasona2     $HTTP_POST_VARS[salasona2];
        
$email         $HTTP_POST_VARS[email];

        
# Avame faili ja loeme selle sisu

        
$avakasfail fopen($kasfailnimi"r");
        
$kasfailsisu fread($avakasfailfilesize($kasfailnimi));
        
fclose($avakasfail);
        
        
# Teostame kontrollid

        
eregi("(.*)#\|$kasutajanimi\|(.*)"$kasfailsisu$tulemus);
        
$kasutajanimi2 $tulemus[2];

        
eregi("(.*)#\|(.*)\|(.*)\|(.*)\|$email\|(.*)"$kasfailsisu$tulemus2);
        
$email2 $tulemus2[2];
      }


Eks otsustage ise, kumb on loetavam

2. Kasutage SWITCH direktiivi

Kui te kontrollite mingit parameetrit, millel on vastavalt väärtusele erinev tegevus, siis kasutatakse enamjaolt IF direktiive, mis laotakse lihtsalt üksteise alla
Näide
PHP kood:


if ($a 1) { $b 1; echo "Esimene"; }
if (
$a 2) { $b 2; echo "Teine"; }
if (
$a 3) { $b 3; echo "Kolmas"; }


Aga loetavuse seisukohast oleks mõistlik teha hoopis nii:
PHP kood:


  switch($a)
  {
      case(
1) : $b 1;
                echo 
"Esimene";
                break;
      case(
2) : $b 2;
                echo 
"Teine";
                break;
      case(
3) : $b 3;
                echo 
"Kolmas";
                break;
  }



3. Kasutage funktsioone sarnaste tegevuste jaoks

Huvitav on see, et praktiliselt ei kasutata funktsioone oma skriptides (peale standadrsete). Samas on tihti pikalt-laialt defineeritud mingid laused, mis teevad samu asju, lihtsalt üks parameeter on erinev
Näiteks
PHP kood:


if ($a 1) { $b 1; echo "<p><font face=arial size=2 color=red>Esimene</font></p>"; }
if (
$a 2) { $b 2; echo "<p><font face=arial size=2 color=red>Teine</font></p>"; }
if (
$a 3) { $b 3; echo "<p><font face=arial size=2 color=red>Kolmas</font></p>"; }


Palju parem oleks teha hoopis nii
PHP kood:


  function tryki($mida)
  {
     echo 
"<p><font face=arial size=2 color=red>$mida</font></p>";
  }

  switch(
$a)
  {
      case(
1) : $b 1;
                
tryki("Esimene");
                break;
      case(
2) : $b 2;
                
tryki_lause("Teine");
                break;
      case(
3) : $b 3;
                
tryki_lause("Kolmas");
                break;




4. Disain ja äriloogika on eraldamata

Kuna PHP väljund on HTML, siis skriptid sisaldavad endas ka loomulikult HTML elemente, mida siis direktiivi echo abil väljastatakse. Kui nüüd kõik kupatus on üksteise all, pole kasutatud ei treppimist, funktsioone ja switch'i, samuti on kohe ka echo abil tehtud HTML välundamine, on tulemuseks skript, mille kasutuselevõtmine on tihtipeale vägagi raske, kuna kogu disaini osa tuleb läbi käia.
Selgituseks, mis on äriloogika. Äriloogika on programmi oluliseim osa, mis töötleb ja muudab andmevoogu, suhtleb andmebaasidega ja moodustab väljundi. Väljund ehk disain ise ei ole osa äriloogikast, vaid moodustab eraldiseisva programmi osa. Tihti nimetatakse seda ka kasutajaliideseks ehk User Interface. Korralik skript peaks töötama erinevate kasutajaliidestega ilma, et see nõuaks meeletuid pingutusi.
Mida siis teha?

a) ärge kasutage HTML väljsatamiseks echo direktiivi, vaid PHP tääge.

PHP kood:


echo "<HTML><HEAD><TITLE>Minu asi</TITLE></HEAD><BODY>";


Kasutage hoopis
PHP kood:


?>
<HTML>
  <HEAD>
     <TITLE>Minu asi</TITLE>
     </HEAD>
  <BODY>
<?php



b) proovige disain äriloogikast eraldada kas funktsioonide või inkljuudidena.

Näiteks lehe algus ja lõpp võiksid olla inkljuudidena
PHP kood:


<?php
    
include "header.php";
    
    
# Siin on skripti sisu

    
include "footer.php"
?>



Kogu ülejäänud disain võiks olla eraldi funktsioonides, võimaluse lausa eraldi inkljuudis. Kuidas seda täpselt teha, selle kohta kirjutaks lausa eraldi õpetuse.

Finale Ultimo

Mida ma hindan siis eraldi skriptide juures, ehk siis hinded skripti kohta

1. Loetavus - kuivõrd on skript loetav
2. Skripti originaalsus - kuivõrd on väljapakutud skript originaalne
3. Lahenduse originaalsus - kuivõrd on lahendus originaalne
4. Integreeritavus - kuivõrd on skript integreeritav erinevate süsteemidega ja teiste skriptidega
5. Professionaalsus - kuivõrd on lahenduse sisu professionaalne (loogilised sõlmed, funktsioonid, äriloogika ja disaini omavaheline seos).

Seniks aga kõigile noortele programmeerijatele rahulikku meelt ja püüet areneda.



Avaleht   -    Skriptikogu   -    Teated   -    Foorum   -    Reklaam   -    Tagasiside   -    Kasutamise reeglid

© Copyright 2002-2019 PHP Center. Kõik õigused reserveeritud.