Ubuntu | Apache | Subversion | PostgreSQL | Python
[Alg] Slechtste programmeervoorbeelden deel 3
Pagina: 1 2 3 4 ... 29 30 31 32 33 34 35 36 37 38 39 40 41 last
Nieuw TopicIk heb er mijn allereerste C# (e)book nog eens op nageslagen (het eerste boek waaruit wij op het HBO programmeerles kregen), daarin zie je ook alleen de eerste constructie terug.
In het volgende boek staat deze constructie wel, maar dan slaan we de basis natuurlijk over...waardoor de meeste studenten het dus alsnog niet leren kennen.
slindenau wijzigde dit bericht 12-07-2008 20:45 (28%)
Liberate tutame ex inferis.
"De programma’s die we gebruiken zijn eigenlijk zo ontworpen dat ze allemaal onze aandacht opeisen als een stel dreinende peuters."
Kater? Eerst water, de rest komt later
Bouw mee aan Tweak-City! Topic
Zie dit nog wel regelmatig, is ook geleerd tijdens programeren met C++, While is voorwaarde controle vooraf, DoWhile is voorwaarde controle achterafquote:JanDM schreef op zaterdag 12 juli 2008 @ 20:37:
[...]
Hij geeft aan dat zulke fouten vaker voorkomen, bijvoorbeeld in Java.
Het valt me op dat do..while loops weinig gebruikt worden. Dan zie je zoiets:
C++:
1
2
3
4
5
6
7/* skip header */
string line;
line = file.readLine();
while (isHeader(line)) {
line = file.readLine();
}
Met een do..while zonder code duplicatie:
C++:
1
2
3
4
5/* skip header */
string line;
do {
line = file.readLine();
} while (isHeader(line));
C++:
1 | do {
|
Wouser wijzigde dit bericht 12-07-2008 21:50 (45%)
ook heb ik de switch graag:
Dit stukje komt uit het eerste bestand dat ik open had staan:
PHP:
1 | <?php
|
Zoiets kan dus ook met if, of if elseif, maar ik vind het overzichtelijker, en flexibeler zo.
g4wx3 wijzigde dit bericht 12-07-2008 22:40 (4%)
Java:
1 | switch (string.charAt(index)) {
|
Maar jou ding: Wat als zowel update als delete is gezet <gerommel met input waarschijnlijk>, maar toch. Vind dit nou juist niet overzichtelijker en flexibeler dan ifs.
Enige keren dat ik een switch gebruik is wanneer meerdere condities dezelfde uitvoer moeten geven, voor de rest altijd elseif's. Als je dan een accolade vergeet heb je tenminste nog een parse-error
frickY wijzigde dit bericht 12-07-2008 23:22 (12%)
Ik vind het vreselijk.quote:g4wx3 schreef op zaterdag 12 juli 2008 @ 22:36:
hmm, ik heb waarschijnlijk een eigenaardige hersenkronkel, maar maak wel graag gebruik vaak do-while, op gepast moment uiteraard.
ook heb ik de switch graag:
Dit stukje komt uit het eerste bestand dat ik open had staan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<?php
switch (true)
{
case isset($_POST['delete']):
$query = 'DELETE FROM `store` WHERE `id` = '.$productid.' LIMIT 1;';
$db->query($query);
break;
case isset($_POST['update']):
$query = 'SELECT * FROM `store` WHERE id='.$productid.' LIMIT 1;';
$db->query($query);
$product = $db->fetch();
$title = $product['title'];
$description = $product['description'];
$ref = $product['ref'];
$price = $product['price'];
include('resources/apps/store/product_p1.php');
break;
}
?>
Zoiets kan dus ook met if, of if elseif, maar ik vind het overzichtelijker, en flexibeler zo.
PHP:
1 | <?php
|
Beter nog (want weg is je switch):
PHP:
1 | <?php
|
En dan natuurlijk functies als:
PHP:
1 | <?php
|
Iets dergelijks is een stuk eleganter dan overal strooien met mysql_query, $db->query, $_POST en allerlei low-level stuff. Daar wil je je op applicatieniveau toch helemaal niet meer mee bezighouden? Uiteraard was dit even snel ingeklopte code, maar het gaat om het idee.
I finally found you, my personal slaughter. As an appetizer, I let you taste my daughter!
Call me sick but this is what I need. My only purpose here is for you to feed!
code:
1
2
3
| int nice_stuff(int i, int j) { /* deze line bedoel ik dan */
return i + j;
} |
maar kent PHP dat ? want PHP is een taal zonder types, toch ?!
Niekk wijzigde dit bericht 13-07-2008 11:45 (6%)
Vind jij dat ook niet ?
Sinds PHP5 kan je opgeven of parameters arrays of objecten zijn. De andere standaard types kan je stupide genoeg nog niets mee.quote:Niekk schreef op zondag 13 juli 2008 @ 11:35:
maar kent PHP dat ? want PHP is een taal zonder types, toch ?!
Verder kent PHP wél types en kan je wél casten. Anders is de conversie tussen standaard types automagisch, maar die is vaak genoeg ongewenst (string '123abc' wordt int 123
Voutloos wijzigde dit bericht 13-07-2008 11:46 (3%)
Talkin.nl daily photoblog
Day 984: Oosterplas Panorama
Foto specs: Canon 300D, Tamron 17-50 f/2.8, 1/640s, f/7.1, ISO 200
In PHP:
Hoeveel is 'appel' + 'peer'? Antwoord: 0.
Hoeveel is 'appel' + '42'? Antwoord: 42.
Hoeveel is 'appel' + 42? Antwoord: 42.
In Python:
code:
1
2
3
4
5
6
7
8
| >>> 'appel' + 'peer' 'appelpeer' >>> 'appel' + '42' 'appel42' >>> 'appel' + 42 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: cannot concatenate 'str' and 'int' objects |
Ik weet wel wat ik logischer vind.
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
Numeriek optellen: +
Concat strings: .
In alle overige genoemde talen hangt het dus van de objecten links en rechts van de + af wat er gebeurt, en wanneer er geen match gevonden wordt krijg je een exception.
Bij PHP gaat ie gewoon alles op proberen te tellen
Liberate tutame ex inferis.
"De programma’s die we gebruiken zijn eigenlijk zo ontworpen dat ze allemaal onze aandacht opeisen als een stel dreinende peuters."
Talkin.nl daily photoblog
Day 984: Oosterplas Panorama
Foto specs: Canon 300D, Tamron 17-50 f/2.8, 1/640s, f/7.1, ISO 200
Klopt. Ik vind dat PHP een taal zou moeten zijn die zich wel eits aantrekt van types. Dit voorkomt zoveel fouten. je kan opgeven of iets een array of object moet zijn, maar dit vind ik nutteloos. Waarom niet int vs string o.i.d. ? Dat is juist waar PHP "moeite" mee heeft. (zoals dat 123 voorbeeld dat je gaf)quote:Voutloos schreef op zondag 13 juli 2008 @ 11:46:
[...]
Sinds PHP5 kan je opgeven of parameters arrays of objecten zijn. De andere standaard types kan je stupide genoeg nog niets mee.
Verder kent PHP wél types en kan je wél casten. Anders is de conversie tussen standaard types automagisch, maar die is vaak genoeg ongewenst (string '123abc' wordt int 123). Anyway, ga je mond spoelen en lees het hoofdstuk over data types nog een keer.
Vind jij dat ook niet ?
Talkin.nl daily photoblog
Day 984: Oosterplas Panorama
Foto specs: Canon 300D, Tamron 17-50 f/2.8, 1/640s, f/7.1, ISO 200
je hebt wel gelijk, ik moet zeggen dat ik er niet zo erg veel last van heb. Maar 't is niet goed vind ik.quote:Voutloos schreef op zondag 13 juli 2008 @ 13:00:
Het is halfbakken en het voorkomt hiipe features als method overloading. Het string '123abc' is natuurlijk net zo geforceerd als wat ik in voorgaande post zei.
Vind jij dat ook niet ?
In deze lijn kan ook snel de volgende fout gemaakt worden:quote:Jaap-Jan schreef op zondag 13 juli 2008 @ 12:10:
Leuke vergelijking:
In PHP:
Hoeveel is 'appel' + 'peer'? Antwoord: 0.
Hoeveel is 'appel' + '42'? Antwoord: 42.
Hoeveel is 'appel' + 42? Antwoord: 42.
In Python:
code:
1 2 3 4 5 6 7 8 >>> 'appel' + 'peer' 'appelpeer' >>> 'appel' + '42' 'appel42' >>> 'appel' + 42 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: cannot concatenate 'str' and 'int' objects
Ik weet wel wat ik logischer vind.
PHP:
1 | <?php
|
Dan vergeet je voor het gemak dat PHP een string concatenation operator heeft?quote:Jaap-Jan schreef op zondag 13 juli 2008 @ 12:10:
Leuke vergelijking:
In PHP:
Hoeveel is 'appel' + 'peer'? Antwoord: 0.
Hoeveel is 'appel' + '42'? Antwoord: 42.
Hoeveel is 'appel' + 42? Antwoord: 42.
In Python:
code:
1 2 3 4 5 6 7 8 >>> 'appel' + 'peer' 'appelpeer' >>> 'appel' + '42' 'appel42' >>> 'appel' + 42 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: cannot concatenate 'str' and 'int' objects
Ik weet wel wat ik logischer vind.
En je laat het leukste voorbeeld weg
PHP:
| <?php
|
Geeft 90
Creepy wijzigde dit bericht 13-07-2008 14:13 (4%)
- Ik kan niet zingen, geen gitaar spelen en niet drummen.... ik hou het wel bij Rock Band
Juist dan gaan mensen het weer prachtig vinden (Denk aan de josty band *blauw* *blauw* *rood*, *blauw* *blauw* *rood)
Liberate tutame ex inferis.
"De programma’s die we gebruiken zijn eigenlijk zo ontworpen dat ze allemaal onze aandacht opeisen als een stel dreinende peuters."
Ik heb er opzich geen last van, maar vind het wel een onlogica dat je appelen en peren (zogezegd) bij elkaar kan optellen, dat zou een fout moeten geven, net als if('1'==1) false zou moeten returnen. Dan weet je pas of je programma zonder flaws is geschreven
@hierboven HAHAHA, die is geweldig!
g4wx3 wijzigde dit bericht 13-07-2008 14:24 (24%)
Stuks fruit natuurlijkquote:
More than meets the eye
There is no I in TEAM... but there is ME
Stanzinist | system specs
Iedereen weet dat de peer de tegenpool is van de appel. Het antwoord dat PHP dus geeft is dus fout. Het juiste antwoord moet zijn: "10 peren".quote:Creepy schreef op zondag 13 juli 2008 @ 14:12:
En je laat het leukste voorbeeld weg
PHP:
1<?php
echo "40 appels" + "50 peren";
?>
Geeft 90
Ipsa Scientia Potestas Est
Touching is Good! | Younha \o/
Officiele C regels? Kom op zegquote:Niekk schreef op zaterdag 12 juli 2008 @ 13:28:
de officiele regels voor C zijn nog raarder vind ik.
Nee, dat is het niet. Een continue in de loop zal in het eerste geval conditie opnieuw checken, maar in het tweede geval niet.quote:Wouser schreef op zaterdag 12 juli 2008 @ 21:48:
Inderdaad daarmee verzorg je dus dat je code na do { altijd 1x word uitgevoerd. Maar do while loop is ook equivalent aan:
C++:
1
2
3
4
5
6
7
8
9
10do {
foo();
} while (conditie);
==
while (true) {
foo();
if (!conditie) break;
}
Ik vind dat allesbehalve beter. Als er een keer een foute waarde in $request->action staat ben je de sjaak (zeker als die foute waarde toevallig ook nog eens resulteert in een daadwerkelijke functie). Met een switch is je code duidelijker en veiliger.quote:Cheatah schreef op zaterdag 12 juli 2008 @ 23:59:
Beter nog (want weg is je switch):
PHP:
1
2
3
4
5
6
7
8<?php
// ...
if ( $contract= $model->contract->getRecordById ( $request->contract_id ) ) ) {
call_user_func (
array ( $this, sprintf ( 'handle%sRequest', convert::dash2camel ( $request->action ) ) ),
array ( $request, $contract )
);
}
Als je dat wilt dan kun je === en !== gebruiken - die controleert ook of de typen overeen komen. Op zich vind ik het niet raar dat "1"==1 gelijk is aan true. Ik vind het wel raar dat "boom" == 0 gelijk is aan true.quote:g4wx3 schreef op zondag 13 juli 2008 @ 14:21:
Ik heb er opzich geen last van, maar vind het wel een onlogica dat je appelen en peren (zogezegd) bij elkaar kan optellen, dat zou een fout moeten geven, net als if('1'==1) false zou moeten returnen. Dan weet je pas of je programma zonder flaws is geschreven
.oisyn wijzigde dit bericht 13-07-2008 17:32 (97%)
Pagina: 1 2 3 4 ... 29 30 31 32 33 34 35 36 37 38 39 40 41 last
Dit topic is gesloten.

