Ik ben geen java expert. Maar als je het nou zo oplostquote:
Java:
1 | Product product = productDAO.getProduct();
|
Currently Reading | Ik los geen problemen op, ik maak ze alleen...
GoT Index » Programming » [Alg] Slechtste programmeervoorbeelden deel 3
Pagina's: 1 2 3 4 ... 24 25 26 27 28 29 30 31 32 33 34 35 36 last
[Post Reply] [Nieuw Topic]Ik ben geen java expert. Maar als je het nou zo oplostquote:Nick_S schreef op woensdag 16 juli 2008 @ 15:18:
[...]
Omdat je voor fouten die je niet verwacht ook geen afhandeling kan geven. Dit zal dus ook niet door jouw laag afgehandeld moeten worden, maar door de laag er boven (of hoger) tot het uiteindelijk door de GUI, VM o.i.d. wordt afgevangen, die er wel wat mee kan. (Melding naar gebruiker geven, VM plat gooien) Fouten opslokken of half afvangen heeft niemand wat aan.
Dit soort constructie "verbergt" ook vaak andere, programmeer, fouten, zoals NullPointerExceptions.
Bijvoorbeeld:
Java:
1
2
3
4
5
6Product product = productDAO.getProduct();
try {
product.verwerk();
} catch (Exception exception) {
throw new ProductNotFoundException();
}
Dit is in ieder geval netter (en ook efficienter):
Java:
1
2
3
4
5
6Product product = productDAO.getProduct();
if (product == null) {
throw new ProductNotFoundException();
} else {
product.verwerk();
}
Zeker als product.verwerk() ook nog een exceptie kan gooien. Bij het eerste voorbeeld slok je deze dus op met een ProductNotFoundException. Bij het tweede voorbeeld zou je deze exceptie wel expliciet te zien krijgen.
1 | Product product = productDAO.getProduct();
|
Currently Reading | Ik los geen problemen op, ik maak ze alleen...
Jij schijt ook altijd op die showmodel toiletpotten bij de Gamma? "Ja, ik zag een toiletpot en..."
"Intelligent input darlin'. Why don't you just have another beer then? - Kate Nash.
quote:denheer schreef op woensdag 16 juli 2008 @ 15:45:
In een financieel pakket kwam ik o.a. dit juweeltje tegen:
Visual Basic:
1
2
3
4
5antw = vbNo
While antw = vbNo
antw = MsgBox("Geen invoer records, dus geen exportbestand. ", _
vbYesNo + vbDefaultButton2 + vbCritical, App.EXEName)
Wend
Waarom iemand hier een vbYesNo neerzet en bij vbNo de msg opnieuw laat zien is mij een raadsel.
Website
lordpalf of the flapdrols
1 | /**
|
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Dan wordt je dus mooi op het verkeerde been gezet als de methode verwerk() een npe gooit.quote:LuCarD schreef op woensdag 16 juli 2008 @ 16:11:
[...]
Ik ben geen java expert. Maar als je het nou zo oplost
Java:
1
2
3
4
5
6
7
8
9
10
11Product product = productDAO.getProduct();
try {
product.verwerk();
}
catch(NullException Exception) {
throw new ProductNotFoundException();
}
catch (Exception exception) {
// throw same exception once more
throw new Exception();
}
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Als je het zo zou oplossen (afvangen van NPE's) dan zou ik nog harder uit m'n stekker gaan, dan het afvangen van Exception. Als je daarbij ook nog een new Exception() aanmaakt, dan is het een vermelding waard op The Daily WTFquote:LuCarD schreef op woensdag 16 juli 2008 @ 16:11:
[...]
Ik ben geen java expert. Maar als je het nou zo oplost
Java:
1
2
3
4
5
6
7
8
9
10
11Product product = productDAO.getProduct();
try {
product.verwerk();
}
catch(NullException Exception) {
throw new ProductNotFoundException();
}
catch (Exception exception) {
// throw same exception once more
throw new Exception();
}
'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'
Probleem is dat elke exceptie een afgeleide is van Exception is. Op deze manier zet je een FileNotFoundException (welke aanvullende informatie zoals het opgevraagde bestand) om naar een algemene exceptie waarmee je die extra info kwijt raakt. Je hebt dan alleen nog maar de stacktrace en de beschrijving van de foutmelding.quote:LuCarD schreef op woensdag 16 juli 2008 @ 16:11:
[...]
Ik ben geen java expert. Maar als je het nou zo oplost
Java:
1
2
3
4
5
6
7
8
9
10
11Product product = productDAO.getProduct();
try {
product.verwerk();
}
catch(NullException Exception) {
throw new ProductNotFoundException();
}
catch (Exception exception) {
// throw same exception once more
throw new Exception();
}
If it ain't broken yet, it might be foolproof for a while.
Aanvulling: je hebt dan alleen nog maar de stacktrace vanaf het moment waar je deze gooide en niet meer de informatie die in de originele stacktrace stond.quote:Niemand_Anders schreef op woensdag 16 juli 2008 @ 17:17:
[...]
Je hebt dan alleen nog maar de stacktrace en de beschrijving van de foutmelding.
1 | } catch (DeeperLayerException exception) {
|
1 | } catch (DeeperLayerException exception) {
|
1 | } catch (DeeperLayerException exception) {
|
Dat zijn de zogeheten RuntimeExceptions, waar je over het algemeen weinig mee kan. (Hoe zou je bijvoorbeeld een OutOfMemoryException willen afhandelen?quote:onverwachte excepties zoals te weinig geheugen.
'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'
Ik heb toch zo'n hekel aan dit type logmeldingen.. Probeer je een kritieke fout op te lossen en dan zie je zo'n logmelding. Dan heb ik echt eenquote:Janoz schreef op woensdag 16 juli 2008 @ 16:47:
Java:
1
2
3
4
5try {
defaultValue = new Integer(this.getProperty(key));
} catch (NumberFormatException nfe) {
LOG.info("Unable to retrieve integer, returning default.");
}
Blijkt dus dat ik zelf ook gewoon een log message wegschrijf..
No amount of key presses will shut off the Random Bug Generator
Daarom hebben ze daar gelukkig een Error van gemaakt en is het dus een OutOfMemoryError. Error is een afgeleide van Throwable en niet van RuntimeException. Je kunt dus vrij veilig Exception/RuntimeException vangen als je daar aanleiding toe hebt.quote:Nick_S schreef op woensdag 16 juli 2008 @ 17:24:
Dat zijn de zogeheten RuntimeExceptions, waar je over het algemeen weinig mee kan. (Hoe zou je bijvoorbeeld een OutOfMemoryException willen afhandelen?
Religion has no place in public schools the way facts have no place in organized religion
Got me there.quote:mark platvoet schreef op donderdag 17 juli 2008 @ 07:56:
[...]
Daarom hebben ze daar gelukkig een Error van gemaakt en is het dus een OutOfMemoryError. Error is een afgeleide van Throwable en niet van RuntimeException. Je kunt dus vrij veilig Exception/RuntimeException vangen als je daar aanleiding toe hebt.
'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'
JongerenPlace | TreinenWeb | ClayWeb
Gezocht: Treinen nieuws redacteur (m/v) / Trein artikel Redacteur (m/v) - Vrijwillig... DM me..
1 | <?php
|
g4wx3 wijzigde dit bericht 21-07-2008 23:43 (47%)
Vraagje, niet lullig bedoeld maar wat voor nut heeft deze klasse? In een template is dit bij mij 6 regels code, bij jou 20?quote:g4wx3 schreef op maandag 21 juli 2008 @ 23:38:
Een typisch voorbeeld om de klasse te gebruiken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27<?php
$form = new FORM('setup0');
$form->set_title('Setup database connection');
$form->set_method('post');
$form->set_action('index.php');
$form->set_input('server');
$form->server->set_label('Database url');
$form->server->set_type('text');
$form->server->set_value($server);
$form->set_input('username');
$form->username->set_label('Username');
$form->username->set_type('text');
$form->username->set_value($username);
$form->set_input('password');
$form->password->set_label('Password');
$form->password->set_type('text');
$form->password->set_value($password);
$form->set_input('submit');
$form->submit->set_type('submit');
$form->submit->set_value('Next');
?>
1 | <form method="post" action="index.php">
|
g4wx3 wijzigde dit bericht 22-07-2008 00:17 (9%)
Tsja, laat ik het zo zeggen daar verschil ik van mening over. IMHO ben je dan meer bezig met een paar extra parsing lagen erbovenop te bouwen.quote:g4wx3 schreef op dinsdag 22 juli 2008 @ 00:09:
dat voorbeeldje deed niet meer dan het printen van deze code;
HTML:
1
2
3
4
5
6
7
8
9
10
11
12<form method="post" action="index.php">
<fieldset>
<legend>Setup database connection</legend>
<input type="hidden" name="form" value="setup0">
<ul class="formmargin">
<li><label for="server"><span>Database url</span><input id="server" name="server" value="localhost" type="text" class="input"></label></li>
<li><label for="username"><span>Username</span><input id="username" name="username" value="root" type="text" class="input"></label></li>
<li><label for="password"><span>Password</span><input id="password" name="password" value="root" type="text" class="input"></label></li>
<li><input value="Next" type="submit" class="input submit"></li>
</ul>
</fieldset>
</form>
Zeker ik nu de code voor me zie, ben ik blij dat ik alles met een klasse parse (al m'n html trouwens)
Website
lordpalf of the flapdrols
Waarom zet je dit in het Slechtste programmeervoorbeelden topic? Vind je het zelf een slecht voorbeeld?quote:g4wx3 schreef op maandag 21 juli 2008 @ 23:38:
Ik ben ooit een klasse begonnen om wat formulieren makkelijk in een te steken. Naarmate ik meer dingen nodig had, heb ik deze er ook op geımplementeerd. Hij is nog niet af, maar hij voldoet aan mijn behoeften. (aangezien ik hem zelf steeds uitbreid)
Ik zou graag de 300 regels code met jullie delen, vooral om hem te verbeteren, maar ook dat jullie er ook gebruik van kunnen maken.
Mijn vraag: Zijn er geïntreseerden? Waar kan ik dit het beste posten?
*De klasse voldoet aan mijn behoefte, ik vraag niemand code werk.
Ik heb nooit PHP oid gestudeerd, maar op deze manier zou ik graag wel wat extra ervarng willen opdoen.
EDIT:
Een typisch voorbeeld om de klasse te gebruiken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27<?php
$form = new FORM('setup0');
$form->set_title('Setup database connection');
$form->set_method('post');
$form->set_action('index.php');
$form->set_input('server');
$form->server->set_label('Database url');
$form->server->set_type('text');
$form->server->set_value($server);
$form->set_input('username');
$form->username->set_label('Username');
$form->username->set_type('text');
$form->username->set_value($username);
$form->set_input('password');
$form->password->set_label('Password');
$form->password->set_type('text');
$form->password->set_value($password);
$form->set_input('submit');
$form->submit->set_type('submit');
$form->submit->set_value('Next');
?>
*set_input is was een slechte naam voor wat de methode eigenlijk doet:
Het maakt een nieuw object van een andere classe met deze naam. In deze clase zijn methoden om je input velden (ea) op te stellen
Zo zijn er dus tal van slordigheden in de classe, die ik al over het hoofd zie ondertussen.
rwb wijzigde dit bericht 22-07-2008 09:03 (89%)
To be, or not to be, those are the parameters
Pardon? Waarom wil je in godsnaam alle HTML parsen door PHP? Je hebt sowieso al de tegenargumenten van Gomez12, maar stel je eens een kleine wijziging voor als je ineens op asp.net aan de slag moet en al de html wordt in de codebehind aangemaakt.quote:g4wx3 schreef op dinsdag 22 juli 2008 @ 00:09:
Zeker ik nu de code voor me zie, ben ik blij dat ik alles met een klasse parse (al m'n html trouwens)
Website TweakU2, met Bio! Heart..pumps blood.Has nothing to do with emotion! I'm Bored
Ik denk dat je met "onze huidige commentaar vorm goed voor de huidige proggers" behoorlijk de crux te pakken hebt. Blijkbaar volstaat het alleen voor programmeurs die al in de code zitten. Zeker met een open source project lijkt het me dat je dan te weinig commentaar hebt.quote:Gomez12 schreef op maandag 21 juli 2008 @ 23:41:
Q: Wat is eigenlijk het devies met commentaar?
Op dit moment ben ik met nog een aantal mensen bezig aan een project en daar komt op zich alleen het hoogstnoodzakelijke commentaar in voor. Iedereen die erbij betrokken is kan de huidige code zo lezen en schrijven, hier is heel weinig geen commentaar voor nodig.
Nu hebben we een nieuwe aanwinst bij ons project en die kan de code niet lezen en schrijven. Hij vraagt dan ook om meer commentaar, alleen voor de huidige proggers is het gewoon duidelijk...
Net zoals je aan een wiskundige geen stelling van pythagoras hoeft uit te leggen, aan een C-progger geen pointers hoeft uit te leggen, volstaat onze huidige commentaar vorm goed voor de huidige proggers.
Nu is de vraag, zijn er regels wat er wel / niet gecommentariseerd moet worden of is dit meer een groepsgevoel?
Want ik gok dat als de nieuwe progger in dit topic code gaat posten ( nadat hij nederlands geleerd heeft) dat velen het met hem eens zouden zijn dat het slechte code betreft, maar de huidige proggers snappen het 100%, wij zijn ook best bereid om wat meer commentaar te schrijven, maar we gaan niet elke regel becommentariseren...
offtopic:
Het betreft hier geen bedrijf, maar een OpenSource programma. Wij zijn dus blij met ongeveer elke extra progger, keiharde kenniseisen zijn dus ook niet echt te stellen
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
quote:HawVer schreef op dinsdag 22 juli 2008 @ 08:59:
#$%@#$ Collega van mij heeft een trigger gemaakt die automatisch verkoopregels opsplitst. Nou werkt het toewijzen van artikelen niet meer, automatisch bestellen werkt niet meer, voorraad wordt niet goed bijgehouden. Of we dat even willen aanpassen...![]()
LinuX-TUX wijzigde dit bericht 22-07-2008 09:26 (8%)
Mijn WebLog