[PHP, C, C++, JAVA, etc] Nette code
Veel topics in /14 gaan over code die errors geeft danwel niet werkt.
In deze post staan veel code dingen waarvan sommige niet werken in elke taal of gewoon helemaal niet werken.
Dat klopt dit is gewoon om te laten zien hoe het kan.
Hoe los je code problemen het snelste op? Beter nog hoe voorkom je ze.
Onderwerpen
• Overzichtelijk coden
• Controleer zelf je code
• Zet commentaar bij je code
• Taal specifiek : JAVA en ObjectOriented(algemeen)
• Taal specifiek :debuggen in PHP
--------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------
• Overzichtelijk coden
Bekijk het verschil tussen de 2 onderstaande voorbeelden
• 1
• 2
Een switch statement bouw je zo:
Let op niet iedereen is het eens met het bovenstaande.
Zie ook hier en hier.
Ik pretendeer niet gelijk te hebben maar weet wel uit ervaring, dat hier vaak fouten in ontstaan.
Nog een inspring voorbeeld
nog wat voorbeelden
niet zo
maar zo
Dit geldt dan ook voor variabelen:
niet zo
maar zo
wordt een functieaanroep te lang, wees niet bang op een volgende regel verder te gaan. Lijn dan wel haakje openen, haakje sluiten verticaal goed uit:
niet zo
maar zo
Kies uiteraard zelf wanneer dit echt van toepassing is.
Verder na *elke* komma een spatie. Om operators ook altijd spaties, en na en voor haakjes spaties:
Naamgeving variabelen, functies etc:
Niet te lang, geen underscores, alleen inner capitalization
niet zo
maar zo
• Controleer zelf je code
Bij script fouten eerst kijken of het script uberhaupt wel klopt.
Dus controleer op werking.
Het maken van een PSD/flowchart is echt geen doodszonde als je er niet meer uitkomt.
Je bent te laat met het maken van een PSD/flowchart deze moet je eerst maken maar als je je idee alsnog op papier zet kan je je code controleren.
En natuurlijk hoe je stijl ook is, je stijl consequent blijven gebruiken.
Klinkt misschien logisch maar ik zie vaak genoeg lui die 3 stijlen door elkaar gebruiken.
• Zet commentaar bij je code
• Taal specifiek : JAVA en ObjectOriented(algemeen)
1. Gebruik getypeerde enumeraties ipv integers.
2. Maak niet constante variabelen nooit public.
3. Geef een methode parameter nooit een nieuwe waarde.
4. Gebruik altijd code-blocks bij if, while, for etc.
5. Vermijd het gebruik van de ... ? ... : ... constructie.
6. Gebruik Engelse namen om de code er homogeen uit te laten zien in combinatie met standaard API gebruik.
7. Overweeg het gebruik van _ voor klasse variabelen, om een duidelijk onderscheid te maken tussen lokale en klasse variabelen.
8. Vermijd het gebruik van static.
9. Gebruik een Iterator ipv een Enumeration, ArrayList ipv Vector, HashMap ipv Hashtable
10. Gebruik een StringBuffer als je over meerdere statements een String moet opbouwen. Als je een String in 1 statement optelt, wordt dit automatisch gedaan.
11. Gebruik zoveel mogelijk maar 1 return statement in een methode.
12. Schrijf korte methoden. Als een methode duidelijk meerdere taken verricht, moet je overwegen om dit op te splitsen.
13. Eet je exceptions nooit op door ze simpel naar de System.out te schrijven. Gooi ze zover door als noodzakelijk is.
14. Roep altijd de super constructor aan.
• Taal specifiek :debuggen in PHP
Bouw je query's als volgt
op deze wijze kan je dus dmv van een echo "$sql222"; de waarden van je query bekijken.
En dus direct zien of je wel de juiste dingen in je query hebt. In dit geval of id wel bestaat oid.
Code dus ook overzichtelijk.
zo krijg je dus geen (nou jah minder) fouten met haakjes.
En nee ik gebruik er niet te veel want dit zijn simpele voorbeeldjes
Bekijk het verschil tussen de 2 onderstaande voorbeelden
• 1
• 2
Verder kan je het beste
gebruiken bij variabelen waar je aan twijfelt,
en dan in het bijzonder bij array's natuurlijk.
ook een redelijk vaak voorkomende fout is
het plaatsen van een verkeerd haakje.
Verder hebben PHP en MySQL prima foutmeldingen:
ERROR: Parse error on line 14
staat er niet voor niks, en je zou dus kunnen beginnen met zoeken op lijn 14, en langzaam omhoog werken..
meestal is dit gewoon het vergeten van een haakje, komma of aanhalingsteken..
Daarvoor is het inspringen zo belangrijk (standaard is 4 spaties geloof ik, maar een tab of 4 spaties word ook veel gebruikt)
ERROR: Supplied argument is not a valid MySQL result resource
betekent dat je iets fout doet met je query, zorg dat zo'n error word afgevangen..
PHP heeft prachtige ERROR handeling functies, kijk bevoorbeeld eens naar
error_reporting
set_error_handler
En voor mySQL fouten:
mysql_error
Als je dan na 30x kijken toch nog neit hebt gevonden wat de fout is en je het toch op GoT post, doe dat dan iig duidelijk.
Post het stukje code (dus niet de complete 62Kb) met de foutmelding, tussen php tags en GEEF AAN IN WELKE REGEL de fout zit.. Als iemand post dat er in regel 102 een fout zit, ga ik geen 102 regels tellen, en het schiet helemaal niet op als alleen regel 94 t/m 125 er staat..
Duidelijke variabelenamen kunnen ook helpen, zodat je ze moelijk kan omdraaien.
zo dus niet
maar
of bij grotere query's is dit veel overzichtelijker:
als afsluitende tip:
gebruik een editor met highlighting mogelijk heden. Dit voorkomt veel problemen omdat je dan aan de kleur van je code kan zien of het klopt.
vragen opmerkingen kritiek via icq #18966246
(zpel en tiepvautte voorbehauwe) D2k ©2001
tnx 2 ACM voor het corrigeren,
razor-x,Timpie2000, Bart Coppens, drm,
RdeTuinman, mietje, stylee, Janoz,
mbravenboer, wasigh, whoami,Macros,
drZymo en Nielsz voor het commentaar op de oorspronkelijke versie
------------------------------------------
kritiek hier ajb
Veel topics in /14 gaan over code die errors geeft danwel niet werkt.
In deze post staan veel code dingen waarvan sommige niet werken in elke taal of gewoon helemaal niet werken.
Dat klopt dit is gewoon om te laten zien hoe het kan.
Hoe los je code problemen het snelste op? Beter nog hoe voorkom je ze.
Onderwerpen
• Overzichtelijk coden
• Controleer zelf je code
• Zet commentaar bij je code
• Taal specifiek : JAVA en ObjectOriented(algemeen)
• Taal specifiek :debuggen in PHP
--------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------
• Overzichtelijk coden
Bekijk het verschil tussen de 2 onderstaande voorbeelden
• 1
code:
1
2
3
4
| if(blaatwat){
echo "blaat";
}else{
echo "niet blaat";} |
• 2
code:
1
2
3
4
5
6
7
8
| if(blaatwat)
{
echo "blaat";
}
else
{
echo "niet blaat";
} |
Een switch statement bouw je zo:
code:
1
2
3
4
5
6
7
8
9
| switch(bla)
{
case [case]:
expr
break;
case [case]:
expr
break;
} |
Let op niet iedereen is het eens met het bovenstaande.
Zie ook hier en hier.
Ik pretendeer niet gelijk te hebben maar weet wel uit ervaring, dat hier vaak fouten in ontstaan.
Nog een inspring voorbeeld
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <table parameters..>
<tr>
<td>
Een lap text :P
</td>
<td>
En nog een lapje
</td>
</tr>
<tr>
<td colspan=2>
Dus...
</td>
</tr>
</table> |
nog wat voorbeelden
niet zo
code:
1
2
3
4
| functie ( dit, dit, en, dat ); functie ( nuNogeenkeer, maar, dan, zo ); functieTwee ( En, nu, een, andere, functie ); functieTwee ( Met, ook, twee, aanroepen, dus ); |
maar zo
code:
1
2
3
4
5
| functie ( dit, dit, en, dat ); functie ( nuNogeenkeer, maar, dan, zo ); /* hier kun je een enter overwegen */ functieTwee ( En, nu, een, andere, functie ); functieTwee ( Met, ook, twee, aanroepen, dus ); |
Dit geldt dan ook voor variabelen:
niet zo
code:
1
| var $var1="waarde1", $variable2="waarde2", $dingetje3="waarde3", $melp="waarde4"; |
maar zo
code:
1
2
3
4
| var $var1 = "waarde1",
$variable2 = "waarde2",
$dingetje3 = "waarde3",
$melp = "waarde4"; |
wordt een functieaanroep te lang, wees niet bang op een volgende regel verder te gaan. Lijn dan wel haakje openen, haakje sluiten verticaal goed uit:
niet zo
code:
1
| functieAanroep ( blablabla, blablabla2(melpje,lerpje,nogwatmeuk), ennogmeeronzin ); |
maar zo
code:
1
2
3
4
5
6
7
8
9
| functieAanroep (
blablabla,
blablabla2 (
melpje,
lerpje,
nogwatmeuk
),
ennogmeeronzin
); |
Kies uiteraard zelf wanneer dit echt van toepassing is.
Verder na *elke* komma een spatie. Om operators ook altijd spaties, en na en voor haakjes spaties:
Naamgeving variabelen, functies etc:
Niet te lang, geen underscores, alleen inner capitalization
niet zo
code:
1
2
3
4
| var sjaakdebeverisgekomen; function DITISEENFUNCTIE () class DItisEENCLASSEwaarikDitENDITMeeDOe |
maar zo
code:
1
2
3
4
| var sjaakDeBeverIsGekomen; function ditIsEenFunctie () class DitIsEenClass |
• Controleer zelf je code
Bij script fouten eerst kijken of het script uberhaupt wel klopt.
Dus controleer op werking.
Het maken van een PSD/flowchart is echt geen doodszonde als je er niet meer uitkomt.
Je bent te laat met het maken van een PSD/flowchart deze moet je eerst maken maar als je je idee alsnog op papier zet kan je je code controleren.
En natuurlijk hoe je stijl ook is, je stijl consequent blijven gebruiken.
Klinkt misschien logisch maar ik zie vaak genoeg lui die 3 stijlen door elkaar gebruiken.
• Zet commentaar bij je code
code:
1
2
3
4
5
6
7
| if
{
for ()
{
code
} // end for
} end if |
code:
1
2
| int intvariable; // commentaar over var float fpvariable; // commentaar over var |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| //----------------------------------------------------------
// Functie Blaat(arg1, arg2)
//----------------------------------------------------------
//
// Input:
// arg1 : int aantal maal
// arg2 : *char[] weer te geven tekst
//----------------------------------------------------------
//
// Returns
// true : gelukt
// false : mislukt
//----------------------------------------------------------
bool Blaat(int,*char[])
{
//en verder met de functie |
• Taal specifiek : JAVA en ObjectOriented(algemeen)
1. Gebruik getypeerde enumeraties ipv integers.
2. Maak niet constante variabelen nooit public.
3. Geef een methode parameter nooit een nieuwe waarde.
4. Gebruik altijd code-blocks bij if, while, for etc.
5. Vermijd het gebruik van de ... ? ... : ... constructie.
6. Gebruik Engelse namen om de code er homogeen uit te laten zien in combinatie met standaard API gebruik.
7. Overweeg het gebruik van _ voor klasse variabelen, om een duidelijk onderscheid te maken tussen lokale en klasse variabelen.
8. Vermijd het gebruik van static.
9. Gebruik een Iterator ipv een Enumeration, ArrayList ipv Vector, HashMap ipv Hashtable
10. Gebruik een StringBuffer als je over meerdere statements een String moet opbouwen. Als je een String in 1 statement optelt, wordt dit automatisch gedaan.
11. Gebruik zoveel mogelijk maar 1 return statement in een methode.
12. Schrijf korte methoden. Als een methode duidelijk meerdere taken verricht, moet je overwegen om dit op te splitsen.
13. Eet je exceptions nooit op door ze simpel naar de System.out te schrijven. Gooi ze zover door als noodzakelijk is.
14. Roep altijd de super constructor aan.
• Taal specifiek :debuggen in PHP
Bouw je query's als volgt
PHP:
1
2
3
4
5
6
7
| <? $connect = mysql_connect($server,$usersql,$passwd)or die("Bad connect string: ".mysql_error()); mysql_select_db("$dbnaam",$connect)or die("Bad database change: ".mysql_error()); $sql = "SELECT * FROM blaat where id='$id'"; $query = mysql_query($sql,$connect) or die(mysql_error()); ?> |
op deze wijze kan je dus dmv van een echo "$sql222"; de waarden van je query bekijken.
En dus direct zien of je wel de juiste dingen in je query hebt. In dit geval of id wel bestaat oid.
Code dus ook overzichtelijk.
zo krijg je dus geen (nou jah minder) fouten met haakjes.
En nee ik gebruik er niet te veel want dit zijn simpele voorbeeldjes
Bekijk het verschil tussen de 2 onderstaande voorbeelden
• 1
PHP:
1
2
3
4
5
6
| <? if($blaatwat){ echo "blaat"; }else{ echo "niet blaat";} ?> |
• 2
PHP:
1
2
3
4
5
6
7
8
9
10
| <? if($blaatwat) { echo "blaat"; } else { echo "niet blaat"; } ?> |
Verder kan je het beste
PHP:
1
2
3
4
5
| <? echo "<pre>"; print_r("$var"); echo "</pre>"; ?> |
gebruiken bij variabelen waar je aan twijfelt,
en dan in het bijzonder bij array's natuurlijk.
ook een redelijk vaak voorkomende fout is
PHP:
1
2
3
4
5
6
7
8
9
10
| <? if ($blaat) { echo "Blaat"; } else } // kijk goed !! echo "niet blaat"; } ?> |
het plaatsen van een verkeerd haakje.
Verder hebben PHP en MySQL prima foutmeldingen:
ERROR: Parse error on line 14
staat er niet voor niks, en je zou dus kunnen beginnen met zoeken op lijn 14, en langzaam omhoog werken..
meestal is dit gewoon het vergeten van een haakje, komma of aanhalingsteken..
Daarvoor is het inspringen zo belangrijk (standaard is 4 spaties geloof ik, maar een tab of 4 spaties word ook veel gebruikt)
ERROR: Supplied argument is not a valid MySQL result resource
betekent dat je iets fout doet met je query, zorg dat zo'n error word afgevangen..
PHP heeft prachtige ERROR handeling functies, kijk bevoorbeeld eens naar
error_reporting
set_error_handler
En voor mySQL fouten:
mysql_error
Als je dan na 30x kijken toch nog neit hebt gevonden wat de fout is en je het toch op GoT post, doe dat dan iig duidelijk.
Post het stukje code (dus niet de complete 62Kb) met de foutmelding, tussen php tags en GEEF AAN IN WELKE REGEL de fout zit.. Als iemand post dat er in regel 102 een fout zit, ga ik geen 102 regels tellen, en het schiet helemaal niet op als alleen regel 94 t/m 125 er staat..
Duidelijke variabelenamen kunnen ook helpen, zodat je ze moelijk kan omdraaien.
zo dus niet
PHP:
1
2
3
4
5
6
7
8
| <? $connect = mysql_connect($server,$usersql,$passwd)or die("Bad connect string: ".mysql_error()); mysql_select_db("$dbnaam",$connect)or die("Bad database change: ".mysql_error()); $query = "SELECT * FROM blaat where id='$id'"; $sqlquery = mysql_query($query,$connect) or die(mysql_error()); $sqlquery = mysql_fetch_array($query); // ! ?> |
maar
PHP:
1
2
3
4
5
6
7
| <? $connect = mysql_connect($server,$usersql,$passwd)or die("Bad connect string: ".mysql_error()); mysql_select_db("$dbnaam",$connect)or die("Bad database change: ".mysql_error()); $query_string = "SELECT * FROM blaat where id='$id'"; $query_result = mysql_query($query_string,$connect) or die(mysql_error()); $query_array = mysql_fetch_array($query_result); ?> |
of bij grotere query's is dit veel overzichtelijker:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <? $queryString =<<<SQL SELECT t1.bla, t2.bla2 FROM tabel as t1 tabel2 as t2 WHERE (tabelrelaties) (condities in volgorde van prioriteit) GROUP BY y ORDER BY x LIMIT o,l SQL; ?> |
als afsluitende tip:
gebruik een editor met highlighting mogelijk heden. Dit voorkomt veel problemen omdat je dan aan de kleur van je code kan zien of het klopt.
vragen opmerkingen kritiek via icq #18966246
(zpel en tiepvautte voorbehauwe) D2k ©2001
tnx 2 ACM voor het corrigeren,
razor-x,Timpie2000, Bart Coppens, drm,
RdeTuinman, mietje, stylee, Janoz,
mbravenboer, wasigh, whoami,Macros,
drZymo en Nielsz voor het commentaar op de oorspronkelijke versie
------------------------------------------
kritiek hier ajb
Doet iets met Cloud (MS/IBM)