hmm, zo had ik laatst een webservice waarbij in de te sturen XML een optional field stond... maar je moest dit veld dan wel weer verplicht meesturen (maar dan wel leeg)... vonnik nou niet echt logisch...
Klinkt bekend, wij hebben hier ook wel eens dat een oudere versie ineens over een nieuwe heengezet wordt. Dat is vooral een kwestie van zorgvuldig werken en versie beheer goed inrichten.Anoniem: 50825 schreef op dinsdag 09 september 2008 @ 17:54:
Ik heb geen codevoorbeeld maar een verhaaltje:
In een van de applicaties die hier gebruikt wordt, wordt maandelijks een tekstbestand ingelezen. Dit bestand wordt gemaakt door een andere applicatie en verrijkt met gegevens uit een andere database. Dit verrijken wordt handmatig getriggerd door een van de beheerders die hier rondlopen.
Op een gegeven moment hebben we een rfc ingeschoten omdat we wat extra gegevens uit de verrijking in het bestand wilden hebben. Dit werd geregeld. Netjes getest, goed bevonden, in productie gegaan en ook daar draaide het goed.
De volgende maand zou de vernieuwde verrijking weer gedraaid gaan worden. Wat blijkt, krijgen we ineens weer de verrijking zoals hij was voor de aanpassing!
Ik weet niet hoe jullie hierover denken, maar als iets in productie staat, dan blijft het daar staan, totdat er orders zijn gegeven dat het eruit moet of mag. Als we daar al niet eens meer vanuit kunnen gaan, dan kunnen we wel inpakken.
http://hawvie.deviantart.com/
Moet je eens een interface willen schrijven naar de verzendsoftware van TNT. Je mag een CSV of een fixed-width ASCII file naar dat ding sturen. Een van de velden die je erin mag zetten is een XML-bestand met opties. Als je dat ding in CSV zet moet je de quotes escapen met nog een quote... En dan dat XML formaat, echt om te janken! ALs je een pakket met handtekening retour wil hebben, krijg je zoiets:Edwardvb schreef op vrijdag 12 september 2008 @ 12:18:
hmm, zo had ik laatst een webservice waarbij in de te sturen XML een optional field stond... maar je moest dit veld dan wel weer verplicht meesturen (maar dan wel leeg)... vonnik nou niet echt logisch...
XML:
1
2
3
4
5
6
| <packages> <package id="1337"> <meer info, gewicht enzo....> </package> <package id="1234" /> </packages> |
Ehm, juist, heel erg human readable


