YapfHoofdpagina | Info | Hulp | FAQ (veelgestelde vragen) | Speciale pagina's | Aanmelden


Printervriendelijke versie | Voorbehoud | Privacybeleid

Bekijk het eens zo...

Uit Yapf


Veel problemen kun je oplossen of voorkomen door het probleem anders te benaderen. Hier volgen een paar van die dingen waarvan je na een paar uur debuggen denkt duh...

Inhoud

Algemeen

Als je weet dat iets kan gebeuren, dek jezelf er dan ook tegen in. Denk niet dat het niet zal gebeuren want alles wat kan gebeuren zal gebeuren. Het kan soms even duren, maar het zal. Al bouw je maar een suffe foutmelding in die de boel stopzet voordat het fout gaat, maar doe er iets aan!

Het gaat niet om wat de kans is dat het gebeurt maar om wat de gevolgen zijn wanneer het gebeurt. De kans dat je een auto ongeluk krijgt is vrij klein, maar toch doe je een gordel om want je weet dat je bij een aanrijding zonder gordel met je kop door de voorruit zult gaan. Parachutisten hebben twee parachutes, niet omdat de eerste zovaak faalt maar omdat ze het zonder parachute niet overleven.

Als jouw applicatie het risico loopt dat een op de tienduizend klanten een foute factuur krijgen dan kun je er vergif op innemen dat dat zal gebeuren bij een hele grote factuur van een hele lastige klant. De paar minuten die meestal nodig zijn om dat risico af te vangen zijn het echt *meer* dan waard.


...tot het er wel meer worden, en wat gebeurt er dan? Bouw geen beperkingen in op aannames, alleen op feiten.


Logica

Kijk eens naar het tegenovergestelde

Bij logica gaat het erom dat iets wel of niet waar is. Dat iets kan een waarde in een database zijn, maar het kan ook de uitkomst van een berekening zijn. Als het lastig is om te zien of het false is, kijk dan eens of het eenvoudiger is om te zien of het niet-true is.

Voorbeeld:

Als je wilt weten of een string begint met een getal dan kun je kijken of het eerste teken wel een getal is, door te controleren of het een 0,1,2, t/m 9 is. Dat is nogal wat werk.

Het tegenovergestelde is juist heel eenvoudig te controleren want alles wat niet met een nul begint komt in alphametische sortering voor de nul, dus $string < '0'. Voor de andere kant is het wat lastiger want $string > '9' zou ook '91' overslaan. Dit los je op door te kijken naar het teken dat na '9' komt in de ASCII tabel en dat is de dubbelepunt en die doet zelf ook nog mee.

In totaal wordt het dus: if (!($string < '0' or $string >= ':')) En dat is aanzienlijk minder werk voor zowel jou als de computer, terwijl het exact hetzelfde resultaat oplevert.

SQL

INNER JOIN ipv IN

Een IN statement werkt alsvolgt:

SELECT * FROM tabel WHERE x IN (SELECT y FROM anderetabel);

Dit levert voor SQL nogal wat werk op omdat x moet worden vergeleken met alle waarden van y.

Het is in sommige gevallen veel efficienter om het te herschrijven naar een JOIN:

SELECT * FROM tabel INNER JOIN anderetabel ON x=y;

LEFT JOIN ipv NOT IN

Selecteer de records die niet in de andere tabel/query voorkomen:

SELECT * FROM tabel WHERE x NOT IN (SELECT y FROM anderetabel);

En dat is het zelfde als een LEFT JOIN met een IS NULL voorwaarde op een kolom uit de rechter tabel:

SELECT
  *
FROM
  tabel
LEFT JOIN
  anderetabel
ON
 x=y
WHERE
 anderetabel.y IS NULL;

Veelgebruikte principes

Ontvangen van "http://www.yapf.net/index.php/Bekijk_het_eens_zo..."

Deze pagina is 1.522 maal bekeken. Deze pagina is het laatst bewerkt op 20 feb 2009 om 10:13.


Zoeken

Bladeren
Hoofdpagina
Gebruikersportaal
In het nieuws
Recente wijzigingen
Willekeurige pagina
Hulp
Bewerken
Brontekst bekijken
Hulp bij bewerken
Paginaopties
Overlegpagina
Nieuw kopje
Printervriendelijke versie
Pagina-informatie
Paginageschiedenis
Verwijzingen naar deze pagina
Verwante wijzigingen
Mijn pagina's
Aanmelden / registreren
Speciale pagina’s
Nieuwe pagina's
Bestandslijst
Statistieken
Meer…