Dingen als de IOCCC zijn IMHO een relikwie uit de jaren '80. In de jaren '90 leefde het nog wel een beetje, maar tegenwoordig wordt spaghetticode meestal niet meer als "stoer" gezien.
Aan de andere kant staren mensen zich tegenwoordig wel een beetje blind op alles wat "stoer anno 2007" is: design patterns, web services, en de twee grote datastructure-religies: de kerk van "alles in een RDBMS" en de cult van "alles in een XML doc"
*zucht* mode...
Computer Science: describing our world with boxes and arrows.

1
| return someObject == null ? null : someObject; |
Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds
[ Voor 0% gewijzigd door Kwistnix op 19-06-2007 10:31 . Reden: Gruwelijke schaamte... ]
Oeioei.FallenAngel666 schreef op dinsdag 19 juni 2007 @ 09:18:
Eentje van mij
Java:
1 return someObject == null : null ? someObject;
Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds
Dat merk je wel vaker bij voorbeelden op dit forum en ook in de praktijk, dat je na een verandering niet de rest van je code aanpast en dan rare dingen te zien krijgt...
Fat Pizza's pizza, they are big and they are cheezy
Jammer alleen dat dit een syntax error oplevertFallenAngel666 schreef op dinsdag 19 juni 2007 @ 09:18:
Eentje van mij
Java:
1 return someObject == null : null ? someObject;
Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Lol, idd. : en ? moeten omgedraaid worden..oisyn schreef op dinsdag 19 juni 2007 @ 10:27:
[...]
Jammer alleen dat dit een syntax error oplevert
@.oisyn: Scherp gespot hoor.
Fat Pizza's pizza, they are big and they are cheezy
SLECHT!.oisyn schreef op dinsdag 19 juni 2007 @ 10:27:
[...]
Jammer alleen dat dit een syntax error oplevert
Meer koffie

Scherp hoor
[ Voor 4% gewijzigd door Kwistnix op 19-06-2007 10:33 ]
In de topicwaarschuwing is de <a> niet afgesloten waardoor de tekst 'Quick Reply' klikbaar is, evenals alles eronder...
We are shaping the future

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Au, dat is helemaal pijnlijk.oisyn schreef op dinsdag 19 juni 2007 @ 18:03:
Lol, sterker nog, hij wordt afgesloten met een </html>
We are shaping the future