Mis ik nu iets aan dat stukje XML, dat zit toch niet zo bizar in elkaar? Ik moet zeggen dat ik niet vreselijk vaak met XML werk hoor, dus misschien staat hier iets wat onwijs tegen de standaard in druist. Kan iemand dat even duidelijk maken?MBV schreef op vrijdag 12 september 2008 @ 13:33:
[...]
Moet je eens een interface willen schrijven naar de verzendsoftware van TNT. Je mag een CSV of een fixed-width ASCII file naar dat ding sturen. Een van de velden die je erin mag zetten is een XML-bestand met opties. Als je dat ding in CSV zet moet je de quotes escapen met nog een quote... En dan dat XML formaat, echt om te janken! ALs je een pakket met handtekening retour wil hebben, krijg je zoiets:
XML:
1 2 3 4 5 6 <packages> <package id="1337"> <meer info, gewicht enzo....> </package> <package id="1234" /> </packages>
Ehm, juist, heel erg human readableEn wat ik heel onhandig vond, was dat je zelf je hele bestandsformaat moest definieren, qua kolomindeling enzo. Geef dan gewoon een voorbeeldbestand en een standaardindeling waar je vanaf mag wijken
Regel 3 (denk ik, bij nader inzien is dat misschien alleen ter illustratie).Patriot schreef op vrijdag 12 september 2008 @ 13:45:
[...]
Mis ik nu iets aan dat stukje XML, dat zit toch niet zo bizar in elkaar? Ik moet zeggen dat ik niet vreselijk vaak met XML werk hoor, dus misschien staat hier iets wat onwijs tegen de standaard in druist. Kan iemand dat even duidelijk maken?
[ Voor 8% gewijzigd door riezebosch op 12-09-2008 14:19 ]
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack
Anoniem: 175502
gevonden op de php.net site http://php.net/manual/en/function.unset.php
Here's my variation on the slightly dull unset method. It throws in a bit of 80's Stallone action spice into the mix. Enjoy!
Here's my variation on the slightly dull unset method. It throws in a bit of 80's Stallone action spice into the mix. Enjoy!
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
| <?php /** * function rambo (first blood) * * Completely and utterly destroys everything, returning the kill count of victims * * @param It don't matter, it’s Rambo baby * @return Integer Body count (but any less than 500 and it's not really worth mentioning) */ function rambo() { // Get the victims and initiate that body count status $victims = func_get_args(); $body_count = 0; // Kill those damn punks foreach($victims as $victim) { if($death_and_suffering = @unset($victim)) { $body_count++; } } // How many kills did Rambo tally up on this mission? return($body_count); } ?> |
NClassAtleX schreef op vrijdag 12 september 2008 @ 12:22:
@Roy-t: StarUML?
Ten eerste:
Ik heb volgens mij liever spaghetticode dan lasagnecode btw (om maar een pasta-analogie te noemen), bij spaghetti staat teminste alles bij elkaar.
Ten tweede:
Het aantal regels in een bestand is niet een graadmeter voor kwaliteit, leesbaarheid, functionaliteit of wat dan ook - je kunt hele mooie code kwijt in 900 regels code. Als dat per functie (oid) is dan is het echter wel veel.roy-t schreef op vrijdag 12 september 2008 @ 12:09:
[blabla] 900 regels [/blabla]
Ik heb volgens mij liever spaghetticode dan lasagnecode btw (om maar een pasta-analogie te noemen), bij spaghetti staat teminste alles bij elkaar.
Ten tweede:
is win.Anoniem: 175502 schreef op maandag 15 september 2008 @ 23:09:
PHP:
1 2 3 <?php function rambo() { // bla
Bij spaghetticode staat het juist niet bij elkaar en ik zie de analogie met lasagne niet tenzij je een meerlaagse structuur bedoelt die er juist is om componenten functioneel van elkaar te scheiden en groeperen.YopY schreef op dinsdag 16 september 2008 @ 14:09:
Ik heb volgens mij liever spaghetticode dan lasagnecode btw (om maar een pasta-analogie te noemen), bij spaghetti staat teminste alles bij elkaar.
edit: oeh

edit2: LOL; dan begreep ik 'm dus intuïtief toch goed
Alleen snap ik dan nog steeds niet hoe je met droge ogen durft te beweren liever spaghetticode te hebben (mja, "smaken" verschillen
[ Voor 23% gewijzigd door RobIII op 16-09-2008 14:15 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
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.
Ik verstuur 1 pakket. Om aan te geven dat dit een gewoon pakket is, met als optie dat de handtekening retour moet, moet ik 2x een package in het XML bestand zetten, met een 'magic' id. Ik zou hem zo maken:Patriot schreef op vrijdag 12 september 2008 @ 13:45:
[...]
Mis ik nu iets aan dat stukje XML, dat zit toch niet zo bizar in elkaar? Ik moet zeggen dat ik niet vreselijk vaak met XML werk hoor, dus misschien staat hier iets wat onwijs tegen de standaard in druist. Kan iemand dat even duidelijk maken?
XML:
1
2
3
4
5
6
| <packages> <package> <handtekeningRetour /> <!--meer gegevens --> </package> </packages> |
en voor een pallet:
XML:
1
2
3
4
5
| <packages> <pallet> <!--meer gegevens --> </pallet> </packages> |
en sowieso alle gegevens in XML zetten, niet een XML in CSV

[ Voor 4% gewijzigd door MBV op 16-09-2008 15:13 ]
PHP:
1
2
3
4
5
6
7
8
| foreach ($items as $key => $value) { if (is_null($temp)) { $temp = array(); $temp[] = do_something($value); } else { $temp[] = do_something($value); } } |
Het doet zijn werk wel, maar hoe.
Letterlijk samples overnemen
[ Voor 9% gewijzigd door Sebazzz op 18-09-2008 14:31 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Het doet z'n werk helemaal niet. Wat nou als $temp daarvoor de waarde 5 had oid?
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.
Ik kom regelmatig in oude code van mezelf nog wat artifacts tegen...
is zo'n bekende. Heeft waarschijnlijk ooit wat voor/achter gestaan, en na het debuggen oid haal je dat dan weg, maar ik was vroeger niet zo netjes en dan blijft dit achter
Net als overal mysql_fetch_object gebruiken ipv mysql_fetch_assoc waardoor ik nu soms problemen heb met OOP classes die $blaat->whatever op een andere manier interpreteren
PHP:
1
| echo "".$blaat.""; |
is zo'n bekende. Heeft waarschijnlijk ooit wat voor/achter gestaan, en na het debuggen oid haal je dat dan weg, maar ik was vroeger niet zo netjes en dan blijft dit achter
[ Voor 24% gewijzigd door Peedy op 18-09-2008 15:36 ]
Anoniem: 26351
dan verandert $temp geheel in PHP-stijl automagisch van type.oisyn schreef op donderdag 18 september 2008 @ 14:33:
Het doet z'n werk helemaal niet. Wat nou als $temp daarvoor de waarde 5 had oid?
In dit geval (int -> array) krijgt de progger 'Warning: Cannot use a scalar value as an array' te zien.
Op zich goed dat PHP een warning gooit, maar imo moet de php-progger z'n types in de gaten houden zodat $temp = 5; $temp[] = <iets>; niet voorkomt
Maar dit korte stukje code is waarschijnlijk flink uit zn context gerukt...want met enkel dit stukje code is weinig mis, behalve dan dat $temp niet duidelijk geinitialiseerd is, voordat de foreach() uitgevoerd wordt, wat een E_NOTICE melding oplevert en dat de else wat overbodig is.
Het leukst is lachen om jezelf natuurlijk. Ik heb zelf mijn site van asp door asp2php in php laten overzetten en ben nu alles langzaam werkend aan het maken, omdat ik geen zin tijd had om het allemaal even overnieuw te doen. Dat doe ik later wel, maar de asp-code is van de tijd dat ik net leerde programmeren en ik kom nu toch een mooie tegen.
Ok, toegegeven. In asp zag het er wat beter uit en ik moet hem nog omschrijven in iets wat wel goed is, maar het gaat hier even om het else-statement en vooral die vind ik van mezelf toch wel legendarisch stupide!
asp2php heeft ook leuk vautmeldingen als hij de asp-functies niet kent
PHP:
1
2
3
4
5
6
| $locatieID = $_POST["locatieID"] if ($locatieID==0){ //doet hier iets om $locatieID te genereren } else{ $locatieID=$locatieID; } |
Ok, toegegeven. In asp zag het er wat beter uit en ik moet hem nog omschrijven in iets wat wel goed is, maar het gaat hier even om het else-statement en vooral die vind ik van mezelf toch wel legendarisch stupide!
asp2php heeft ook leuk vautmeldingen als hij de asp-functies niet kent
PHP:
1
| $functie_die_asp2php_niet_kent; // asp2php says 'huh'?: |
[ Voor 0% gewijzigd door Scharnout op 18-09-2008 16:17 . Reden: tikvaut ]
And Bob's your uncle ...
Ik denk helemaal niet dat deze code uit context is gehaald, en dat het juist om tracht te gaan met een ongeïntialiseerde $temp. Anders is de is_null() compleet nutteloos - de bug is dan ook dat er een is_array() mist:Anoniem: 26351 schreef op donderdag 18 september 2008 @ 15:57:
[...]
dan verandert $temp geheel in PHP-stijl automagisch van type![]()
In dit geval (int -> array) krijgt de progger 'Warning: Cannot use a scalar value as an array' te zien.
Op zich goed dat PHP een warning gooit, maar imo moet de php-progger z'n types in de gaten houden zodat $temp = 5; $temp[] = <iets>; niet voorkomt
Maar dit korte stukje code is waarschijnlijk flink uit zn context gerukt...want met enkel dit stukje code is weinig mis, behalve dan dat $temp niet duidelijk geinitialiseerd is, voordat de foreach() uitgevoerd wordt, wat een E_NOTICE melding oplevert en dat de else wat overbodig is.
PHP:
1
2
3
4
5
6
7
8
| foreach ($items as $key => $value) { if (is_null($temp) || !is_array($temp)) { // nu werkt het wel $temp = array(); $temp[] = do_something($value); } else { $temp[] = do_something($value); } } |
Echter, de code blijft natuurlijk een beetje loos zo. Doe dan gewoon:
PHP:
1
2
3
4
5
6
| if (is_null($temp) || !is_array($temp)) $temp = array(); foreach ($items as $key => $value) $temp[] = do_something($value); } |
Of nog beter, iets met array_values().
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: 26351
Zonder een !isset($temp) levert dit nog steeds een E_NOTICE op.oisyn schreef op donderdag 18 september 2008 @ 16:43:
[...]
Echter, de code blijft natuurlijk een beetje loos zo. Doe dan gewoon:
PHP:
1 2 3 4 5 6 if (is_null($temp) || !is_array($temp)) $temp = array(); foreach ($items as $key => $value) $temp[] = do_something($value); }
Of nog beter, iets met array_values().
Ben het met je eens dat de originele code qua structuur nogal loos is.
Het ging me er niet om de notice weg te werken. Ik dacht eerlijk gezegd dat een [] op een int oid gewoon niet werkte.
.edit: en daarin had ik dus gelijk. Dus:
right back at ya
.edit: en daarin had ik dus gelijk. Dus:
[ Voor 21% gewijzigd door .oisyn op 18-09-2008 17:30 ]
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: 26351
Inderdaad, dat postte ik ook al....zo'n 3 kwartier eerder.oisyn schreef op donderdag 18 september 2008 @ 17:25:
Het ging me er niet om de notice weg te werken. Ik dacht eerlijk gezegd dat een [] op een int oid gewoon niet werkte.
.edit: en daarin had ik dus gelijk. Dus:right back at ya
Anoniem: 26351 schreef op donderdag 18 september 2008 @ 15:57:
[...]
In dit geval (int -> array) krijgt de progger 'Warning: Cannot use a scalar value as an array' te zien.
kleffe boel hier
In PHP kijk je met isset() of een variabele al bestaat, niet met is_null()..oisyn schreef op donderdag 18 september 2008 @ 16:43:
[...]
Ik denk helemaal niet dat deze code uit context is gehaald, en dat het juist om tracht te gaan met een ongeïntialiseerde $temp. Anders is de is_null() compleet nutteloos - de bug is dan ook dat er een is_array() mist:
PHP:
1 2 3 4 5 6 7 8 foreach ($items as $key => $value) { if (is_null($temp) || !is_array($temp)) { // nu werkt het wel $temp = array(); $temp[] = do_something($value); } else { $temp[] = do_something($value); } }
Echter, de code blijft natuurlijk een beetje loos zo. Doe dan gewoon:
PHP:
1 2 3 4 5 6 if (is_null($temp) || !is_array($temp)) $temp = array(); foreach ($items as $key => $value) $temp[] = do_something($value); }
Of nog beter, iets met array_values().
Dus de correcte code is:
PHP:
1
2
3
4
5
6
7
8
| foreach ($items as $key => $value) { if (!isset($temp) || !is_array($temp)) { $temp = array(); } $temp[] = do_something($value); } |
En ik zou dan liever die if nog boven de foreach zetten.
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
Anoniem: 178962
Checken op null en kijken of een variabele geset is is natuurlijk compleet iets anders.
Welke er 'correct' is hangt helemaal van de situatie af, in PHP maakt het geen drol uit, zie ook: http://nl.php.net/manual/en/types.comparisons.php
Het voordeel wat is_null dan heeft is dat het ook op functies gebruikt kan worden.
Welke er 'correct' is hangt helemaal van de situatie af, in PHP maakt het geen drol uit, zie ook: http://nl.php.net/manual/en/types.comparisons.php
Het voordeel wat is_null dan heeft is dat het ook op functies gebruikt kan worden.
[ Voor 17% gewijzigd door Anoniem: 178962 op 23-09-2008 23:43 ]
Uhm, volgens mij is !isset hetzelfde als is_null. Als we dan toch gaan zeveren: volgens mij kan je dat weer verder evalueren naar === null.
Och, tijdstip en niet refreshenAnoniem: 178962 schreef op woensdag 24 september 2008 @ 00:03:
[...]
Jup, daarom zeg ik: Onder PHP maakt het geen drol uit.
Zoals staat op de pagina waarvan ik een link gaf
[ Voor 49% gewijzigd door TeeDee op 24-09-2008 15:59 ]
Heart..pumps blood.Has nothing to do with emotion! Bored
Anoniem: 178962
Jup, daarom zeg ik: Onder PHP maakt het geen drol uit.TeeDee schreef op dinsdag 23 september 2008 @ 23:47:
Uhm, volgens mij is !isset hetzelfde als is_null. Als we dan toch gaan zeveren: volgens mij kan je dat weer verder evalueren naar === null.
Zoals staat op de pagina waarvan ik een link gaf
Maakt toch zeker wel een drol uit. Als je is_null over een daadwerkelijk niet bestaande variabel heen haalt, dan krijg je een warning notice. Dat is met isset niet het geval.
Verder is isset een taalconstructie, en geen functie. Je kunt hem dus alleen direct gebruiken, en niet als callback gebruiken of als variabele functie aanroepen. Ook kun je als waarde alleen een variabel meegeven, niet bijvoorbeeld de returnwaarde van een functie. Dit kan bij is_null wel.
Verder is isset een taalconstructie, en geen functie. Je kunt hem dus alleen direct gebruiken, en niet als callback gebruiken of als variabele functie aanroepen. Ook kun je als waarde alleen een variabel meegeven, niet bijvoorbeeld de returnwaarde van een functie. Dit kan bij is_null wel.
[ Voor 47% gewijzigd door Michali op 24-09-2008 09:01 ]
Anoniem: 260596
Mogen domme foutjes ook?
Heb ik 2 dagen zitten zoeken op wat de fout hier kon zijn;
Dat was een tijdrovende typo
Ook vergeet ik regelmatig de result op het einde va neen functie, en ik maar debuggen.
Heb ik 2 dagen zitten zoeken op wat de fout hier kon zijn;
Delphi:
1
| tempString := MidStr(tempString, nameIndex1, (nameIndex2 - nameIndex2)); |
Dat was een tijdrovende typo

Ook vergeet ik regelmatig de result op het einde va neen functie, en ik maar debuggen.

Anoniem: 178962
Dat doet iedereen volgens mij wel eens, een geniale functie schrijven en dan de return vergetenAnoniem: 260596 schreef op woensdag 24 september 2008 @ 14:45:
Ook vergeet ik regelmatig de result op het einde va neen functie, en ik maar debuggen.
Een beetje IDE waarschuwt dan ook dat er geen return value isAnoniem: 178962 schreef op woensdag 24 september 2008 @ 15:13:
[...]
Dat doet iedereen volgens mij wel eens, een geniale functie schrijven en dan de return vergeten
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Sterker nog: Een C# code zal niet eens compileren. Raar dat Java dat wel doet danRobIII schreef op woensdag 24 september 2008 @ 15:14:
[...]
Een beetje IDE waarschuwt dan ook dat er geen return value is
[ Voor 6% gewijzigd door Sebazzz op 24-09-2008 15:22 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Java compiled zeer zeker niet met een niet-void functie zonder return waarde.Sebazzz schreef op woensdag 24 september 2008 @ 15:21:
Sterker nog: Een C# code zal niet eens compileren. Raar dat Java dat wel doet dan
https://niels.nu
Dit is dan ook een Delphi functie, maar ook Delphi hoort gewoon te waarschuwen (nadruk op waarschuwen, het compilet wel). Dat doet hij bij mij iig wel.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Ow, Delphi dan...
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Als je eerst het raamwerk (iets wat veel IDE's ook doen) van je functie maakt heb je dus al "een" return-value en zal je dus ook geen warnings/errors krijgen hierover
Het kan best hoor 
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
| public bool AreWeHappy(string foo) { bool retval = false; if (String.IsNullOrEmpty(foo)) { return retval; } if (foo == "bar") { // Do some magic retval = true; } if (foo.Length == 3) { // Do some more magic // forget to set retval } return retval; } |
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Deze returned toch gewoon 'false"kenneth schreef op woensdag 24 september 2008 @ 15:35:
Het kan best hoor
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 public bool AreWeHappy(string foo) { bool retval = false; if (String.IsNullOrEmpty(foo)) { return retval; } if (foo == "bar") { // Do some magic retval = true; } if (foo.Length == 3) { // Do some more magic // forget to set retval } return retval; }
Maar als je wil dat bij een drieletterige waarde in foo hij true retourneert, dan gaat hij fout bij iedere string, behalve "bar"
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Hoezo retVal is toch al gezet op false, dat er daarna niks mee gebeurt is toch geen probleem?
Edit:
Laat maar, ligt er natuurlijk aan wat je verwacht, maar er is wel een return value... Alleen niet de 'true' die je verwacht...
Edit:
Laat maar, ligt er natuurlijk aan wat je verwacht, maar er is wel een return value... Alleen niet de 'true' die je verwacht...
[ Voor 44% gewijzigd door glmona op 24-09-2008 15:43 ]
Ja okay, syntactisch is er een return, maar semantisch niet ... ligt net aan hoe je het interpreteert
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Daar ging het toch over hierboven. Dat java dit niet accepteert als er geen waarde is...kenneth schreef op woensdag 24 september 2008 @ 15:44:
Ja okay, syntactisch is er een return, maar semantisch niet ... ligt net aan hoe je het interpreteert
Anoniem: 178962
Inderdaad, menig programmeur zal werken met een retval variabele welke een default waarde mee krijgt. Op die manier kan de IDE en de compiler je niet redden als de return waarde dan niet geset wordt.
Maar goed, als je van jezelf weet dat je zoiets vaak vergeet ben je er met debuggen ook heel snel achter.
Maar goed, als je van jezelf weet dat je zoiets vaak vergeet ben je er met debuggen ook heel snel achter.
Dat komt omdat Delphi de return waarde als een variabele (Result) behandelt. De result waarde kun je instellen zonder meteen uit de functie te springen. De praktijk wijst uit dat dit erg vaak spaghetti code oplevert. Zonder de result waarde te initialiseren kan er van alles in terecht komen. Dat kan erg interessante bugs opleveren.
http://hawvie.deviantart.com/
Net als in VB dus, waar de returnvalue de naam van de functie is

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Er wordt gewoon nogsteeds een waarde geretourneerd. Dus syntactics is er niks mis met de code. Dat je een stuk 'vergeet' is compleet wat anders.
Dan is die mijnheer 'menig' danook gewoon fout bezig. Het is gewoon fout een default waarde in te stellen als deze niet nodig is/gebruikt wordt.Anoniem: 178962 schreef op woensdag 24 september 2008 @ 15:48:
Inderdaad, menig programmeur zal werken met een retval variabele welke een default waarde mee krijgt. Op die manier kan de IDE en de compiler je niet redden als de return waarde dan niet geset wordt.
[ Voor 45% gewijzigd door Hydra op 24-09-2008 19:02 ]
https://niels.nu
Anoniem: 178962
Mwah, daar ben ik het niet mee eens.
Zoals het voorbeeld van kenneth vind ik gewoon nette code.
Het is dan ook zeker nodig en wordt gewoon gebruikt.
Zoals het voorbeeld van kenneth vind ik gewoon nette code.
Het is dan ook zeker nodig en wordt gewoon gebruikt.
[ Voor 21% gewijzigd door Anoniem: 178962 op 24-09-2008 19:05 ]
Dat vindt je nette code? Of return direct, of gebruik een return variabele en return alleen aan het einde van je functie, maar ga dat niet door elkaar gebruiken (wat in het voorbeeld gebeurd).Anoniem: 178962 schreef op woensdag 24 september 2008 @ 19:04:
Mwah, daar ben ik het niet mee eens.
Zoals het voorbeeld van kenneth vind ik gewoon nette code.
Het is dan ook zeker nodig en wordt gewoon gebruikt.
"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
Ach, als dat het voorbeeld van slecht programmeerwerk is, dan kan ik hier de hele PHP-codebase van mijn werkgever wel dumpen. En dan maak ik me totaal geen zorgen over de manier van returnen, ik weet nog wel wat ergere dingen
Je mag inderdaad blij zijn als dat alles is ja
"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
werk ik nu wel mee (de .net variant). Ik vond php altijd heel geslaagd, maar nu ik met C# en asp.net werk begin ik wel steeds meer te zien dat php niet 100% een programmeertaal is. Ik programmeerde vrij laks in php, maar dat kan ook en daardoor maak je rare constructies die later niet blijken te werken.
Return gewoon direct mensen, het is leesbaarder (+ makkelijker te debuggen) en scheelt een lokale variabele en jump instructie
[ Voor 12% gewijzigd door prototype op 24-09-2008 21:10 ]
Ja. Dat ben ik het ook mee eens. Ik vond PHP echt de heilige graal wat webprogrammeren betreft, en ASP een achterlopertje (niet .NET). Maar nu ik steeds meer met C#/.NET werk ben ik wel teleurgesteld in PHP, bijvoorbeeld dat er standaard geen MySQL object is en dat soort dingen. Met ASP.NET kunnen dat soort dingen prima en kan je ook nog eens C# gebruiken, wat wil je nog meer...418O2 schreef op woensdag 24 september 2008 @ 20:39:
werk ik nu wel mee (de .net variant). Ik vond php altijd heel geslaagd, maar nu ik met C# en asp.net werk begin ik wel steeds meer te zien dat php niet 100% een programmeertaal is. Ik programmeerde vrij laks in php, maar dat kan ook en daardoor maak je rare constructies die later niet blijken te werken.
Met Visual Studio is geen code niet te debuggenprototype schreef op woensdag 24 september 2008 @ 21:10:
makkelijker te debuggen
[ Voor 16% gewijzigd door Sebazzz op 24-09-2008 21:42 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Anoniem: 178962
Mwah dat voorbeeld is natuurlijk erg kort door de bocht, maar stel je hebt zoiets:Creepy schreef op woensdag 24 september 2008 @ 20:03:
[...]
Dat vindt je nette code? Of return direct, of gebruik een return variabele en return alleen aan het einde van je functie, maar ga dat niet door elkaar gebruiken (wat in het voorbeeld gebeurd).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| function foo(bar) { retval = 0 if (bar > 5) { // extreem ingewikkelde formules die retval setten adhv bar ofzo } if (retval < 5) { // nog wat extreme formules met retval en andere zaken } if (retval == 0) { // shit 0 is een probleem return retval // <--- vergeet je dan bijvoorbeeld } // nog wat moeilijks wat niet gedaan mag worden als retval 0 is if (retval > 5) { // doe nog iets met retval return retval } // nog iets return retval } |
Dan vind ik dat een goede manier om het op te lossen, het hangt nogal van de situatie af natuurlijk.
[ Voor 7% gewijzigd door Anoniem: 178962 op 24-09-2008 21:45 ]
Wat zou jij dan doen met guard clauses? Ik ben op zich voor één return punt, maar ik ga niet een hele functie doorlopen als ik al weet dat ik niks heb aan een null value, anders krijg je van die nutteloze nesting:Creepy schreef op woensdag 24 september 2008 @ 20:03:
[...]
Dat vindt je nette code? Of return direct, of gebruik een return variabele en return alleen aan het einde van je functie, maar ga dat niet door elkaar gebruiken (wat in het voorbeeld gebeurd).
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
| public int functie(string a, string b) { int retval; if (!(a.IsNullOrEmpty() && b.IsNullOrEmpty)) { // functie // ... // nog meer regels // .... retval = 42; } else { // ohja, we moeten die nullwaardes nog afhandelen ... retval = 0; } return retval; } |
Dan heb ik liever:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public int functie(string a, string b) { int retval; if (a.IsNullOrEmpty() || b.IsNullOrEmpty) { return 0; } // zo, checks gehad, we kunnen nu gewoon verder // ... retval = 42; // ... return retval; } |
Even los van het feit dat je in dit specifieke geval misschien een ArgumentException zou gebruiken.
Waar je wel meerdere exit points hebt, maar toch een mooie scheiding tussen je guard clauses en de feitelijke functie.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Anoniem: 178962
Of de situatie waarbij retval een verzameling is die je op meerdere manieren vanuit meerdere bronnen moet vullen.
Tis toch wel een vrij standaard iets zegmaar.
Tis toch wel een vrij standaard iets zegmaar.
@Kenneth die zogenaamde guard clauses die jij noemt zijn (vaak) gewoon precondities. Met design by contract en met seperations of concern in 't achterhoofd zou je die niet moeten verweven in je business logics om mee te beginnen. In plaats daarvan zou je moeten overwegen om het mee te nemen als meta data of als een aspect die dient gedraaid te worden voordat de methode aangeroepen wordt.
In het algemeen echter, als je uiteindelijk toch eindigt met meerdere clausules die verschillende returns kunnen opwekken, zou je kritisch naar je code moeten kijken om te zien of je niet het e.e.a. kan refactoren naar hulp methoden. ipv:
doe je:
Code dien je gewoon zo georganiseerd en kort (niet te natuurlijk) mogelijk te houden om 't leesbaar en onderhoudbaar te houden. Om het nogmaals te benadrukken, dat direct returnen maakt een stacktrace bestuderen vele malen eenvoudiger. Als je een single return gebruikt binnen elke functie is 't nog steeds niet deterministisch welke branch die return heeft veroorzaakt als je de stacktrace bekijkt en op regelnummer afgaat (je krijgt altijd diezelfde return regel en moet zelf nagaan welke guards zijn getriggered om tot die value te komen). Vele malen lastiger om te debuggen imho dan gewoon meteen zien op welke regel de meer deterministische directe return staat.
In het algemeen echter, als je uiteindelijk toch eindigt met meerdere clausules die verschillende returns kunnen opwekken, zou je kritisch naar je code moeten kijken om te zien of je niet het e.e.a. kan refactoren naar hulp methoden. ipv:
C#:
1
2
3
4
5
6
7
8
9
| public int foo(string a, string b) { if(someguard) { //hele lap code return retval; } else { //hele lap code return retval + 1; } } |
doe je:
C#:
1
2
3
4
5
6
7
| public int foo(string a, string b) { if(someguard) { return this.someFoo(); } return this.someOtherFoo(); } |
Code dien je gewoon zo georganiseerd en kort (niet te natuurlijk) mogelijk te houden om 't leesbaar en onderhoudbaar te houden. Om het nogmaals te benadrukken, dat direct returnen maakt een stacktrace bestuderen vele malen eenvoudiger. Als je een single return gebruikt binnen elke functie is 't nog steeds niet deterministisch welke branch die return heeft veroorzaakt als je de stacktrace bekijkt en op regelnummer afgaat (je krijgt altijd diezelfde return regel en moet zelf nagaan welke guards zijn getriggered om tot die value te komen). Vele malen lastiger om te debuggen imho dan gewoon meteen zien op welke regel de meer deterministische directe return staat.
Ok, ik ben vandaag toch iets tegengekomen. Kijk dit eens:
Dat is overigens niet alles, de gehele website is echt één grote What The Fuck. Ik ben nog NOOIT zulke troep tegen gekomen.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php $sqlstring = "UPDATE `" . mysession("targettable") . "` SET "; $sqlboolean = " "; //print_r($_POST); foreach($_POST as $colname => $value){ if (substr(strtolower($colname), 0, 3) == "col") { $sqlstring .= $sqlboolean . " `" . substr($colname, 6) . "` = " . savesql(substr($colname,3,3), $value); $sqlboolean = ", "; } } $sqlstring .= " WHERE id=" . $targetid; ?> |
Dat is overigens niet alles, de gehele website is echt één grote What The Fuck. Ik ben nog NOOIT zulke troep tegen gekomen.
[ Voor 9% gewijzigd door Patriot op 29-09-2008 19:31 ]
Dat is wel erg algebra ja
Lekker veilig ook...
Nog wat leuke voorbeeldjes.
Wat zou hij gedacht hebben toen hij dit schreef..
Nog één, en hier gebruikt hij hem:
Euhh..?
Nouja, dacht alles wel gehad te hebben: Wat rare functies, en een zeer vreemde manier van updaten van tabellen. Die manier was dan wel onveilig, maar dat gebeurde in een redelijk goed beveiligde omgeving dus zo erg was het niet.
Even verder gekeken snapte ik er echter ook geen snars van. Het openen van databases (althans, naar de functienamen gekeken) gebeurde echt de vreemdste dingen. Variabelen die uit het niets leken te verschijnen, en vreemde functies: Ik volgde het niet. Toch eens kijken hoe hij dat geregeld heeft. Ah, een bestandje db_utils.php, eens zien. Kijkt en huiver over wat ik aantrof:
In de algemene config:
En vervolgens dan db_utils.php:
Ik weet dat het een flinke brok is, maar wilde het toch echt allemaal even laten zien. Er moet toch iemand wel zwaar aan de hallucinerende middelen geweest zijn om dit soort zooi te produceren
PHP:
1
2
3
| function cstr($val) { return (isset($val)) ? $val : ""; } |
Wat zou hij gedacht hebben toen hij dit schreef..
PHP:
1
2
3
4
5
6
7
| function notnull($thisinput){ if (isset($thisinput)) { return $thisinput; } else { return ''; } } |
Nog één, en hier gebruikt hij hem:
PHP:
1
2
3
4
5
| function myhtml($thisinput){ $thisinput = NotNull($thisinput); $thisinput = str_replace("'", 'html_entity_voor_enkele_quote', $thisinput); return str_replace('"', 'html_entity_voor_dubbele_quote', $thisinput); } |
Euhh..?
offtopic:
Hij gebruikt de echte entities, maar dat vind GoT niet leuk
Hij gebruikt de echte entities, maar dat vind GoT niet leuk
Nouja, dacht alles wel gehad te hebben: Wat rare functies, en een zeer vreemde manier van updaten van tabellen. Die manier was dan wel onveilig, maar dat gebeurde in een redelijk goed beveiligde omgeving dus zo erg was het niet.
Even verder gekeken snapte ik er echter ook geen snars van. Het openen van databases (althans, naar de functienamen gekeken) gebeurde echt de vreemdste dingen. Variabelen die uit het niets leken te verschijnen, en vreemde functies: Ik volgde het niet. Toch eens kijken hoe hij dat geregeld heeft. Ah, een bestandje db_utils.php, eens zien. Kijkt en huiver over wat ik aantrof:
In de algemene config:
PHP:
1
2
3
| $RS = ''; $RSARRAY = ''; $CONN = ''; |
En vervolgens dan db_utils.php:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| function Db_Open($sqlstring) { Db_OpenY($sqlstring, true); } function Db_OpenW($sqlstring) { Db_OpenY($sqlstring, false); } function Db_OpenReturnResultset($sqlstring) { global $RS, $CONN, $DSNNAAM; $rs2 = Db_OpenX($CONN, $DSNNAAM, $sqlstring); return $rs2; } function Db_OpenY($sqlstring, $do_open) { global $RS, $CONN, $DSNNAAM, $rs; $RS = Db_OpenX($CONN, $DSNNAAM, $sqlstring); if ((mysql_num_rows($RS) != 0) && ($do_open)){ $rs = mysql_fetch_assoc($RS); } } function Db_OpenX($connname, $srcname, $sqlstring) { Db_OpenConn($connname, $srcname); $hulp = mysql_query($sqlstring); if (!$hulp) { die("ongeldige query met sqlstring <br>$sqlstring"); } return $hulp; } function Db_OpenConn($connname, $srcname) { global $DBUN, $DBPW, $DBHOST; $connname = mysql_connect($DBHOST, $DBUN, $DBPW) or die("Kan geen verbinding maken<br>"); mysql_select_db($srcname, $connname) or die("Kan database '$srcname' niet selecteren<br>"); } function Db_GetNewId($tablename) { global $DSNNAAM; return Db_GetNewIdSource($DSNNAAM, $tablename); } function Db_GetNewIdSource($srcname, $tablename) { $tempconn = ''; Db_OpenConn($tempconn, $srcname); mysql_query("INSERT INTO `$tablename` (id) VALUES (NULL)"); return mysql_insert_id(); } function Db_OpenArray($sqlstring){ global $DSNNAAM, $RSARRAY; $RSARRAY = Db_OpenArraySource($DSNNAAM, $sqlstring); } function Db_OpenArraySource($srcname, $sqlstring){ global $CONN; return Db_OpenArrayX($CONN, $srcname, $sqlstring); } function Db_OpenArrayX($connname, $srcname, $sqlstring){ $tempopenrsarray = Db_OpenX($connname, $srcname, $sqlstring); if (mysql_num_rows($tempopenrsarray) == 0) { $thisarray = array(); } else { while($row = mysql_fetch_assoc($tempopenrsarray)) { $thisarray[] = $row; } } return $thisarray; } function Db_Get_Value_X($srcname, $sqlstring, $thisfield) { $newconn = ''; $NEWRS = Db_OpenX($newconn, $srcname, $sqlstring); if (mysql_num_rows($NEWRS) != 0) { $newrs = mysql_fetch_assoc($NEWRS); return $newrs[$thisfield]; } return Null; } |
Ik weet dat het een flinke brok is, maar wilde het toch echt allemaal even laten zien. Er moet toch iemand wel zwaar aan de hallucinerende middelen geweest zijn om dit soort zooi te produceren
Anoniem: 156876
Haha, dat is wel héééél erg. 
Kan nu zo 1-2-3 niks vinden van mezelf, weet wel dat 'k een aantal jaar geleden flink wat grappige "php"-code gemaakt heb.
Zal binnenkort eens mijn archief opentrekken, dan kunnen we ook weer lachen.
Kan nu zo 1-2-3 niks vinden van mezelf, weet wel dat 'k een aantal jaar geleden flink wat grappige "php"-code gemaakt heb.
Vooral:
Jezus!
!
PHP:
1
2
3
4
5
6
| function Db_GetNewIdSource($srcname, $tablename) { $tempconn = ''; Db_OpenConn($tempconn, $srcname); mysql_query("INSERT INTO `$tablename` (id) VALUES (NULL)"); return mysql_insert_id(); } |
Jezus!
Ik heb een keer een complete website voor mezelf (portofolio, index, gastenboek, nieuwsberichten) gemaakt in één php pagina gemaakt. Inclusief data opslag in PHP commentaar
Jammer dat ik niet de code meer heb maar ik vond het een prachtig stukje slim én dom programmeren.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Anoniem: 156876
Zou je dat even toe kunnen lichten? en dan vooral dat slimme gedeelteSebazzz schreef op maandag 29 september 2008 @ 21:28:
Ik heb een keer een complete website voor mezelf (portofolio, index, gastenboek, nieuwsberichten) gemaakt in één php pagina gemaakt. Inclusief data opslag in PHP commentaarJammer dat ik niet de code meer heb maar ik vond het een prachtig stukje slim én dom programmeren.
PHP:
zoiets?
1
2
3
4
5
6
7
8
9
10
| <?php if ($page == "gastenboek") { echo "welkom in mijn gastenboek!"; } elseif($page == "contact") { echo "contactpagina"; } ?> |
Kwam ik laatst tegen

PHP:
1
2
3
| function db_foo ($query, $join = "") { //Hele $query werd uit elkaar gesloopt, vervolgens de join er bij in gefrut, dan weer in elkaar gezet en aan mysql gevoerd } |
[ Voor 6% gewijzigd door SyphOn op 29-09-2008 22:26 ]
Anoniem: 156876
En het is slim om alle code in één file te gooien?Stephan4kant schreef op maandag 29 september 2008 @ 21:55:
PHP:zoiets?
1 2 3 4 5 6 7 8 9 10 <?php if ($page == "gastenboek") { echo "welkom in mijn gastenboek!"; } elseif($page == "contact") { echo "contactpagina"; } ?>
Het slimme eraan vind ik dat ik het voor elkaar kreeg om alles inclusief data opslag in één php bestand te krijgen.
Bovenaan het bestand stond een simpele HTML header, daaronder een switch die calls naar functies deed die de pagina verzorgden. En onderaan de footer.
Bovenaan het bestand stond een simpele HTML header, daaronder een switch die calls naar functies deed die de pagina verzorgden. En onderaan de footer.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Dat is toch niet slim? Zo heel erg lastig is dat helemaal niet. Dus ik zie niet in wat er slim aan is? Al zou ik wel kunnen indenken dat dit soort code in een controller object komt wat de juiste url aan de juiste objeten knoopt.Sebazzz schreef op dinsdag 30 september 2008 @ 07:53:
Het slimme eraan vind ik dat ik het voor elkaar kreeg om alles inclusief data opslag in één php bestand te krijgen.
Bovenaan het bestand stond een simpele HTML header, daaronder een switch die calls naar functies deed die de pagina verzorgden. En onderaan de footer.
Daar heb je juist includes voor om dingen maar 1 keer te schrijven (want dat is wat je wil) en je files toch overzichtelijk te houden.
Ampera-e (60kWh) -> (66kWh)
Anoniem: 84120
Volgens mij had Sebazzz wel door dat het wat onoverzichtelijker was. Wat ook wel te verwachten is dat iet iets door heeft (Slechtste topicSebazzz schreef op maandag 29 september 2008 @ 21:28:
... maar ik vond het een prachtig stukje slim én dom programmeren.
Anoniem: 156876
Dat domme was iedereen het wel over eens, denk ik, waar ik het over had is:Anoniem: 84120 schreef op dinsdag 30 september 2008 @ 09:27:
Volgens mij had Sebazzz wel door dat het wat onoverzichtelijker was. Wat ook wel te verwachten is dat iet iets door heeft (Slechtste topic).
Het slimme ervan, dat begreep ik even niet...Sebazzz schreef op maandag 29 september 2008 @ 21:28:
... maar ik vond het een prachtig stukje slim én dom programmeren.
Anoniem: 178962
Het slimme was dat ie een bizarre rommelcode had geschreven maar het resultaat uiteindelijk wel werkte.
Hoe erge rommel het was kun je natuurlijk niet zomaar weergeven in een simpel voorbeeld omdat dat zegmaar simpel is
Hoe erge rommel het was kun je natuurlijk niet zomaar weergeven in een simpel voorbeeld omdat dat zegmaar simpel is
Anoniem: 156876
Dan is 95% van de dingen die in dit topic voorkomt "slim"..?Anoniem: 178962 schreef op dinsdag 30 september 2008 @ 22:00:
Het slimme was dat ie een bizarre rommelcode had geschreven maar het resultaat uiteindelijk wel werkte.
Hoe erge rommel het was kun je natuurlijk niet zomaar weergeven in een simpel voorbeeld omdat dat zegmaar simpel is
Ik blader door dit topic, en mijn ogen beginnen spontaan te bloeden.
Wat zijn programmeertalen zoals PHP toch ontzettend vies, als je de elegantie van Python of Haskell gewend bent.
En dan te bedenken dat er dagelijks duizenden mensen bezig zijn met het produceren van dergelijke code en gewoon niet beter weten
Wat zijn programmeertalen zoals PHP toch ontzettend vies, als je de elegantie van Python of Haskell gewend bent.
En dan te bedenken dat er dagelijks duizenden mensen bezig zijn met het produceren van dergelijke code en gewoon niet beter weten
Wat heeft je opmerking weinig toe te voegen aan dit topic, als je de gemiddelde user gewend bent.
Of, om het anders te zeggen, lul niet. De taal heeft er geen bal mee te maken. Het feit dat sites als phpfreakz en weet ik wat nog meer voor slechte sites mensen "php leren" , in cursussen geschreven door mensen die net hun "PHP in 24 uur" uit hebben, is hier debet aan. Sommige mensen houden nou eenmaal van toegankelijke talen. Anderen houden van python of haskell en verkloten het daar ook grandioos mee. De kwaliteit en kennis van de programmeur is niet gerelateerd aan de taal waarmee gewerkt wordt.
Of, om het anders te zeggen, lul niet. De taal heeft er geen bal mee te maken. Het feit dat sites als phpfreakz en weet ik wat nog meer voor slechte sites mensen "php leren" , in cursussen geschreven door mensen die net hun "PHP in 24 uur" uit hebben, is hier debet aan. Sommige mensen houden nou eenmaal van toegankelijke talen. Anderen houden van python of haskell en verkloten het daar ook grandioos mee. De kwaliteit en kennis van de programmeur is niet gerelateerd aan de taal waarmee gewerkt wordt.
Anyone who gets in between me and my morning coffee should be insecure.
Anoniem: 178962
Sommige dingen zijn misschien wel geniaal, ze zeggen altijd dat de grens tussen krankzinnig en geniaal maar heel klein isAnoniem: 156876 schreef op dinsdag 30 september 2008 @ 22:03:
[...]
Dan is 95% van de dingen die in dit topic voorkomt "slim"..?
@Terabyte:
Boehoe, dat komt omdat de taal er geen zak mee te maken heeft zoals hier al gezegd wordt. Daarnaast boeit het geen flikker hoe de code eruit ziet, het gaat om het eindresultaat. Al zou het in PHP alleen mogelijk zijn om lelijke en brakke code te produceren (wat ik dus niet geloof) dan is de site waar je nu op zit al het bewijs dat het niets boeit voor het eindresultaat.
Beter een goed uitgedachte website met een strak design, goede flow, goede content en brakke code dan een website met mooie code maar verder niets. De gebruiker kan je code niet zien ofzo hoor...
[ Voor 48% gewijzigd door Anoniem: 178962 op 30-09-2008 22:20 ]
Zo'n website met veel flash ('strak design'), lage performance ('brakke code'), ononderhoudbaar (''Beter een goed uitgedachte website met [...] brakke code') en alleen werkend in IE ('Beter een goed uitgedachte website met [...] brakke code')?Anoniem: 178962 schreef op dinsdag 30 september 2008 @ 22:17:
[...]
Beter een goed uitgedachte website met een strak design, goede flow, goede content en brakke code dan een website met mooie code maar verder niets. De gebruiker kan je code niet zien ofzo hoor...
Tja. De leercurves voor die talen zijn nou eenmaal wat hoger (in elk geval als je er iets nuttigs mee wil maken).terabyte schreef op dinsdag 30 september 2008 @ 22:09:
Ik blader door dit topic, en mijn ogen beginnen spontaan te bloeden.
Wat zijn programmeertalen zoals PHP toch ontzettend vies, als je de elegantie van Python of Haskell gewend bent.
[ Voor 6% gewijzigd door writser op 30-09-2008 22:51 ]
Onvoorstelbaar!
PHP kan heel smerig gebruikt worden, maar als je een beetje je best doet kan je er prima nette code mee schrijven en de boel structureel goed in delen, en het ook nog snel laten zijn. Verder snap ik niet wat dingen zoals strak design en IE-only rotzooi met PHP te maken heeft.
Ampera-e (60kWh) -> (66kWh)
Anoniem: 178962
Leg me geen woorden in de mond aub. Dat jij er rare definities op nahoudt moet je helemaal zelf weten.terabyte schreef op dinsdag 30 september 2008 @ 22:48:
[...]
Zo'n website met veel flash ('strak design'), lage performance ('brakke code'), ononderhoudbaar (''Beter een goed uitgedachte website met [...] brakke code') en alleen werkend in IE ('Beter een goed uitgedachte website met [...] brakke code')?
If you assume, you make an ass out of you and me. Of, assumption is the mother of all... etc.terabyte schreef op dinsdag 30 september 2008 @ 22:48:
[...]
Zo'n website met veel flash ('strak design'), lage performance ('brakke code'), ononderhoudbaar (''Beter een goed uitgedachte website met [...] brakke code') en alleen werkend in IE ('Beter een goed uitgedachte website met [...] brakke code')?
Beter gezegd, en ik zie dat TRRoads dat al aangeeft: waar haal je flash, IE, performance, onderhoudbaar en weet ik veel wat nog meer uit zijn reactie weg?
Heart..pumps blood.Has nothing to do with emotion! Bored
Anoniem: 59888
Wat terabyte m.i. bedoelt (verbeter me als ik er naast zit) is dat nette code net zo goed deel uitmaakt van een goede applicatie als de interface en de flow. Ter vergelijking: een automobilist hoeft ook niet onder de motorkap te kijken. Je kunt een auto nog zo mooi maken en het interieur nog zo comfortabel, maar als de motor niet presteert en om de haverklap afslaat dan koop je toch liever een auto waar wel een goede motor in zit. Het ontwerp kan nog zo mooi zijn maar als de code slecht is dan merkt de eindgebruiker dat heus wel.
Vandaag ook weer tegen een stukje ononderhoudbare code aangelopen:
Een klein beetje refactoren mag op z'n tijd wel...
Of nog een ander diamantje:
code:
1
2
3
4
5
6
7
| public void process(com.example.bla.Type type1, com.example.foo.Type type2) { if (type1 != null) { //zo'n 200 regels code } else if (type2 != null) { // zo'n 200 regels code, met heel veel code copy en weinig overzicht wat er nu anders is als type1. } } |
Een klein beetje refactoren mag op z'n tijd wel...
Of nog een ander diamantje:
Java:
1
2
| Map<String, String> aMap = new HashMap<String, String>(); aMap = callMethodWhichReturnsAMap(); |
[ Voor 15% gewijzigd door Nick_S op 01-10-2008 00:47 ]
'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'
Anoniem: 178962
Mwah, het is maar de vraag in hoeverre de eindgebruiker iets merkt natuurlijk.Anoniem: 59888 schreef op woensdag 01 oktober 2008 @ 00:36:
Wat terabyte m.i. bedoelt (verbeter me als ik er naast zit) is dat nette code net zo goed deel uitmaakt van een goede applicatie als de interface en de flow. Ter vergelijking: een automobilist hoeft ook niet onder de motorkap te kijken. Je kunt een auto nog zo mooi maken en het interieur nog zo comfortabel, maar als de motor niet presteert en om de haverklap afslaat dan koop je toch liever een auto waar wel een goede motor in zit. Het ontwerp kan nog zo mooi zijn maar als de code slecht is dan merkt de eindgebruiker dat heus wel.
Je hebt code die gewoon echt fout is en niet werkt, maar die code komt meestal niet in dit topic terecht (immers zien zelfs de slechtste programmeurs wel dat code echt niets doet).
De code in dit topic bevat meestal wel bugs (vooral beveiligingslekken), maar ook super goede code bevat vaak bugs. Sterker nog, neem even een kijkje in het LD forum en zie dat zelfs de (IMHO goede) programmeurs van t.net en React bugs in hun software hebben.
De performance van brakke code zal niet 100% optimaal zijn, maar echt heel slecht performance zal het ook weer niet (dat merkt de slechte programmeur immers ook wel). Echt heel spannend zijn de database zaken die de slechte programmeurs doen ook weer niet dus de performance zal daar over het algemeen te doen zijn.
Kijk bijvoorbeeld even naar FoK, op zich prima code (denk ik, ik kan het niet zien natuurlijk), maar door de groei werd het op een gegeven moment onwerkbaar traag. Maakte dat de gebruikers iets uit? Nee, FoK groeide maar door en door.
Om de analogie met auto's even door te trekken: Hoeveel mensen rijden er wel niet in oude rotte bakken die op een koude ochtend een half uur doen om te starten, amper wegkomen bij het stoplicht etc. Het boeit mensen simpelweg niet, als het doet wat het moet doen is het prima.
Zodoende boeit het mensen ook echt niet als de performance niet optimaal is en zelfs het design komt niet heel kritisch (soms zie je sites die echt lelijk zijn maar toch mega populair, kijk bijvoorbeeld even naar xtremesystems.org).
Er zijn natuurlijk extremen, als je site echt onwerkbaar is vanwege de bugs of een week aan een stuk eruit ligt (hoewel t.net ook 36 uur eruit lag bij BC3?), dan kan het wel killing zijn. Maar over het algemeen zijn het toch hele andere zaken die een site een hit or miss maken.
Het is dan dus ook zinloos om super veel moeite te stoppen in de code als de rest niet in orde is (als je alles in orde kunt krijgen is het natuurlijk wel goed, maar dat is een utopie). Dat maakt het dat PHP wel gebruikt wordt , inclusief alle brakke code gemaakt door dwalende programmeurs, voor heel erg succesvolle websites.
Zaken als performance, onderhoudbaarheid etc zijn zaken waar iedereen tegenaan loopt als de site aan het groeien is. Daar weten ze hier bij t.net alles vanaf, naarmate je groter wordt wordt het gewoon allemaal steeds moeilijker en moet je er steeds meer resources in stoppen. Dan pas is het cruciaal dat performance en onderhoudbaarheid wel in orde zijn aangezien de gevolgen dan ook veel groter zijn.
Let wel dat ik hier speciek praat over websites, (web)applicaties en dan vooral gericht op bedrijven gelden natuurlijk hele andere regels.
[ Voor 8% gewijzigd door Anoniem: 178962 op 01-10-2008 01:43 ]
`t Lijkt me alleen een compleet verkeerde insteek als je zo begint met programmeren
Maar dat snap jij vast ook wel.
If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router
Het geldt altijd dat je je structuur en code goed moet uitdenken, en daarmee juist dit soort problemen in te toekomst wil voorkomen (door schaalbaarheid, niet gaan coden van ach.. resources genoeg). Dat dat best moeilijk is, je goed voorbereiden op de toekomst, dat is wel waar. Maar aan de andere kant, als jij gewoon een efficiënt geschreven site hebt, en je implementeert bijvoorbeeld een structuur waardoor de site uitbreidbaar is over meerdere servers, dan hoef je er alleen maar meer geld (en dus resources) tegen aan te gooien, en heeft het weinig meer met programmeren te maken. Even simpel gezegd dan he. En je moet de boel ook zo bouwen dat je makkelijk functionaliteit kunt toevoegen.
Ampera-e (60kWh) -> (66kWh)
Zag deze net, nice. Was wel effectief 
C++:
1
2
3
4
| if (g_vm["file"].as<std::string>() == std::string("/home/smit/lucy.bin")) { glRotatef(-90, 1,0,0); } glTranslatef(-g_avg_x, -g_avg_y, -g_avg_z); |
Ik moet voor een stage opdracht een licentie systeem vernieuwen.
Dus licentie, alles moet goed beveiligd zijn en compleet voutloos.
Een paar voorbeelden:
$Formsubmit <> ""? Is dat niet hetzelfde als empty($Formsubmit)?
En die switch statement? Waar slaat dat op
Nogal vaag, maar Newsletter wordt ook nergens gedefinieerd.
Nog wat leuke Javascript:
Eval?
Ooh, en dan het formulier:
Juist ja, elke regel heeft een nieuwe Echo.
En er wordt minstens 5x gekeken of dat formulier verstuurd is.
Dus licentie, alles moet goed beveiligd zijn en compleet voutloos.
Een paar voorbeelden:
PHP:
1
2
3
4
5
6
7
8
9
10
11
| if($formsubmit<>""){ //form submitted, check licensecode etc.. //$odbLicenses = new dbLicenses(); $checkmail = new CheckEmail(); $SMTPSERVER = "localhost"; switch(false){ case $checkmail->check($email, $SMTPSERVER): $message = "Please check your email address it seems to be invalid."; break; } |
$Formsubmit <> ""? Is dat niet hetzelfde als empty($Formsubmit)?
En die switch statement? Waar slaat dat op

PHP:
1
2
3
| $sCheckNewsletter = ''; if($newsletter=='true') $sCheckNewsletter = ' CHECKED'; |
Nogal vaag, maar Newsletter wordt ook nergens gedefinieerd.
Nog wat leuke Javascript:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| function CheckRequiredFields(srequiredfields, TheForm){ var aREQUIREDFIELDS = srequiredfields.split(","); for (i=0; i<aREQUIREDFIELDS.length;i++){ sField = aREQUIREDFIELDS[i]; sValue = ""; eval("sValue=TheForm."+sField+".value;"); if(sValue==""){ eval("TheForm."+sField+".focus();"); alert(MSGREQUIRED); return false; } } return true; } //Aanroepen doe je dus zo: CheckRequiredFields("sname,email,license,reference", TheForm); |
Eval?
Ooh, en dan het formulier:
PHP:
1
2
3
4
5
6
7
| echo"<tr><font size='2' face='arial'><b>Reseller Request - Pricelist Request</b>"; if(isset($_POST['btnsubmit'])) echo "<tr>Thank you for your request.</tr><tr>We are verifying your details and will contact you regarding your request</tr>"; if(!isset($_POST['btnsubmit'])) { echo "<tr><td>"; |
Juist ja, elke regel heeft een nieuwe Echo.
En er wordt minstens 5x gekeken of dat formulier verstuurd is.

[ Voor 0% gewijzigd door TJHeuvel op 01-10-2008 12:53 . Reden: Typo ]
Geniaal, zo ga ik voortaan ook methoden schrijven die meerdere strings als input hebbenCyCloneNL schreef op woensdag 01 oktober 2008 @ 12:44:
Ik moet voor een stage opdracht een licencie systeem vernieuwen.
Dus licencie, alles moet goed beveiligd zijn en compleet voutloos.
Nog wat leuke Javascript:
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function CheckRequiredFields(srequiredfields, TheForm){ var aREQUIREDFIELDS = srequiredfields.split(","); for (i=0; i<aREQUIREDFIELDS.length;i++){ sField = aREQUIREDFIELDS\[i]; sValue = ""; eval("sValue=TheForm."+sField+".value;"); if(sValue==""){ eval("TheForm."+sField+".focus();"); alert(MSGREQUIRED); return false; } } return true; } //Aanroepen doe je dus zo: CheckRequiredFields("sname,email,license,reference", TheForm);
Kater? Eerst water, de rest komt later
Ik vraag me af hoe serieus ik jou moet nemen als je praat over PHP versus Python en dan aan komt met "alleen in IE", je hebt neem ik aan wel gehoord van het scheiden van je code en je opmaak?terabyte schreef op dinsdag 30 september 2008 @ 22:48:
[...]
Zo'n website met veel flash ('strak design'), lage performance ('brakke code'), ononderhoudbaar (''Beter een goed uitgedachte website met [...] brakke code') en alleen werkend in IE ('Beter een goed uitgedachte website met [...] brakke code')?
Ik kan je overigens ook een mooi stukje Python laten zien waar je van over je nek gaat hoor, heb ik met een projectgroep een tijdje aan mogen sleutelen. (Resultaat: complete rewrite waarbij 3% van de code werd hergebruikt, bij de Acceptance Test bleek die 3% ook nog niet eens foutloos te zijn.)
Oh, en ik ken nog wel een hoogleraar die het e.e.a. te ranten heeft over de off-side rule waar Python en Haskell zo gretig gebruik van maken.
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Hoe zou jij zoiets oplossen? Wat is wel een goede oplossing?
Maar hoe geef je dan optionele velden aan.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| function CheckForm(Form) { for(var i = 0;i < Form.Elements.Length;i++) { if(Form.Elements[i].value == '') { alert('Vul aub alle velden in!'); return; } } Form.submit(); } |
Maar hoe geef je dan optionele velden aan.
Heh, in Tomb Raider: Legend stond dit:Zoijar schreef op woensdag 01 oktober 2008 @ 10:23:
Zag deze net, nice. Was wel effectief
C++:
1 2 3 4 if (g_vm["file"].as<std::string>() == std::string("/home/smit/lucy.bin")) { glRotatef(-90, 1,0,0); } glTranslatef(-g_avg_x, -g_avg_y, -g_avg_z);
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // TR7 specific hack: portals in vtrain units are too small, which results in culling issues, so we're going to double them in size. bool tr7bigportalhack = !strnicmp(pStreamUnit->baseAreaName, "vtrain", 6) || !strnicmp(pStreamUnit->baseAreaName, "vehone", 6); ISceneCell * pCell = pStreamUnit->pCellGroup->GetCell(0); for (uint32 i = 0; i < pTerrain->numStreamUnitPortals; i++) { if (tr7bigportalhack) { const Vector3 * quad = pTerrain->streamUnitPortals[i].quad; Vector3 portalVerts[4]; // can be a local buffer because scene copies the verts anyway Vector3 midpoint = quad[0]; for (uint32 p = 1; p < 4; p++) midpoint += quad[p]; midpoint *= 0.25f; for (uint32 p = 0; p < 4; p++) portalVerts[p] = 2.f * quad[p] - midpoint; //this means: midpoint + (quad[p] - midpoint) * 2.f; pCell->CreateDynamicPortal(0, portalVerts, 4); } else { pCell->CreateDynamicPortal(0, pTerrain->streamUnitPortals[i].quad, 4); } } |
Je moet toch wat als op het laatste moment bepaalde portals te klein blijken geauthored en je niet de mogelijkheid hebt om de content aan te passen
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.
NeeCyCloneNL schreef op woensdag 01 oktober 2008 @ 12:44:
$Formsubmit <> ""? Is dat niet hetzelfde als empty($Formsubmit)?
Don't be afraid of the dark, be afraid of what it hides
Oh, wat is het dan? Gewoon hetzelfde als !=? Waarom zit dat dan er twee keer in?MichelVH schreef op woensdag 01 oktober 2008 @ 13:09:
[...]
NeeOok voor de string '0' returnt empty true.
'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.
Let op:
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.
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.