Anoniem: 13701
26
27
28
29
30
31
32
33
34
35
36
37
38
| $modulename = 'menumanager'; $inline = false; foreach ($cmsmodules as $key=>$value) { if (strtolower($modulename) == strtolower($key)) { $modulename = $key; } } if (isset($modulename)) { |
Het eerste wat ik dacht was, goh, dit is eigenlijk ook zinloos. De enige reden die ik kan verzinnen dat je zoiets wilt doen is dat je niet weet hoe je in dit geval menumanager hebt gespeld (met kleine of hoofdletters). Een beetje secuur werken zou volgens mij beter zijn...
1
2
3
4
5
| Query->Open(); while (!Query->Eof) { // doe dingen, lees velden en vul variabelen... // en vooral: -geen- Query->Next(); neerzetten op deze plek } |
Code was threaded, dus ik maar denken... Vanwaar die 100% cpu load...
Terwijl de app zelf nog wel reageerde.
Ik vergeet ook vaak de break; in de switch:
1
2
3
4
5
6
7
8
9
10
11
| switch (WhatEver) { case OPTION1: { // do dingen1 } case OPTION2: { // do dingen2 } default: { throw Exception("This option does not exist. Call remco_k"); } } |
Met als gevolg dat als WhatEver==OPTION1, dat dan alle andere cases ook uit worden gevoerd.
Soms wil je dat, maar ik wil dat meestal niet.
[ Voor 49% gewijzigd door remco_k op 22-06-2007 09:12 ]
Alles kan stuk.
Dus dat was het...MBV schreef op dinsdag 19 juni 2007 @ 20:49:
Oh, vandaar. Ik heb me al diverse keren afgevraagd waarom in een bepaald topic 'verstuur bericht' me naar pagina 33 stuurde. Dat komt dus gewoon omdat de modjes geen HTML kennen...
http://hawvie.deviantart.com/
Gezien Query vermoedelijk een TDataSet is uit BCB:remco_k schreef op vrijdag 22 juni 2007 @ 09:08:
Eentje van mezelf:
C++:
1 2 3 4 5 Query->Open(); while (!Query->Eof) { // doe dingen, lees velden en vul variabelen... // en vooral: -geen- Query->Next(); neerzetten op deze plek }
Code was threaded, dus ik maar denken... Vanwaar die 100% cpu load...
Terwijl de app zelf nog wel reageerde.
1
2
3
4
| for (Query->First ();!Query->Eof; Query->Next ()) { // ... } |
veel veiliger om zo'n fouten niet tegen te komen
defined... Zoeken zoeken zoeken.. kom ik deze constructie tegen. Bah!
1
2
3
4
5
6
7
8
9
10
11
12
13
| /* De Kleur variabele zijn automatisch gelinkt aan de kolomnaam */ $query = ("SELECT * FROM config_vormgeving WHERE site_id = '$siteID'"); $result = pg_query($query) ; while($row = pg_fetch_array($result)) { foreach ($row as $columnName => $value) { if(!is_numeric($columnName) AND !is_float($columnName)) { $$columnName = $value; } } } |
De constructie is niet 'fout'.. als je hem in een local scope zou gebruiken
Maar hij werd als een 'global' gebruikt

Lets remove all security labels and let the problem of stupidity solve itself
$ phpgrep \$variabele.* = # wordt: $ grep -ir --include=*.php "\$variabele.* =" *
Die gebruik ik echt veel te vaak. Hoofdreden voor het script: ik vergat steeds de * erachter te zetten
Ook zoiets leuks: sendMessage(...). Zonder eclipse is daar niet doorheen te komen: uiteindelijk werd hij pas na 8 function calls verzonden!
[ Voor 17% gewijzigd door MBV op 22-06-2007 11:24 ]
Zelf kwam ik laatst een stuk code tegen waarin je 3x door hetzelfde lijstje liep en niets deed. :x
C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8
Het zou trouwens wel leuk zijn als ik de definitie van een variabele ook kon opzoeken met Eclipse PDT. Of de plekken waar een functie wordt aangeroepen. Maar voor dat soort dingen ben ik toch nog aangewezen op grep...
Geen idee of je weet wat er gebeurd als modjes met HTML gaan spelen in posts en topics? In de HK is er vast nog wel een topic te vinden. Veel ranziger qua HTML gaat het niet worden (en dan past het weer prima in dit topicMBV schreef op dinsdag 19 juni 2007 @ 20:49:
Oh, vandaar. Ik heb me al diverse keren afgevraagd waarom in een bepaald topic 'verstuur bericht' me naar pagina 33 stuurde. Dat komt dus gewoon omdat de modjes geen HTML kennen...
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Deze?Creepy schreef op vrijdag 22 juni 2007 @ 13:43:
[...]
Geen idee of je weet wat er gebeurd als modjes met HTML gaan spelen in posts en topics? In de HK is er vast nog wel een topic te vinden. Veel ranziger qua HTML gaat het niet worden (en dan past het weer prima in dit topic).
Disclaimer: ik ben niet verantwoordelijk voor eventueel vastlopende browsers
1
| If IsMissing(conn) Or (conn Is Nothing) Or IsEmpty(conn) Or IsNull(conn) Then |
Deze regel heb ik zojuist getypt. Ik snap nou echt niet wat in welke situatie geldt. In een échte taal heb je gewoon null, en basta.
* kenneth gromt nog wat na
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Anoniem: 49627
Sterk inderdaad, ik zou alleen voor isEmpty zo op het eerste gezicht een afwijkende invulling kunnen geven (lege arrays/strings). De rest kan inderdaad allemaal hetzelfde betekenen.kenneth schreef op donderdag 12 juli 2007 @ 11:32:
Niet een code fuckup, maar een taal fuckup. VB(A).
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
the less one forgets, the less one remembers
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
for the record:
IsMissing(x) om te testen of een parameter mist (van het type Variant)
IsEmpty(x) om te testen of een variabele leeg is (null/nothing is niet leeg!)
(x Is Nothing) om te testen of een variable Nothing is (moet dus een object óf Nothing zijn)
IsNull(x) om te testen of een variabele null is
[ Voor 64% gewijzigd door abeker op 12-07-2007 14:19 ]
the less one forgets, the less one remembers
http://hawvie.deviantart.com/
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
| update tabelnaam set strvalue=upper(left(strvalue,1))+lower(right(strvalue,length(strvalue)-1)); update tabelnaam set strvalue=REPLACE(strvalue, ' a',' A'); update tabelnaam set strvalue=REPLACE(strvalue, ' b',' B'); update tabelnaam set strvalue=REPLACE(strvalue, ' c',' C'); update tabelnaam set strvalue=REPLACE(strvalue, ' d',' D'); update tabelnaam set strvalue=REPLACE(strvalue, ' e',' E'); update tabelnaam set strvalue=REPLACE(strvalue, ' f',' F'); update tabelnaam set strvalue=REPLACE(strvalue, ' g',' G'); update tabelnaam set strvalue=REPLACE(strvalue, ' h',' H'); update tabelnaam set strvalue=REPLACE(strvalue, ' i',' I'); update tabelnaam set strvalue=REPLACE(strvalue, ' j',' J'); update tabelnaam set strvalue=REPLACE(strvalue, ' k',' K'); update tabelnaam set strvalue=REPLACE(strvalue, ' l',' L'); update tabelnaam set strvalue=REPLACE(strvalue, ' m',' M'); update tabelnaam set strvalue=REPLACE(strvalue, ' n',' N'); update tabelnaam set strvalue=REPLACE(strvalue, ' o',' O'); update tabelnaam set strvalue=REPLACE(strvalue, ' p',' P'); update tabelnaam set strvalue=REPLACE(strvalue, ' q',' Q'); update tabelnaam set strvalue=REPLACE(strvalue, ' r',' R'); update tabelnaam set strvalue=REPLACE(strvalue, ' s',' S'); update tabelnaam set strvalue=REPLACE(strvalue, ' t',' T'); update tabelnaam set strvalue=REPLACE(strvalue, ' u',' U'); update tabelnaam set strvalue=REPLACE(strvalue, ' v',' V'); update tabelnaam set strvalue=REPLACE(strvalue, ' w',' W'); update tabelnaam set strvalue=REPLACE(strvalue, ' x',' X'); update tabelnaam set strvalue=REPLACE(strvalue, ' y',' Y'); update tabelnaam set strvalue=REPLACE(strvalue, ' z',' Z'); |

Doel: Maak van elke eerste letter van een woord een hoofdletter in strvalue.
Bij gebrek aan tijd en aan een fatsoenlijke functie in sybase (vergelijkbaar met ucwords in PHP) dit maar gemaakt...
Ach, het werkt. Echt trots ben ik er niet op. (wel op mijn vindingrijkheid om REPLACE te gebruiken...)
Alles kan stuk.
1
| if( $accountfolder[ strlen( $accountfolder ) - 1 ] != '/') $accountfolder .= '/'; |
1
| $folder = implode( '/' , explode( '/' , $accountfolder )) . '/'; |
Volgens mij hoor je dit met een reguliere expressie op te lossen, maar daar heb ik geen kaas van gegeten
[ Voor 16% gewijzigd door g4wx3 op 12-07-2007 17:42 ]
Anoniem: 84120
*noot: Bovenste heeft eigenlijk mijn voorkeur, alhoewel je hem wat ruimer (as in, enters) of minder ruim (as in, spaties) had kunnen schrijven, kan hem nu moeilijk in een blik overzien.
[ Voor 54% gewijzigd door Anoniem: 84120 op 12-07-2007 17:50 ]
Wat de tweede regel probeert te bereiken is me niet helemaal duidelijk... Misschien expliciete conversie naar string forceren? (Wel een beetje rare manier om dat te doen dan.)
Ik zou het zelf trouwens zo aanpakken: if(substr($accountfolder, -1) != '/') $accountfolder .= '/';
1
| $accountfolder = rtrim($accountfolder,'/') .'/'; |
't Is niet helemaal equivalent omdat een string die eindigt op '//' wordt omgezet naar een einde met een enkele slash. Als je met paden werkt is dat echter juist ook gewenst gedrag.
Regeren is vooruitschuiven
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
| <?php if( $sfile == 'accountmanager' ) include( 'web/accountmanager.php'); if( $sfile == 'setlichtkrant' ) include( 'web/setlichtkrant.php'); if( $sfile == 'setinstellingen' ) include( 'web/setinstellingen.php'); if( $sfile == 'logon' ) { ?> <form method="POST" action="index.php?q=admin" id="logon"> <img src="img/keys.gif" alt="keys" id="keys"> <ul> <li><dl><dt><label for="user">Gebruiker:</label></dt><dd><input type="text" name="user" id="user" value="uniz0"></dd></dl></li> <li><dl><dt><label for="password">Paswoord:</label></dt><dd><input type="password" name="password" id="password" value="huub2007"></dd></dl></li> <li><br><button type="submit" name="login" value="login"><img src="img/goed.gif" alt="login"> Aanmelden</button></li> </ul> <div style="clear:both"></div> </form> <?php } ?> |
voor duidelijkheid het gaat over de 4 verschillend if-js, mja heb geen zin het te herschrijven
edit
toch maar even geven hoe het dan wel moet:
1
2
3
4
5
| if ( $sfile=='logon') { } else include ( 'web/' . $sfile . '.php'); |
[ Voor 6% gewijzigd door g4wx3 op 13-07-2007 09:33 ]
Als hij niet betrouwbaar is moet je het nooit zo doen, eerst error-checken lijkt me...
We are shaping the future
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php $search = 'b'; $string = 'haha blaat'; $do = true; for ($i = 0, $size = strlen($string); $i < $size; $i++) { if ($do) { if ($string[$i] == $search) { $do = false; echo 'Gevonden'; } } } |
Edit: Voordat iedereen denkt dat $string[$i] alleen voor arrays is, dat is er niet fout. Zoiets kun je ook voor strings gebruiken (gelijkend met substring, $string[0] is hetzelfde als substr($string, 0, 1);).
[ Voor 22% gewijzigd door kokx op 13-07-2007 10:00 ]
sfile= $_GET['s'] komt dus recht uit de url van heet beheergedeelte, dus inderdaad checken.Alex) schreef op vrijdag 13 juli 2007 @ 09:37:
Is $sfile een betrouwbare variabele (dus niet $sfile = $_REQUEST['sfile'];) ?
Als hij niet betrouwbaar is moet je het nooit zo doen, eerst error-checken lijkt me...
Hoe? zie hier de merkwaardige manier, wel veilig
1
2
3
4
5
6
7
8
9
10
11
12
| $sfile = 'logon'; if ( isset( $_SESSION['user'] ) ) //doorverwijzen bij ingelogd { $sfile = 'accountmanager'; if ( isset( $_GET['s'] ) ) { if ( $_GET['s'] == 'setlichtkrant' ) $sfile = 'setlichtkrant'; if ( $_GET['s'] == 'setinstellingen' ) $sfile = 'setinstellingen'; } } |
kan naruurlijk beter door $sfile = $_GET['s'] te doen ipv hardcoded
edit
er was ook een functie "is_in_array()", dan kun je zoiets zo schrijven:
1
2
| if ( is_in_array( array( 'setinstellingen', 'setlichtkrant' ) , striptags( $_POST['s'] ) ) ) $sfile = en hoe nu verder, ik weet het al niet meer.. |
[ Voor 13% gewijzigd door g4wx3 op 13-07-2007 10:03 ]
1
2
3
4
| $allowed = array ('setlichtkrant', ...); if (in_array($_GET['s'], $allowed)) include('...'.$_GET['s'].'.php'); else show_login(); |
Iets netter genoteerd:MBV schreef op vrijdag 13 juli 2007 @ 10:02:
WTF? Waarom niet gewoon:
PHP:
1 2 3 4 $allowed = array ('setlichtkrant', ...); if (in_array($_GET['s'], $allowed)) include('...'.$_GET['s'].'.php'); else show_login();
1
2
3
4
5
6
7
8
9
| $allowed = array('setlichtkrant', ...); if (in_array($_GET['s'], $allowed)) { include('...'.$_GET['s'].'.php'); } else { show_login(); } |
Maar dit is een stuk veiliger ja...
We are shaping the future
1
2
3
4
5
6
7
8
9
10
11
12
| $sfile = 'logon'; $allowed = array ('logon'); if ( isset( $_SESSION['user'] ) ) { $sfile = 'accountmanager'; $allowed = array ( 'setlichtkrant', 'accountmanager' , 'setinstellingen'); } if( isset($_GET['s'])) { if (in_array($_GET['s'], $allowed)) $sfile = $_GET['s']; } |
maar dit valt mischien eerder onder optimalisatie, dan onder slecht programeerwerk?
Bij me komen deze dingen er vooral, omdat ik altijd een stuk of 5 bestanden teglijkertijd aan het editten ben, en dan vlug 'tijdelijk' even dingen hardcode in plaats van een net algoritme te vinden.
1
2
3
4
5
6
7
8
9
10
11
| // Bereken de datum van 6 maanden geleden, hoeft niet heel nauwkeurig int weeknr, jaartal run v/week.p(input today, output weeknr, output jaartal) // v/week.p is een routine die weeknummer en jaartal van een gegeven datum teruggeeft. if weeknr > 26 then weeknr = weeknr - 26 else do: // ga altijd uit van 52 weken in een jaar, het hoeft tenslotte niet nauwkeurig jaartal = jaartal - 1 weeknr = 52 - (26 - weeknr) end. p/week.p (input weeknr, input jaartal, output datum) // p/week.p is een routine die adhv weeknr/jaar de datum van de maandag in die week teruggeeft |
Ik heb dit indertijd vervangen door de volgende regel, het hoeft tenslotte niet heel nauwkeurig en een halfjaar is ~183 dagen.
1
| datum = today - 183 |
Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
Dit valt echt onder slecht programmeerwerk. Als je code niet kan lezen, kan je het ook niet onderhouden. Uiteraard doet het wel eventjes iets, maar dat is eigenlijk worse than failure: je leert er niks van. Het is precies bovenstaand gepruts dat ervoor zorgt dat een applicatie niet te onderhouden is. Daarnaast had je nog een gigantisch veiligheidsgat erin zitten, en je zag het geeneensg4wx3 schreef op vrijdag 13 juli 2007 @ 10:19:
het hele stuk heb ik nu veranderd door
[snip]
maar dit valt mischien eerder onder optimalisatie, dan onder slecht programeerwerk?
Bij me komen deze dingen er vooral, omdat ik altijd een stuk of 5 bestanden teglijkertijd aan het editten ben, en dan vlug 'tijdelijk' even dingen hardcode in plaats van een net algoritme te vinden.

Probleem met je code zoals je die net neerzet, is dat het nog steeds onleesbaar is. Je gebruikt $allowed 2x voor verschillende dingen: 1x om rechten te beperken tot login, 1x als instelling welke pagina's gebruikt mogen worden.
Zet dus bovenaan, op de eerste regel van het bestand, de array $allowed, dan kan je daar in de toekomst je pagina's aan toevoegen. Vervolgens zet je ergens daaronder de regel if($loggedin && in_array(...)) neer voor de include, en de else voor de weergave van de login of index-pagina.
http://nl2.php.net/manual/nl/function.strtotime.php:cowgirl schreef op vrijdag 13 juli 2007 @ 10:48:
code:
1 datum = today - 183
Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
1
| echo strtotime ("-6 months") . "\n"; |
[ Voor 11% gewijzigd door MBV op 13-07-2007 11:50 ]
Anoniem: 105463
MBV schreef op vrijdag 13 juli 2007 @ 11:35:
[...]
http://nl2.php.net/manual/nl/function.strtotime.php:
PHP:
1 echo strtotime ("-6 months") . "\n";
cowgirl schreef op vrijdag 13 juli 2007 @ 10:48:
... Taal is Progress.
vandaar dat ik zo blij ben met php, dat symboliseert
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
nou, blij met dat aspect van PHP. Of van welke linux-gebaseerde scripttaal dan ook..oisyn schreef op vrijdag 13 juli 2007 @ 14:34:
Idd, het moet wel heel erg met je gesteld zijn om blij te zijn met PHP
Welke slechte gewoonte die heel veel php-prutsers hebben corrigeert deze regex?
1
| :%s/\[\([a-zA-Z][^$\]]*\)\]/['\1']/gc |
Dit is een vim-commando:%s/in/out/gc vervangt een match met 'in' op alle plekken door 'out', \1 pakt datgene wat tussen \( en \) staat.
Hint: je hebt er pas last van met E_ALL aan

[ Voor 3% gewijzigd door MBV op 13-07-2007 14:57 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
netvor schreef op zaterdag 16 juni 2007 @ 10:49:
^^ Met Hydra.
Dingen als de IOCCC zijn IMHO een relikwie uit de jaren '80. In de jaren '90 leefde het nog wel een beetje, maar tegenwoordig wordt spaghetticode meestal niet meer als "stoer" gezien.
Aan de andere kant staren mensen zich tegenwoordig wel een beetje blind op alles wat "stoer anno 2007" is: design patterns, web services, en de twee grote datastructure-religies: de kerk van "alles in een RDBMS" en de cult van "alles in een XML doc"
*zucht* mode...
*zucht modus hier dus ook!*
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
28
29
30
31
32
33
34
35
36
| $ofs="";'"$(0'+ '..(0'+ 'xa*['+ 'Math'+ ']::R'+ 'ound'+ '([Ma'+ 'th]:'+ ':Pi/'+ '2,1)'+ ')|%{'+ '[cha'+ 'r][i'+ 'nt]"'+ '"$($'+ '("""'+ '"0$('+ '1838'+ '1589'+ '*726'+ '371*'+ '60)$'+ '(877'+ '7365'+ '981*'+ '263*'+ '360)'+ '$(22'+ '2330'+ '793*'+ '1442'+ '99)$'+ '(310'+ '9*37'+ ') ""'+ '"")[' + '($_*' + '3)..' + '($_*'+ '3+2)' + '])""' + ' })"'|iex |
Gooi dit maar eens in de PowerShell-prompt
(Het doet niets gek, het print alleen een paar woorden)
We are shaping the future
Mooi ASCII ARTAlex) schreef op vrijdag 13 juli 2007 @ 15:21:
code:
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 28 29 30 31 32 33 34 35 36 $ofs="";'"$(0'+ '..(0'+ 'xa*['+ 'Math'+ ']::R'+ 'ound'+ '([Ma'+ 'th]:'+ ':Pi/'+ '2,1)'+ ')|%{'+ '[cha'+ 'r][i'+ 'nt]"'+ '"$($'+ '("""'+ '"0$('+ '1838'+ '1589'+ '*726'+ '371*'+ '60)$'+ '(877'+ '7365'+ '981*'+ '263*'+ '360)'+ '$(22'+ '2330'+ '793*'+ '1442'+ '99)$'+ '(310'+ '9*37'+ ') ""'+ '"")[' + '($_*' + '3)..' + '($_*'+ '3+2)' + '])""' + ' })"'|iex
Gooi dit maar eens in de PowerShell-prompt
(Het doet niets gek, het print alleen een paar woorden)
als er flink wat gnu-tool-achtige dingen in voorkomen. PHP, perl, en zo zijn er nog een paar talen.kenneth schreef op vrijdag 13 juli 2007 @ 15:13:
Wanneer is iets linux-gebaseerd?
@hieronder: nee, da's een term die ik net uit heb gevonden. Ik had gehoopt dat wel duidelijk was wat ik bedoelde.
[ Voor 20% gewijzigd door MBV op 13-07-2007 15:58 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Ja top, werkt perfect als je een half jaar van 31 augustus wilt afhalen. Dan krijg je volgens die methode 31 februari.cowgirl schreef op vrijdag 13 juli 2007 @ 10:48:
Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
Die fout heb ik ook eens gemaakt. Ik moest een script laten slapen tot de volgende dag. Die volgende dag bepaalde ik dus door de huidige dag te nemen en er dan 1 bij op te tellen. Werkte prima, tot 31 juli. Daarna wou het script slapen tot 32 juli, dat lukte logischerwijs niet en dus ging het script nog een keer runnen. En nog een keer. En nog een keer.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus
Als ik een applicatie schrijf die afhankelijk is van tijd zorg ik dat ik 1 keer de tijd ingeef en de applicatie dus moedwillig kan laten denken dat het een andere tijd is. Maargoed, als je het zonde van de tijd vindt om bugs op te lossen zou ik er vooral niks aan doen.cowgirl schreef op vrijdag 13 juli 2007 @ 19:52:
Haha, daar heb je inderdaad gelijk in. KOmt nog een stukje extra controle bij.
Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus) wordt daar dus een melding over gedaan en als het de volgende dag wordt opgepakt is het probleem als sneeuw voor de zon verdwenen en wordt het doorgaans toch maar niet opgelost. Zonde van de tijd.
Dus als je een foute berekening maakt moet je het verdoezelen met een functie die een even incorrect antwoord oplevert (29 februari wordt 1 maart), maar geen foutmelding genereert?MBV schreef op vrijdag 13 juli 2007 @ 20:07:
Huh? Je moet gewoon maketime of iets dergelijks gebruiken, zowel in C als in PHP werkt dat prima. Die rekent uit dat 51 januari hetzelfde is als 20 februari, toch?
Dit lijkt me symptoombestijding.
You don't have to be crazy to do this job, but it helps ....
Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.cowgirl schreef op vrijdag 13 juli 2007 @ 19:52:
Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus) wordt daar dus een melding over gedaan en als het de volgende dag wordt opgepakt is het probleem als sneeuw voor de zon verdwenen en wordt het doorgaans toch maar niet opgelost. Zonde van de tijd.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Misschien runde het programma gewoon niet in 2000..oisyn schreef op zaterdag 14 juli 2007 @ 03:45:
[...]
Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Dat was niet gewoon een schrikkeljaar.oisyn schreef op zaterdag 14 juli 2007 @ 03:45:
[...]
Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Schrikkeljaren zijn om de 4 jaar, gerekend vanaf het jaar 0, met uitzondering van alle eeuwwisselingen waarvan het jaartal niet deelbaar is door 400, toch? Dan is het dus wél "gewoon" een schrikkeljaar volgens de regels. Dat het wat complexer in elkaar zit dan veel mensen denken wil niet zeggen dat het bijzonder is.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Anoniem: 224515
Ik ben het alweer vergeten. Maar nu ik er zo over nadenk.. schreef je toen ook 14-07-00? ( en dan gaat het dus over 00 x) )
[ Voor 7% gewijzigd door Anoniem: 224515 op 14-07-2007 12:21 ]
- Het jaar deelbaar is door 4
- Het jaar niet deelbaar is door 100 (eeuwwisselingen)
- Uitzondering: Het jaar deelbaar is door 400 (dus 2000 weer wel)
1
2
3
| public static boolean isSchrikkelJaar(int jaar) { return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0; } |
Anoniem: 14829
Deikke schreef op zaterdag 14 juli 2007 @ 18:05:
Het is een schrikkeljaar mits wanneer:
- Het jaar deelbaar is door 4
- Het jaar niet deelbaar is door 100 (eeuwwisselingen)
- Uitzondering: Het jaar deelbaar is door 400 (dus 2000 weer wel)
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
28
29
30
31
32
33
34
35
36
| public strictfp class Semantics extends Exception { private static volatile transient boolean l = false; private transient volatile static short j = 1; public volatile static transient Exception LogicClass = new Semantics(); protected strictfp synchronized boolean WTF() throws Exception { again: do { l = !l; without: try { assert l ? true : LogicClass instanceof Semantics; continue; } catch (AssertionError e) { j++; LogicClass = new Exception(); break again; } finally { switch (j % 2) { case 0: LogicClass = this; break again; default: break without; } } } while (--j > -10 ? false : true); throw this; } public static void main(String[] args) { Semantics s = new Semantics(); try { System.out.println(s.WTF()); } catch (Exception e) { System.out.print(s.l); } } } |
Lastige taal ook, dat JavaBalusC schreef op zaterdag 14 juli 2007 @ 18:48:
Zoiets dus:Java:Slecht programmeervoorbeeld? Mwah, het is alleen beetje lastig te interpreteren voor de noeps. Een handvol haakjes zal de leesbaarheid wel wat bevorderen
1 2 3 public static boolean isSchrikkelJaar(int jaar) { return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0; }
1
2
3
| function isSchrikkeljaar($jaar) { return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1; } |
Of voor het huidige jaar:
1
2
3
| function isSchrikkeljaar() { return date('L') == 1; } |
[ Voor 2% gewijzigd door EdwinG op 15-07-2007 20:09 . Reden: Oeps, wel 1 gebruiken bij de mktime ]
Bezoek eens een willekeurige pagina
Lastige taal, dat PHP:EdwinG schreef op zondag 15 juli 2007 @ 20:04:
[...]
Lastige taal ook, dat Java
PHP:
1 2 3 function isSchrikkeljaar($jaar) { return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1; }
Of voor het huidige jaar:
PHP:
1 2 3 function isSchrikkeljaar() { return date('L') == 1; }
1
| boolean schrikkeljaar = new GregorianCalendar().isLeapYear(jaar); |
In Java hoef je er niet eens een functie voor te maken. Van elk GregorianCalendar object (de datumklasse in Java) kun je opvragen of het een schrikkeljaar is.
Zonder magische Strings met de letter L. Zonder magische 1 getallen. Compile time alles gecontroleerd.
Hoewel ik het niet logisch blijf vinden dat je een jaar parameter moet meegeven. Gewoon de jaarcomponent uit de Calender instantie trekken zou genoeg geweest zijn...
Fat Pizza's pizza, they are big and they are cheezy
Alleen gaat iedereen het opnieuw uitvinden, dat zal wel in alle talen zo zijn
Pulsher schreef op zondag 15 juli 2007 @ 17:47:
Java:
1 2 3 public strictfp class Semantics extends Exception { ... }
1
| true |
- Om te beginnen is dit absoluut geen exception maar een applicatie (zie main())
- strictfp is hier in mijn optiek zinloos aangezien er geen floating point berekeningen gedaan worden.
- Labels zijn EVIL. (vraag maar aan Sun
- Ternary operator is zinloos.
- without label op een try is volgens mij ook zinloos.
- Transient is in deze context ook niet echt bruikbaar.
- leesbaarheid --.
- strictfp is volgens mij trouwens niet nodig op een individuele methode als het al op de class gedefinieerd is.
Genoeg lelijke dingen gezien?
Ps. Wisten jullie dat Sun smerige spelletjes speelt door het toe te staan dat je op willekeurige plekken in je code (in methoden/initializers) http://java.sun.com mag intypen? Probeer maar eens.
Sluikreclame of is het toch iets anders?
//blaaaaaaa is commentaar en mag dus ook.
Flouw hè?
Fat Pizza's pizza, they are big and they are cheezy
Vergeet niet het gebrek aan consistentie:JKVA schreef op zondag 15 juli 2007 @ 22:02:
[...]
- Om te beginnen is dit absoluut geen exception maar een applicatie (zie main())
- strictfp is hier in mijn optiek zinloos aangezien er geen floating point berekeningen gedaan worden.
- Labels zijn EVIL. (vraag maar aan Sun)
- Ternary operator is zinloos.
- without label op een try is volgens mij ook zinloos.
- Transient is in deze context ook niet echt bruikbaar.
- leesbaarheid --.
- strictfp is volgens mij trouwens niet nodig op een individuele methode als het al op de class gedefinieerd is.
Genoeg lelijke dingen gezien?Ik mis trouwens nog genoeg denk ik.
- static volatile transient
- transient volatile static
- volatile static transient
Dezeflde keywords, op drie achtereenvolgende regels op drie verschillende volgorders.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
[ Voor 3% gewijzigd door Soultaker op 15-07-2007 23:32 ]
Ja, dat bedoelde ik dus. Dat het evil/lelijk/onduidelijk is, was duidelijk, maar ik zocht dus naar het nut van dit voorbeeld. Het leek me inderdaad een soort showcase voor code constructies omdat ik er geen touw aan vast kon knopen.Soultaker schreef op zondag 15 juli 2007 @ 23:07:
Het doel van de code die JVKA gejat heeft, was het laten zien welke constructies en keywords Java kent die je niet zo vaak in gewone code tegenkomt. Lijkt me niet terecht om dat als slecht programmeervoorbeeld aan te halen, want het was nooit als serieuze code (of als goed voorbeeld) bedoelt.
Neuh. Je ziet precies wat die functie doet, en hoe de implementatie niet werkt. Als je dat niet kunt lezen zuig je als Java programmeurBalusC schreef op zaterdag 14 juli 2007 @ 18:48:
Zoiets dus:Java:Slecht programmeervoorbeeld? Mwah, het is alleen beetje lastig te interpreteren voor de noeps. Een handvol haakjes zal de leesbaarheid wel wat bevorderen
1 2 3 public static boolean isSchrikkelJaar(int jaar) { return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0; }
Lastig dat scheiden van 'taal' en 'API'.EdwinG schreef op zondag 15 juli 2007 @ 20:04:
Lastige taal ook, dat Java
PHP:
1 2 3 function isSchrikkeljaar($jaar) { return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1; }
Of voor het huidige jaar:
PHP:
1 2 3 function isSchrikkeljaar() { return date('L') == 1; }

https://niels.nu
1
| std::string szFileName; |
FileName is zijn leven lang geleden begonnen als een ouderwetse array van chars. Op een gegeven moment is iemand erachter gekomen dat het beter is om std::string te gebruiken. Ben ik het op zich helemaal mee eens, doe ik zelf ook voor alles behalve communicatiecode. Maar onze refactoring specialist heeft de naam van de variabele gelaten voor wat het was, en nu impliceert szFileName in al zijn Hongaarse glorie een volstrekt ongerelateerd datatype.

[rant]
En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen. Overal en nergens unreferenced variables, totaal geen naming convention, en stapels compiler warnings. En dit soort vreemde taferelen:
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
28
| new cTestLoadHdp; ; //auxiliary variables char ReturnString[60]; ; //keyboard enumKeySetLow LowKeySet; enumKeySetHigh HighKeySet; LowKeySet=KeySetLow_LOAD_PLAYER; HighKeySet=KeySetHigh_LOAD_PLAYER; char chKl1=0,chKl2=0; int iNOfKl=0; int iKeyCaseState=0;//use in case - read value (use in key underswitch) char achKeyBuffer[256]; int iLenKeyBuffer=0; bool fUseKeyBuffer=false;//use in case - write to true int iKeyCaseStateAfterBuffer=1;//use in case - write any value bool fClearAfterBuffer=true; char chKl1BeforeUseKeyBuffer=0,chKl2BeforeUseKeyBuffer=0; int iNOfKlBeforeUseKeyBuffer=0; ; //state variables for test in main loop int CARD=0; int DSPT=0; int FaxChannel; ; PrintMainHint(); ; |
Waar al die puntkomma's toch voor dienen is mij echt een raadsel. Dacht deze programmeur misschien dat de applicatie beter draait als er een riante hoeveelheid NOP's in de executable zit?
Elke maand of twee krijg ik weer zo'n grote pan met spaghetti van onze mogelijk klinisch gestoorde senior programmer. Geen touw aan vast te knopen. Vervolgens ben ik dus twee maanden aan het aanmodderen en als het er eindelijk een beetje redelijk uitziet krijg ik weer een nieuwe lading meuk, mag de vorige de prullenbak in, en kan ik weer van voor af aan beginnen.
Zucht.
[/rant]
Computer Science: describing our world with boxes and arrows.
JKVA schreef op zondag 15 juli 2007 @ 20:45:
[...]
Lastige taal, dat PHP:
Java:
1 boolean schrikkeljaar = new GregorianCalendar().isLeapYear(jaar);
In Java hoef je er niet eens een functie voor te maken. Van elk GregorianCalendar object (de datumklasse in Java) kun je opvragen of het een schrikkeljaar is.
Zonder magische Strings met de letter L. Zonder magische 1 getallen. Compile time alles gecontroleerd.
Hoewel ik het niet logisch blijf vinden dat je een jaar parameter moet meegeven. Gewoon de jaarcomponent uit de Calender instantie trekken zou genoeg geweest zijn...
1
2
3
4
| dim schrikkeljaar as boolean dim jaar as integer schrikkeljaar = Date.IsLeapYear(jaar) |
WeLkE VeEl oP MsN ZiTTenDE PRoGrAMeUR HeEfT DeRgELijKE BReeZaH CoDE GeScHReVeN??;En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen. Overal en nergens unreferenced variables, totaal geen naming convention, en stapels compiler warnings. En dit soort vreemde taferelen:
C++:
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 28 new cTestLoadHdp; ; //auxiliary variables char ReturnString[60]; ; //keyboard enumKeySetLow LowKeySet; enumKeySetHigh HighKeySet; LowKeySet=KeySetLow_LOAD_PLAYER; HighKeySet=KeySetHigh_LOAD_PLAYER; char chKl1=0,chKl2=0; int iNOfKl=0; int iKeyCaseState=0;//use in case - read value (use in key underswitch) char achKeyBuffer[256]; int iLenKeyBuffer=0; bool fUseKeyBuffer=false;//use in case - write to true int iKeyCaseStateAfterBuffer=1;//use in case - write any value bool fClearAfterBuffer=true; char chKl1BeforeUseKeyBuffer=0,chKl2BeforeUseKeyBuffer=0; int iNOfKlBeforeUseKeyBuffer=0; ; //state variables for test in main loop int CARD=0; int DSPT=0; int FaxChannel; ; PrintMainHint(); ;
'K hEB CoMpATIE MeT jE;
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Deze eerste regel is nog wel het raarst. Hoe werkt die cTestLoadHdp, als je die kunt instantiëren zonder een reference op te slaan? Wat gebeurt er als ik een automatic variable van dit type instantieer? Crasht er dan ergens iets, of lekt de huidige code gewoon geheugen?netvor schreef op vrijdag 20 juli 2007 @ 12:45:
En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen.
[..]
C++:
1 new cTestLoadHdp;
Als dit geen memory leak oplevert omdat er ergens een pointer wordt geregistreed die tzt weer vrijgegeven wordt, dan vraag ik me wel af waarom deze code door middel van een constructor aangeroepen wordt, en niet een static member function.
[ Voor 19% gewijzigd door Soultaker op 20-07-2007 15:49 ]
Inderdaad, het is camelCasing, dat is niet echt het probleem. Waar ik zo moe van wordt is bijvoorbeeld dat de helft van de identifiers Hongaars is en de andere helft niet. Of dat er een hele rits variabelen (dit blokje wat ik postte was slechts een fractie) wordt gedeclareerd met vrijwel identieke namen zonder logische groepering in structs en dergelijke. En sommige variabelen worden in main.cpp gedeclareerd, daar geheel niet gebruikt, maar worden ergens ver weg via 'extern' opgeroepen. Als je dus denkt "ha, redundant variable, ikke weghalen.oisyn schreef op vrijdag 20 juli 2007 @ 15:24:
ik zie er weinig breezah in anders... Gewoon de gebruikelijke camelCasing.

En dat op een vrijdag...

EDIT: @Soultaker: kijk, dat is nou precies het soort vragen dat ik mezelf heb aangeleerd niet meer te stellen, daar krijgt een mens alleen maar hoofdpijn van. Wat mij betreft zijn er twee mogelijk scenarios:
- Het doet iets heel obscuurs wat waarschijnlijk helemaal diep verborgen ligt onder een laag spaghetti. In zulke situaties zeg ik "If it ain't broken, don't fix it."
- Het is inderdaad volstrekt overbodig (ik zie bijvoorbeeld in de constructor een reeks member assignments staan). In dat geval kan het geen kwaad en met een beetje geluk optimiseert de compiler het er wel uit.
[ Voor 29% gewijzigd door netvor op 20-07-2007 16:02 ]
Computer Science: describing our world with boxes and arrows.
Ik vind dat dan ook een erg domme conclusie. Als een variabele niet static is, of niet in een anonymous namespace zit, dan weet je dat hij mogelijkerwijs vanuit een andere sourcefile gebruikt wordt. De gangbare handeling in mijn boekje is dan gewoon even een find-in-all-files op die identifier te doen (of Find References, als je Visual C++ icm Visual Assist gebruikt), en niet zomaar die var weghalen en hopen dat je niets breektnetvor schreef op vrijdag 20 juli 2007 @ 15:53:
En sommige variabelen worden in main.cpp gedeclareerd, daar geheel niet gebruikt, maar worden ergens ver weg via 'extern' opgeroepen. Als je dus denkt "ha, redundant variable, ikke weghalen" dan kom je er pas bij de linker achter dat er iets fout zit.
Desalniettemin, ik ben het er mee eens dat die code erg slecht is opgezet
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Anoniem: 140111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public function CreateSaveObject() { $QueryBuilder = "INSERT INTO ". $this->Tabelnaam ." ("; for($i = 0; $i < (sizeof($this->VeldenArray) - 1); $i++) { $QueryBuilder .= $this->VeldenArray[$i] .', '; } $QueryBuilder .= $this->VeldenArray[(sizeof($this->VeldenArray) - 1)]; $QueryBuilder .= ') VALUES ('; for($i = 0; $i < (sizeof($this->VeldenArray) - 1); $i++) { $QueryBuilder .= '\'".$this->'.$this->VeldenArray[$i].'."\', '; } $QueryBuilder .= '\'".$this->'.$this->VeldenArray[(sizeof($this->VeldenArray) - 1)].'."\')'; echo $QueryBuilder; } |
Net uit zitten poepen, leuk voor de volgende

[ Voor 70% gewijzigd door .oisyn op 20-07-2007 17:33 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Anoniem: 140111
Je krijgt dus een string terug als:
INSERT INTO <tabel> (kolom1, kolom2) VALUES ('". $this->kolom1."', '". $this->kolom2 .'")
[ Voor 45% gewijzigd door Anoniem: 140111 op 21-07-2007 11:41 ]
Is het niet veel makkelijker om de volgende query te genererenAnoniem: 140111 schreef op zaterdag 21 juli 2007 @ 11:03:
Het is de bedoeling dat over een paar weekjes dit code voor me gaat genereren
Je krijgt dus een string terug als:
INSERT INTO <tabel> (kolom1, kolom2) VALUES ('". $this->kolom1."', '". $this->kolom2 .'")

1
| INSERT INTO tabel SET kolom1=value1, kolom2=value2 |
1
2
3
4
5
6
| $sql = 'INSERT INTO tabel SET'; $i = 0; foreach ($array as $key => $val) { $i++; $sql.= ($i !== 1) ? ', ' : '') . "`$key` = '$val'"; } |
.
Anoniem: 14829
Da's geen standaard SQL. Dat is de syntax voor een UPDATE, en er zal vast ook wel een database zijn die 't ondersteunt voor inserts, maar volgens de SQL standaard is 'tOptix schreef op zaterdag 21 juli 2007 @ 12:01:
Is het niet veel makkelijker om de volgende query te genereren![]()
SQL:
1 INSERT INTO tabel SET kolom1=value1, kolom2=value2
1
| INSERT INTO tabel (kolom1, kolom2) VALUES (value1, value2) |
En dat moet via een database omdat...?Anoniem: 140111 schreef op zaterdag 21 juli 2007 @ 11:03:
Het is de bedoeling dat over een paar weekjes dit code voor me gaat genereren
Blijkbaar weet je de kolomnamen al. Dan kun je dus ook gewoon on the fly code genereren, zonder eerst redundante data in een database te zetten.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Anoniem: 140111
Verder genereerd het ook het CREATE TABLE statement, met PK etc
[ Voor 14% gewijzigd door Anoniem: 140111 op 21-07-2007 14:12 ]
De sizeof methode in PHP heeft complexiteit O(n), dus door deze elke keer aan te roepen versplil je de nodige CPU cycles. Over het algemeen kun je beter (qua performance dan iig...) de for-loops over arrays omschrijven naar:Anoniem: 140111 schreef op vrijdag 20 juli 2007 @ 17:09:
Even een brainfart:
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public function CreateSaveObject() { $QueryBuilder = "INSERT INTO ". $this->Tabelnaam ." ("; for($i = 0; $i < (sizeof($this->VeldenArray) - 1); $i++) { $QueryBuilder .= $this->VeldenArray[$i] .', '; } $QueryBuilder .= $this->VeldenArray[(sizeof($this->VeldenArray) - 1)]; $QueryBuilder .= ') VALUES ('; for($i = 0; $i < (sizeof($this->VeldenArray) - 1); $i++) { $QueryBuilder .= '\'".$this->'.$this->VeldenArray[$i].'."\', '; } $QueryBuilder .= '\'".$this->'.$this->VeldenArray[(sizeof($this->VeldenArray) - 1)].'."\')'; echo $QueryBuilder; }
Net uit zitten poepen, leuk voor de volgende
1
2
3
4
| $arr = array(1,2,3); for($i = 0, $s = sizeof($arr); $i < $s; $i++) { // do things on array } |
Een uitzondering is uiteraard als je binnen de loop elementen uit de array verwijdert. In jouw voorbeeld hierboven kun je beter in de method scope eenmalig de size in een variabele opslaan. Nog beter is de juiste PHP methodes gebruiken:
PS: Om te mierenneuken, leer je aan om de single quotes te gebruiken waar double quotes niet nodig zijn voor een string. In theorie zou dit efficienter moeten kunnen zijn (heb nog nooit getest eigenlijk...).
[ Voor 9% gewijzigd door narotic op 21-07-2007 15:56 ]
- = Step Into The Pit | Industrial Strength = -
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Dit topic is gesloten.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.

Het is hier ook niet het "korte vraagjes" topic. Zie deze post