Ik vind dit eigenlijk best debiel, tenzij er op papier staat welke stijl je dient te gebruiken. Als dit nergens op papier staat, dan zou ik het zelfs aanvechten.[b][message=36366744,noline]
C++:
1 2 3 4 5 6 7 8 const int CONSTANTE = 1; // overvloedig gebruik van hoofdletters int variabele1 = 0; int variabele2 = 0; // variabelen op 0 zetten is niet goed voor de leesbaarheid if (waar == true){ // 1 lijntje met iets doen } // { } niet nodig bij slechts 1 lijntje code na if
Ik vind met de not (!) zelfs beter leesbaar, vooral wanneer je een logische naam voor de variabele hebt:Caelorum schreef op vrijdag 08 juli 2011 @ 12:31:
[...]
Mja bij mij is dat min of meer hetzelfde. Soms zit ik een uur lang te coden en denk ik niet meer na. Als ik dan koffie heb gehaald en ik lees mijn eigen code dan spot ik de fouten sneller op deze manier
Java:
1
2
3
| if(!isValid) { // spreek uit: if not isValid // doe iets } |
of
Java:
1
2
3
| if(isValid == false) { // spreek uit if isValid is false // doe iets } |
Of ben ik de enige die de code wil gaan uitspreken?
Gewoon even een tik geven die docent.
Heb ik ook wel eens gedaan, we moesten in een stuk code aangeven welke regels er wel/niet goed waren.
Ik had eerst een 3 en dat is een 8 geworden. (Schaal 0-10).
Het ging om echt basis dingen, zoals ; vergeten en dat soort zaken, die moest je als "FOUT" markeren.
Maargoed ik had de hele code op die sheet bekeken, en unused variables ook aangekaart als "FOUT".
En meer van dat soort dingen. Tsja na overleg snapte hij dat ook wel.
Heb ik ook wel eens gedaan, we moesten in een stuk code aangeven welke regels er wel/niet goed waren.
Ik had eerst een 3 en dat is een 8 geworden. (Schaal 0-10).
Het ging om echt basis dingen, zoals ; vergeten en dat soort zaken, die moest je als "FOUT" markeren.
Maargoed ik had de hele code op die sheet bekeken, en unused variables ook aangekaart als "FOUT".
En meer van dat soort dingen. Tsja na overleg snapte hij dat ook wel.
Ik schrijf wel == false, maar geen == true:
Dit doe ik omdat ik het persoonlijk prettiger vind lezen als someBool in het if-statement netjes uitlijnt met het begin van de regel eronder. Met een ! ervoor vind ik dat rommelig staan:
Waarschijnlijk hebben veel mensen zoiets van '
' en 'waar maak je je druk om?', maar zo heeft iedereen zijn eigenaardigheden.
C#:
1
2
3
4
| if (someBool) ... if (someBool == false) ... |
Dit doe ik omdat ik het persoonlijk prettiger vind lezen als someBool in het if-statement netjes uitlijnt met het begin van de regel eronder. Met een ! ervoor vind ik dat rommelig staan:
C#:
1
2
| if (!somebool) someInt = 42; |
Waarschijnlijk hebben veel mensen zoiets van '

Lector : "In het vervolg zal er rekening gehouden worden met dit soort dingen." Ik had in de theorie iets te veel foutjes gemaakt en aangezien die lector mij volgend jaar nog vaak les gaat geven heb ik maar niet te moeilijk gedaan (ben er na wel met een vriend mee geweest om het zelfde aan te kaarten en zijn punten zijn wel aangepast van een 9 naar een 10 wat wel iets belangrijker is dan van een 13 naar een 14
)
gebruik ik dan weer wel door mekaar. Dat is misschien toch iets wat rap kan aangepast worden en op het vlak van leesbaarheid en consequentie een stuk beter kan
en ja in België wordt alles op 20 gezet in het hoger
C++:
1
2
| if (variabele == true) if (!variabele) |
gebruik ik dan weer wel door mekaar. Dat is misschien toch iets wat rap kan aangepast worden en op het vlak van leesbaarheid en consequentie een stuk beter kan
en ja in België wordt alles op 20 gezet in het hoger
[ Voor 5% gewijzigd door PietrKempy op 08-07-2011 15:22 ]
Komt vaker voor hoor: Wikipedia: Content-addressable memory
[ Voor 3% gewijzigd door CyBeR op 08-07-2011 15:08 ]
All my posts are provided as-is. They come with NO WARRANTY at all.
Ging het er niet meer om dat '-' lijkt op een smiley zonder emotie, hence "don't care"?
[ Voor 12% gewijzigd door .oisyn op 08-07-2011 15:24 ]
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.
Eentje van mijzelf 
En ik maar afvragen waarom er niets bruikbaars in $booking_count stond
PHP:
1
2
| $dbh = new PDO($connectString, DB_USER, DB_PASS); $booking_count = $dbh->query('SELECT COUNT (*) FROM _Bookings', PDO::FETCH_ASSOC); |
En ik maar afvragen waarom er niets bruikbaars in $booking_count stond
If money talks then I'm a mime
If time is money then I'm out of time
Ik zie hem niet?
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Ik denk dat hij $booking_count direct als integer wilde gebruiken, i.p.v. als array.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Volgens mij heeft het te maken met de spatie na COUNT, wat gewoon een functie is en dus (zover ik weet) zelf parentheses moet hebben
Ik weet niet hoe het in PDO gespecificeerd is maar ik neem aan dat een result zonder alias / naam niet in een associatieve fetch word teruggegeven.
Door FETCH_ASSOC te gebruiken geeft hij de key van de COUNT(*) operatie de naam van de kolom. Echter is er voor COUNT(*) geen colomnaam te vinden, dus krijg je een array met op index null een waarde (in mijn geval 40).
Nee dat had ik niet, want je krijgt anders een array terug met daarin de SQL-query.TheCoolGamer schreef op zaterdag 09 juli 2011 @ 15:35:
Ik denk dat hij $booking_count direct als integer wilde gebruiken, i.p.v. als array.
PHP:
1
2
3
4
5
| foreach ($booking_count as $booking) { $booking_count = $booking[null]; break; } |
Loste het op, maar dat vond ik zo ranzig, dat ik maar PDO::FETCH_NUM heb gebruikt en index 0 laat returnen
Ik babbel tegen een MSSQL-server aan en die heeft met deze syntax geen moeite. Ik moet wel toegeven dat die spatie daar onbedoeld staat en die heb ik bij deze weggehaaldAvalaxy schreef op zaterdag 09 juli 2011 @ 15:46:
Volgens mij heeft het te maken met de spatie na COUNT, wat gewoon een functie is en dus (zover ik weet) zelf parentheses moet hebben
Close, but no cigar; Het resultaat staat dus netjes op index nullPrisonerOfPain schreef op zaterdag 09 juli 2011 @ 15:47:
Ik weet niet hoe het in PDO gespecificeerd is maar ik neem aan dat een result zonder alias / naam niet in een associatieve fetch word teruggegeven.

[ Voor 30% gewijzigd door Matis op 09-07-2011 15:52 ]
If money talks then I'm a mime
If time is money then I'm out of time
Had er nog nooit van gehoord dus vandaar mijn wat verbaasde reactieCyBeR schreef op vrijdag 08 juli 2011 @ 15:07:
[...]
Komt vaker voor hoor: Wikipedia: Content-addressable memory
Nu met Land Rover Series 3 en Defender 90
Als oplossing kan je een column alias gebruiken.Matis schreef op zaterdag 09 juli 2011 @ 15:21:
PHP:
1 2 $dbh = new PDO($connectString, DB_USER, DB_PASS); $booking_count = $dbh->query('SELECT COUNT (*) FROM _Bookings', PDO::FETCH_ASSOC);
PHP:
1
| $booking_count = $dbh->query('SELECT COUNT (*) AS "som" FROM _Bookings', PDO::FETCH_ASSOC); |
Hoewel je reactie lijkt te suggereren dat je dit al geprobeerd hebt, maar dat het niet werkt?
[ Voor 15% gewijzigd door Infinitive op 11-07-2011 11:15 . Reden: reply iets kleiner gemaakt. ]
putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]
In een framework wat ik ergens voor moet gebruiken
Beetje onzinnig he
PHP:
1
2
3
4
5
6
| $blaat = array(); $blaat['blup'] = 'tekst'; $blaat['blup2'] = 'tekst'; // Nog een aantal van zulk soort regels if(!empty($blaat)) { // Werken |
Beetje onzinnig he
Ik weet alles van niks
Vind Excel ongelovelijk irritant.
Waarom in hemelsnaam die foreachMatis schreef op zaterdag 09 juli 2011 @ 15:48:
Nee dat had ik niet, want je krijgt anders een array terug met daarin de SQL-query.
PHP:
1 2 3 4 5 foreach ($booking_count as $booking) { $booking_count = $booking[null]; break; }
Stomme MySQL quirk. Kun je uitzetten met sql_mode = "IGNORE_SPACE"Avalaxy schreef op zaterdag 09 juli 2011 @ 15:46:
Volgens mij heeft het te maken met de spatie na COUNT, wat gewoon een functie is en dus (zover ik weet) zelf parentheses moet hebben
[ Voor 33% gewijzigd door .oisyn op 11-07-2011 11:47 ]
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.
Lezen: Hij maakt gebruik van een MSSQL server, niet MySQL.
edit: my bad.
@ibmos2warp : Geen gebruik maken van empty(), gebruik isset().
edit: my bad.
@ibmos2warp : Geen gebruik maken van empty(), gebruik isset().
[ Voor 7% gewijzigd door sky- op 11-07-2011 13:22 ]
don't be afraid of machines, be afraid of the people who build and train them.
Verwijderd
Lezen: Dat de vraagsteller (Matis) MSSQL gebruikt was irrelevant in die stelling van Avalaxy.sky- schreef op maandag 11 juli 2011 @ 11:56:
Lezen: Hij maakt gebruik van een MSSQL server, niet MySQL.
[edit]
Om op die stelling door te gaan, ik vind het raar dat die spatie eenzelfde werking zou kunnen* hebben als waar een komma voor bedoeld is.
* kunnen, dankzij sql_mode = "IGNORE_SPACE". Dit is waarschijnlijk te doen in de query, maar ook in de ini-configuratie?
[ Voor 45% gewijzigd door Verwijderd op 11-07-2011 12:04 ]
Ik reageerde louter op de reactie Avalaxy, de context van Matis is dus irrelevant. Mijn punt was dat de SQL standaard niet zegt dat er geen spatie tussen mag zitten - dit ligt puur aan MySQL. Maar de reactie van Avalaxy doet vermoeden dat het altijd zo is (ongeacht gebruikte RDBMS).sky- schreef op maandag 11 juli 2011 @ 11:56:
Lezen: Hij maakt gebruik van een MSSQL server, niet MySQL.
Dat zou ik ook raar vinden, maar hoe je die conclusie trekt is mij een beetje onduidelijk, het is namelijk helemaal niet zo.Verwijderd schreef op maandag 11 juli 2011 @ 12:02:
Om op die stelling door te gaan, ik vind het raar dat die spatie eenzelfde werking zou kunnen* hebben als waar een komma voor bedoeld is.
MySQL doet het standaard niet zodat het kan distantieren tussen built-in functies en identifiers. Zo zou je je tabel of kolom best COUNT kunnen noemen, wat prima werkt omdat je er dan geen haakjes tussen zet. Op het moment dat je IGNORE_SPACE aanzet wordt COUNT een reserved word en kun je die dus niet meer zonder backquotes gebruiken als tabel- of kolomnaam.
Leesvoer.
[ Voor 26% gewijzigd door .oisyn op 11-07-2011 12:20 ]
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.
Verwijderd
Onbegrip van IGNORE_SPACE blijkbaar.oisyn schreef op maandag 11 juli 2011 @ 12:15:
Dat zou ik ook raar vinden, maar hoe je die conclusie trekt is mij een beetje onduidelijk, het is namelijk helemaal niet zo.
Klinkt best dom, al ben ik het omdat ik dacht de functionaliteit te kunnen begrijpen van IGNORE_SPACE, dankzij die bewoording.Op het moment dat je IGNORE_SPACE aanzet wordt COUNT een reserved word.
Dus bedankt voor je leesvoer
[ Voor 10% gewijzigd door Verwijderd op 11-07-2011 13:13 ]
Code is gekopieerd uit een ander project en als test werkt het prima. Overigens wordt er in het andere project wel degelijk meerdere regels teruggegeven en wordt er ook met de data gewerkt.
Dat het in dit stukje code wat overdreven is, ben ik met je eens, maar dat doet niets af aan de uitkomst.
[ Voor 34% gewijzigd door Matis op 11-07-2011 13:24 ]
If money talks then I'm a mime
If time is money then I'm out of time
"wat overdreven" vind ik een understatement. Je misbruikt foreach om te testen of een array niet leeg isMatis schreef op maandag 11 juli 2011 @ 13:23:
Dat het in dit stukje code wat overdreven is, ben ik met je eens, maar dat doet niets af aan de uitkomst.

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.
Verwijderd
- Verdomme, topics zijn toch moeilijk. -
[ Voor 80% gewijzigd door Verwijderd op 11-07-2011 14:58 ]
Nee, ik gebruik het om het eerste element er uit te halen.oisyn schreef op maandag 11 juli 2011 @ 14:21:
"wat overdreven" vind ik een understatement. Je misbruikt foreach om te testen of een array niet leeg is
If money talks then I'm a mime
If time is money then I'm out of time
Hoe maak je een lijstje met links in HTML 
HTML:
1
2
3
4
| <ul type="disc" class="ltekstbl" style=""> <li type="square" style="text-indent:25px;"><font title="This is a list item" class="mtekstbl" style="cursor:pointer;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';" onclick="document.Form.action='link/to/a/page.asp';document.Form.submit();">This is a list item</font></li> <!-- etc --> </ul> |
Certified smart block developer op de agile darkchain stack. PM voor info.
array_shift ?Matis schreef op maandag 11 juli 2011 @ 18:40:
[...]
Nee, ik gebruik het om het eerste element er uit te halen
What do you mean I have no life? I am a gamer, I got millions!
Zie example 2: http://www.c-sharpcorner....dwritexmltutmellli21.aspx
Zou 'ie nog nooit van een switch hebben gehoort?
Zou 'ie nog nooit van een switch hebben gehoort?
Nee, dat doe je niet, je pakt altijd element nullMatis schreef op maandag 11 juli 2011 @ 18:40:
[...]
Nee, ik gebruik het om het eerste element er uit te halen
PHP:
1
2
3
4
5
| foreach ($booking_count as $booking) { // ^^^^^^^^^^^^^^ met de inhoud van deze variabele wordt nooit iets gedaan $booking_count = $booking[null]; // want hier wordt ie overschreven break; } |
Doe dan:
PHP:
1
2
| foreach ($booking_count as $booking) break; |
Of:
PHP:
1
2
| if (!empty($booking) $booking_count = $booking[null]; |
(Beide voorbeelden zijn natuurlijk niet equivalent, de eerste doet wat jij zegt dat het doet, de tweede doet daadwerkelijk wat jij doet)
[ Voor 51% gewijzigd door .oisyn op 12-07-2011 10: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.
Not Pingu schreef op dinsdag 12 juli 2011 @ 09:43:
Hoe maak je een lijstje met links in HTML
HTML:
1 2 3 4 <ul type="disc" class="ltekstbl" style=""> <li type="square" style="text-indent:25px;"><font title="This is a list item" class="mtekstbl" style="cursor:pointer;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';" onclick="document.Form.action='link/to/a/page.asp';document.Form.submit();">This is a list item</font></li> <!-- etc --> </ul>

Veel slechter gaat het niet worden; inline styles, onzinnige attr., inline javascript, font-tag, ... the horror.
“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.
Bij het opruimen van wat oude databases kom nu regelmatig tegen dat datumtijd gegevens in varchar(30) kolommen zijn opgeslagen (ipv datetime of date). Dezelfde gegevens van verschillende meetmomenten staan in verschillende tabellen (ook al zo'n mooie ontwerpfout trouwens) en de datatypes datetime en varchar zijn willekeurig door elkaar heen gebruikt.
Hierdoor is de helft goed (datetime) en de andere helft is in de loop der jaren in alle denkbare datum formaten verzameld, dus bijv. '2001-12-31', '12/31/2001', '31-12-2001', '31/12/2001', 'Dec 31 2001' etc.
Nogal een monnikenwerk om dat allemaal goed te converteren naar de nieuwe database.
*zucht*
Hierdoor is de helft goed (datetime) en de andere helft is in de loop der jaren in alle denkbare datum formaten verzameld, dus bijv. '2001-12-31', '12/31/2001', '31-12-2001', '31/12/2001', 'Dec 31 2001' etc.
Nogal een monnikenwerk om dat allemaal goed te converteren naar de nieuwe database.

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider
Je interpreteert de foreach verkeerd om: er staat $booking_count as $booking, niet $booking_count in $booking!.oisyn schreef op dinsdag 12 juli 2011 @ 10:24:
PHP:
1 2 3 4 5 foreach ($booking_count as $booking) { // ^^^^^^^^^^^^^^ met de inhoud van deze variabele wordt nooit iets gedaan $booking_count = $booking[null]; // want hier wordt ie overschreven break; }
Vóór de foreach heb je een array $booking_count = array(array('null' => 10))
In python ziet het algoritme er zo uit:
Python:
1
2
3
4
| booking_count = [{'null': 10}, ] for item in booking_count:" booking_count = item['null'] break |
waarom Matis dan niet gewoon
code:
1
| booking_count = booking_count[0]['null'] |
doet is me wel een raadsel.
d'OhValHallASW schreef op dinsdag 12 juli 2011 @ 15:13:
[...]
Je interpreteert de foreach verkeerd om: er staat $booking_count as $booking, niet $booking_count in $booking!

Waarom krijg je überhaupt een array in een array terug
.edit: oh wacht het is natuurlijk een PDOStatement object met alle results.
Ok, duidelijk. Ik heb niets gezegd. Hey, kijk daar, een paard!
[ Voor 29% gewijzigd door .oisyn op 12-07-2011 15:56 ]
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.
kun je vast met een reg exp oplossen.BdR schreef op dinsdag 12 juli 2011 @ 14:50:
Hierdoor is de helft goed (datetime) en de andere helft is in de loop der jaren in alle denkbare datum formaten verzameld, dus bijv. '2001-12-31', '12/31/2001', '31-12-2001', '31/12/2001', 'Dec 31 2001' etc.
\d{4}/\d\{2}/\d{2}
\d{4}-\d\{2}-\d{2}
etc en dan uiteraard heb je $1 $2 $3, die je dan in het formaat wilt zetten die je wilt.
De enigste moeilijkere is "Dec 31 2001" maar ook op te lossen door \w\s\d{2}\s\d{4}
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
Een culture-aware date parser zou dat ook wel kunnen oplossen, als je hem alle culturen laat afgaan die je tegenkomt in de database.
Het grote probleem is hoe je betrouwbaar onderscheid maakt tussen formaat 2 en 4. Want er zal vast niet in alle gevallen op een van de eerste 2 posities een getal hoger dan 13 staan.
Het grote probleem is hoe je betrouwbaar onderscheid maakt tussen formaat 2 en 4. Want er zal vast niet in alle gevallen op een van de eerste 2 posities een getal hoger dan 13 staan.
Certified smart block developer op de agile darkchain stack. PM voor info.
Voor de duidelijkheid, de data zat met FETCH_ASSOC op index null, niet index 'null'. Zoals al gezegd, het was een koppiepasta van een project waarin eenzelfde opzet gebruikt werd.ValHallASW schreef op dinsdag 12 juli 2011 @ 15:13:
waarom Matis dan niet gewoon
code:
1 booking_count = booking_count[0]['null']
doet is me wel een raadsel.
Zonder verder teveel aan te passen heb ik alleen de query aangepast
If money talks then I'm a mime
If time is money then I'm out of time
Toch blijft de foreach best wel een WTF, foreach gebruik je over het algemeen om over de gehele array te itereren. Dat er situaties zijn waar je tussentijds wilt stoppen kan ik me best voorstellen, maar dit is gewoon een nodeloos ingewikkelde manier om $booking_count->fetch() aan te roepen en het resultaat in $booking te stoppenMatis schreef op dinsdag 12 juli 2011 @ 16:19:
[...]
Voor de duidelijkheid, de data zat met FETCH_ASSOC op index null, niet index 'null'. Zoals al gezegd, het was een koppiepasta van een project waarin eenzelfde opzet gebruikt werd.
Zonder verder teveel aan te passen heb ik alleen de query aangepast
Dat ben ik met je eens, daarom heb ik het nu ook aangepastPatriot schreef op woensdag 13 juli 2011 @ 02:41:
Toch blijft de foreach best wel een WTF, foreach gebruik je over het algemeen om over de gehele array te itereren. Dat er situaties zijn waar je tussentijds wilt stoppen kan ik me best voorstellen, maar dit is gewoon een nodeloos ingewikkelde manier om $booking_count->fetch() aan te roepen en het resultaat in $booking te stoppen
If money talks then I'm a mime
If time is money then I'm out of time
Nou ja, ik vind gewoon het eerste element pakken met een foreach en een break eigenlijk best cleverPatriot schreef op woensdag 13 juli 2011 @ 02:41:
[...]
Toch blijft de foreach best wel een WTF, foreach gebruik je over het algemeen om over de gehele array te itereren. Dat er situaties zijn waar je tussentijds wilt stoppen kan ik me best voorstellen, maar dit is gewoon een nodeloos ingewikkelde manier om $booking_count->fetch() aan te roepen en het resultaat in $booking te stoppen
.edit: oh wacht, ik zie net dat reset() ook het eerste element teruggeeft
Nou, dan is foreach nog handig voor het verkrijgen van een reference naar het eerste element.
[ Voor 11% gewijzigd door .oisyn op 13-07-2011 10:43 ]
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.
Wat maakt een switch daar nu beter aan? Zegt overloading jou iets?Noxious schreef op dinsdag 12 juli 2011 @ 10:19:
Zie example 2: http://www.c-sharpcorner....dwritexmltutmellli21.aspx
Zou 'ie nog nooit van een switch hebben gehoort?
Een XmlNode kan maar één type hebben dacht ik zo? Een switch zou in dat geval iig al een behoorlijke verbetering zijn.jaapio88 schreef op woensdag 13 juli 2011 @ 15:12:
[...]
Wat maakt een switch daar nu beter aan? Zegt overloading jou iets?
Overigens vond ik zelf deze wel leuk. Copy pasten is nooit een goed idee denk ik ^^
C#:
1
2
3
4
5
6
7
8
9
10
11
12
| // if node type is an entity\ if (nType == XmlNodeType.Entity) { Console.WriteLine("Entity:" + textReader.Name.ToString()); et = et + 1; } // if node type is a Process Instruction if (nType == XmlNodeType.Entity) { Console.WriteLine("Entity:" + textReader.Name.ToString()); pi = pi + 1; } |
*edit*
@ onder: Een switch statement zou beter staan. Een XmlNodeType is een enum. Dat is ook wel logisch want je wilt niet dat iets en een Comment is en een Document.
[ Voor 10% gewijzigd door Caelorum op 13-07-2011 16:09 ]
Het lijkt mij dat dat type toch meerdere dingen tegelijk moet kunnen zijn, anders zou elke normale developer er tenminste "else if" van maken om onnodige controles over te slaan. Hoewel, dit topic gaat toch juist of die 'minder' normale developers? 
edit: Ik doel niet op het kleine voorbeeldje hierboven maar op de codepasta op de webpagina.
edit: Ik doel niet op het kleine voorbeeldje hierboven maar op de codepasta op de webpagina.
[ Voor 16% gewijzigd door Aloys op 13-07-2011 17:03 ]
C#:
1
2
| if (nType == XmlNodeType.Entity) { |
en
C#:
1
2
| if (nType == XmlNodeType.Entity) { |
lijkt mij toch 2 maal hetzelfde... dat bedoelde hij dus ook waarschijnlijk met dat het niet slim is om te copy pasten als je code schrijft. (wordt mij trouwens ook zo aangeleerd. het moment dat je op papier zet voeg dit hier nog eens in moet je nadenken of je het niet efficienter kan)
Lees het commentaar voor de if en kijk wat voor aktie wordt uitgevoerd na het if statement (indien waar). Programmeur is 'slechts' vergeten de enum waarde aan te passen. Heb ik ook weleens en daarom zijn de unittests uitgevonden zodat je je eigen code kunt testen..
If it isn't broken, fix it until it is..
En de writeline statement ook. Om nog maar niet te beginnen over het vergeten dat de switch statement bestaatNiemand_Anders schreef op woensdag 13 juli 2011 @ 17:37:
Lees het commentaar voor de if en kijk wat voor aktie wordt uitgevoerd na het if statement (indien waar). Programmeur is 'slechts' vergeten de enum waarde aan te passen. Heb ik ook weleens en daarom zijn de unittests uitgevonden zodat je je eigen code kunt testen..
Anyways... tijd voor een nieuwe wtf
Een paar weken geleden had ik hier al gerant over vreselijk slechte code van een externe 'programmeur', nou heb ik gisteren de hele dag bij de klant gezeten om met iemand met domeinkennis door de code te lopen om de bugs op te lossen. Daar bleek het allemaal nog erger te zijn dan ik dacht, op het genante af omdat de klant er naast zat.
Kom je bijvoorbeeld de variabele 'quoteAmountMin' tegen, dan denk je dat daar iets van een minimum offerte bedrag in zou staan. Maar nee, het bleek om huidig aantal eenheden te gaan
en het nieuwe aantal in variabele 'quoteAmountTop'. Bovendien ging het überhaupt niet om offertes, maar om facturen
Als klap op de vuurpijl bleek ook nog eens dat stukken code die al 4-5 keer dubbel stonden, óók nog eens meerdere malen gebruikt werden in een andere solution
Kom je bijvoorbeeld de variabele 'quoteAmountMin' tegen, dan denk je dat daar iets van een minimum offerte bedrag in zou staan. Maar nee, het bleek om huidig aantal eenheden te gaan


Als klap op de vuurpijl bleek ook nog eens dat stukken code die al 4-5 keer dubbel stonden, óók nog eens meerdere malen gebruikt werden in een andere solution

Kater? Eerst water, de rest komt later
Verwijderd
.oisyn schreef op woensdag 13 juli 2011 @ 10:39:
[...]
Nou ja, ik vind gewoon het eerste element pakken met een foreach en een break eigenlijk best clever. array_shift() past de array aan dus dat wil je ook niet, en de enige andere mogelijkheid is volgens mij een reset() gevolgd door een current().
.edit: oh wacht, ik zie net dat reset() ook het eerste element teruggeeft
Nou, dan is foreach nog handig voor het verkrijgen van een reference naar het eerste element.
PHP:
1
2
| foreach($booking_count as &$booking) { $booking_count = $booking[null]; |
Die reference is niet handig meer, aangezien de array toch wordt overschreven door die waarde.
Ik neem dan aan dat PHP die array nergens anders meer bewaart.
Ik had het niet over de code van Matis. Waar ik het over had was:
$element is nou een reference naar het eerste element van $array.
Daar is niet echt een makkelijk alternatief voor, anders dan
Het is ook wel lomp dat je anno 2011 nog steeds niet direct arrays kunt indexeren die gereturned worden uit een functie.
PHP:
1
2
| foreach ($array as &$element) break; |
$element is nou een reference naar het eerste element van $array.
Daar is niet echt een makkelijk alternatief voor, anders dan
PHP:
1
2
3
| reset($array); $kv = each($array); $element = &$array[$kv[0]]; |
Het is ook wel lomp dat je anno 2011 nog steeds niet direct arrays kunt indexeren die gereturned worden uit een functie.
[ Voor 54% gewijzigd door .oisyn op 14-07-2011 10:56 ]
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.
hear hear. 't Schijnt dat er in de parser code voor 5.4 wel het e.e.a. gefixt gaat zijn m.b.t. het generiek parsen van expressions. Ga ik binnenkort eens nader bestuderen, want dat is een van mijn jarenlange grootste frustraties in PHP.Het is ook wel lomp dat je anno 2011 nog steeds niet direct arrays kunt indexeren die gereturned worden uit een functie.
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Verwijderd
Inderdaad, ik heb lang geleden nog speciale functies aan moet maken die niets anders deden dan return $arr[$key] om zo alles nog in een expressie te krijgen.drm schreef op donderdag 14 juli 2011 @ 11:27:
[...]
hear hear. 't Schijnt dat er in de parser code voor 5.4 wel het e.e.a. gefixt gaat zijn m.b.t. het generiek parsen van expressions. Ga ik binnenkort eens nader bestuderen, want dat is een van mijn jarenlange grootste frustraties in PHP.

Het zoekwoord is array dereferencingdrm schreef op donderdag 14 juli 2011 @ 11:27:
[...]
hear hear. 't Schijnt dat er in de parser code voor 5.4 wel het e.e.a. gefixt gaat zijn m.b.t. het generiek parsen van expressions. Ga ik binnenkort eens nader bestuderen, want dat is een van mijn jarenlange grootste frustraties in PHP.
PHP:
1
2
3
4
5
6
| function foo () { return array('bar', 'baz'); } echo foo()[1]; |
Gister even de alpha2 van 5.4 geprobeerd. Array dereferencing: yay, maar helaas:
toch maar 's meeloeren op de php-dev lists denk ik...
PHP:
nog steeds een parse error. Zo moeilijk kan dat toch niet zijn? Zelfs in Twig zit een generieke expressionparser. Die is dus al beter dan de parser van php zelf.... 1
2
| <?php new a()->foo; |

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Probeer eens
PHP:
1
| (new a())->foo; |
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.
Dat je een array uit een functie direct aan wilt spreken snap ik, maar dat je één attribuut of functie uit je classe wilt halen direct naar het initialiseren 
De enige zinnige toepassing die ik kan bedenken is als je gaat chainen ($this returnen), maar dan nog zou het overzichtelijker zijn eerst even je instance in een variable te proppen, maargoed dat is mijn mening. De vraag is dus in welke use case je dat zou willen (omdat ik nieuwsgierig ben)?
De enige zinnige toepassing die ik kan bedenken is als je gaat chainen ($this returnen), maar dan nog zou het overzichtelijker zijn eerst even je instance in een variable te proppen, maargoed dat is mijn mening. De vraag is dus in welke use case je dat zou willen (omdat ik nieuwsgierig ben)?
Dat is het punt niet. 'new a()' is gewoon een expressie, net als '$foo' of 'bla()' of '$a + $b'. Als de linkerkant van de -> operator een expressie is die een object als resultaat heeft, dan zou je een member moeten kunnen ophalen. Dat werkt zo in vrijwel iederen programmeertaal, en dus ook voor een expressie als 'new a()'. Maar omdat de PHP expression parser zo brak in elkaar zit moeten ze dus elke soort expressie gaan zitten special-casen.ReenL schreef op woensdag 20 juli 2011 @ 01:07:
maar dat je één attribuut of functie uit je classe wilt halen direct naar het initialiseren
[ Voor 6% gewijzigd door .oisyn op 20-07-2011 10:09 ]
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 kan best wel situaties bedenken waarin je een complex algoritme in een eigen class verwerkt. Dan zou je zoiets als dit kunnen doen:ReenL schreef op woensdag 20 juli 2011 @ 01:07:
Dat je een array uit een functie direct aan wilt spreken snap ik, maar dat je één attribuut of functie uit je classe wilt halen direct naar het initialiseren
De enige zinnige toepassing die ik kan bedenken is als je gaat chainen ($this returnen), maar dan nog zou het overzichtelijker zijn eerst even je instance in een variable te proppen, maargoed dat is mijn mening. De vraag is dus in welke use case je dat zou willen (omdat ik nieuwsgierig ben)?
PHP:
1
| $result = new AlgorithmPerformer($a, $b, $c)->perform(); |
Overigens zou ik dan meestal een static create functie maken voor instantieren, of zelfs een static perform die intern alles regelt, dus dan zou je dit probleem sowieso niet hebben:
PHP:
1
2
3
| $result = AlgorithmPerformer::create($a, $b, $c)->perform(); // of $result = AlgorithmPerformer::perform($a, $b, $c); |
PHP:
1
| $timeAsString = new DateTime()->format("Y-m-d H:i:s"); |
[ Voor 56% gewijzigd door .oisyn op 20-07-2011 12:23 ]
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.
Gewoon een ManagerBuilderFactory-pattern implementeren d.m.v. dependency injection, dan kán het gewoon niet mis gaan.
spoiler:
Hoezo overkill? 
[ Voor 8% gewijzigd door Alex) op 20-07-2011 13:52 ]
We are shaping the future
Overkill? Is het überhaupt mogelijk om inversion of control toe te passen en tóch een object aan te vragen bij een factory?
Tuurlijk wel, dan moet je gewoon even een ManagerBuilderFactoryFactory maken die dat voor je regelt.
We are shaping the future
Tuurlijk. Een factory heeft als doel een geïnitialiseerd object terug te geven. De parameters die nodig zijn om zo'n object te maken zijn natuurlijk niet altijd references naar dependencies.Avalaxy schreef op woensdag 20 juli 2011 @ 13:56:
Overkill? Is het überhaupt mogelijk om inversion of control toe te passen en tóch een object aan te vragen bij een factory?
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Idd, gewoon een Abstract Factory pattern in de mix gooien.Alex) schreef op woensdag 20 juli 2011 @ 14:01:
Tuurlijk wel, dan moet je gewoon even een ManagerBuilderFactoryFactory maken die dat voor je regelt.
Heb een tijd naar deze code zitten kijken:
Weggestopt in de handleiding bij de reacties vond ik toen:
PHP:
Zou verwachten dat dit een fout zou opleveren.1
2
3
4
5
| $s = '2011-00-00'; $t = strtotime( $s ); $x = date('c',$t); // $x = 2010-11-30 ?? |
Weggestopt in de handleiding bij de reacties vond ik toen:
PHP:
M.a.w. 2011-00-00 wordt als 2011-01-01 geïnterpreteerd, vervolgens wordt er één maand en nog een dag afgetrokken met als resultaat 2010-11-30...
1
2
3
| // You can use strtotime to get // the date of the last day of the previous month: date("Y-m-d", strtotime("2010-03-00")); // Returns 2010-02-28 |
Developer Accused Of Unreadable Code Refuses To Comment
Het staat ook gewoon in de officiele handleiding, als je weet waar je moet kijken in ieder gevalIcelus schreef op woensdag 20 juli 2011 @ 16:52:
Heb een tijd naar deze code zitten kijken:
PHP:Zou verwachten dat dit een fout zou opleveren.
1 2 3 4 5 $s = '2011-00-00'; $t = strtotime( $s ); $x = date('c',$t); // $x = 2010-11-30 ??
Weggestopt in de handleiding bij de reacties vond ik toen:
PHP:M.a.w. 2011-00-00 wordt als 2011-01-01 geïnterpreteerd, vervolgens wordt er één maand en nog een dag afgetrokken met als resultaat 2010-11-30...
1 2 3 // You can use strtotime to get // the date of the last day of the previous month: date("Y-m-d", strtotime("2010-03-00")); // Returns 2010-02-28
http://nl3.php.net/mktime Bij Example #3 staat hier kort iets over vermeld.
PHP:
1
2
3
4
5
6
7
8
9
10
11
| Example #3 Last day of next month The last day of any given month can be expressed as the "0" day of the next month, not the -1 day. Both of the following examples will produce the string "The last day in Feb 2000 is: 29". <?php $lastday = mktime(0, 0, 0, 3, 0, 2000); echo strftime("Last day in Feb 2000 is: %d", $lastday); $lastday = mktime(0, 0, 0, 4, -31, 2000); echo strftime("Last day in Feb 2000 is: %d", $lastday); ?> |
Indien je graag een datum wilt controleren in PHP kun je het beste de functie checkdate gebruiken. Zie ook: PHP: checkdate - ManualIcelus schreef op woensdag 20 juli 2011 @ 16:52:
Heb een tijd naar deze code zitten kijken:
PHP:Zou verwachten dat dit een fout zou opleveren.
1 2 3 4 5 $s = '2011-00-00'; $t = strtotime( $s ); $x = date('c',$t); // $x = 2010-11-30 ??
Waarom doet mij dit denken aan: "It's not a bug, it's a feature".
[ Voor 6% gewijzigd door Manuel op 20-07-2011 17:15 ]
*bzzzt* *spark* *bzzzzzZZZZZZZZZZT* *POP*PHP:
1 2 /** *Makes the following dialog not non-uninvisible */
Unhandled Exception: FuseBlownInHeadException occurred on line 2.
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
Amerikaanse datumnotatieManuel schreef op woensdag 20 juli 2011 @ 17:13:
[...]
Indien je graag een datum wilt controleren in PHP kun je het beste de functie checkdate gebruiken. Zie ook: PHP: checkdate - Manual
Waarom doet mij dit denken aan: "It's not a bug, it's a feature".
Gebruik mktime zelden dus daar heb ik niet gekeken.C0rnelis schreef op woensdag 20 juli 2011 @ 17:10:
[...]
Het staat ook gewoon in de officiele handleiding, als je weet waar je moet kijken in ieder geval
http://nl3.php.net/mktime Bij Example #3 staat hier kort iets over vermeld.
Strtotime is sowieso een aparte functie
Ja, dat is altijd fijn.
Helemaal leuk is een project waar data als strings zijn opgeslagen en iedere kolom in een ander formaat.
[ Voor 26% gewijzigd door Icelus op 21-07-2011 11:04 ]
Developer Accused Of Unreadable Code Refuses To Comment
Simpel, zie ook: PHP: DateTime - ManualIcelus schreef op donderdag 21 juli 2011 @ 11:03:
Ja, dat is altijd fijn.
Helemaal leuk is een project waar data als strings zijn opgeslagen en iedere kolom in een ander formaat.
Klein voorbeeld:
PHP:
1
2
3
4
| $addedAt = new DateTime(); $expiresAt = new DateTime("7/21/2011"); var_dump($addedAt->createFromFormat("d/m/Y", "21/7/2011")->format("d-m-Y"), $expiresAt->format("d/m/Y")); |
En anders kun je ook nog iets als dit doen om het te controleren:
PHP:
1
2
3
4
5
6
| try { $expiresAt = new DateTime("7000/2100/2011"); } catch(Exception $e) { // Slechte foutafhandeling (als in niets) echo $e->getMessage(); } |
Foute uitleg, dan zou er 2010-12-31 uit moeten komen oid.Icelus schreef op woensdag 20 juli 2011 @ 16:52:
Heb een tijd naar deze code zitten kijken:
PHP:Zou verwachten dat dit een fout zou opleveren.
1 2 3 4 5 $s = '2011-00-00'; $t = strtotime( $s ); $x = date('c',$t); // $x = 2010-11-30 ??
Weggestopt in de handleiding bij de reacties vond ik toen:
PHP:M.a.w. 2011-00-00 wordt als 2011-01-01 geïnterpreteerd, vervolgens wordt er één maand en nog een dag afgetrokken met als resultaat 2010-11-30...
1 2 3 // You can use strtotime to get // the date of the last day of the previous month: date("Y-m-d", strtotime("2010-03-00")); // Returns 2010-02-28
Waarschijnlijk wordt 2011-00-00 eerst automatisch geconverteerd/geinterpreteerd naar 2010-12-00, en dan 2010-11-30
Death smiles at us all, all a man can do is smile back.
PSN
Nee, voor 2010-12-31 moet je 2011-01-00 opvragen: dan krijg je namelijk de laatste dag van de vorige maand.YakuzA schreef op donderdag 21 juli 2011 @ 12:24:
[...]
Foute uitleg, dan zou er 2010-12-31 uit moeten komen oid.
Waarschijnlijk wordt 2011-00-00 eerst automatisch geconverteerd/geinterpreteerd naar 2010-12-00, en dan 2010-11-30
2011-00-01 -> 2010-12-01
2011-01-00 -> 2010-12-31
2011-00-00 -> 2010-11-30
Klopt volgens mij gewoon hoor, hoewel een foutmelding bij 'tweemaal dubbel nul' niet onredelijk zou zijn.
'Foute uitleg' sloeg opValHallASW schreef op donderdag 21 juli 2011 @ 13:01:
[...]
Nee, voor 2010-12-31 moet je 2011-01-00 opvragen: dan krijg je namelijk de laatste dag van de vorige maand.
2011-00-01 -> 2010-12-01
2011-01-00 -> 2010-12-31
2011-00-00 -> 2010-11-30
Klopt volgens mij gewoon hoor, hoewel een foutmelding bij 'tweemaal dubbel nul' niet onredelijk zou zijn.
zo'n php functie laat mij dan weer afvragen wat '0000-00-00' voor output gaat gevenM.a.w. 2011-00-00 wordt als 2011-01-01 geïnterpreteerd
[ Voor 7% gewijzigd door YakuzA op 21-07-2011 13:08 ]
Death smiles at us all, all a man can do is smile back.
PSN
9999-11-30 zou logisch zijn in ieder geval ( Of als negatieve getallen ondersteund worden -0001-11-30 )YakuzA schreef op donderdag 21 juli 2011 @ 13:06:
[...]
zo'n php functie laat mij dan weer afvragen wat '0000-00-00' voor output gaat geven
[ Voor 10% gewijzigd door Woy op 21-07-2011 13:33 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Dat was geen foute uitleg, je kunt het alleen niet los zien van de twee opmerkingen die daarna komen: Dat er daarna 1 maand en daarna 1 dag vanaf gaat. Als je het los gaat lezen (of 'erger', quoten) dan klopt er inderdaad niets meer van, maar dat is bij wel meer dingen zo
Hangt van het systeem/OS af.YakuzA schreef op donderdag 21 juli 2011 @ 13:06:
zo'n php functie laat mij dan weer afvragen wat '0000-00-00' voor output gaat geven
nyctimus at yahoo dot com 06-Jan-2011 01:54
strtotime() produces different output on 32 and 64 bit systems running PHP 5.3.3 (as mentioned previously). This affects the "zero date" ("0000-00-00 00:00:00") as well as dates outside the traditional 32 date range.
strtotime("0000-00-00 00:00:00") returns FALSE on a 32 bit system.
strtotime("0000-00-00 00:00:00") returns -62169955200 on a 64 bit system.
kendsnyder at gmail dot com 06-Nov-2009 05:54
Watch out when using strtotime() on a string that might begin with "0000-00-00" as MySQL stores "null" dates on a not-null date column. The value returned by strtotime("0000-00-00") varies by php version. Consider the following:
PHP:
1 2 3 4 5 6 date('Y-m-d',strtotime('0000-00-00 00:00:00')); // returns "1969-12-31" on the following versions: // Win XP php 5.2.9-2 // Win 7 php 5.3.0 // RHEL 5 php 5.2.8 // but returns "-0001-11-30" on RHEL 5 php 5.2.10!
Developer Accused Of Unreadable Code Refuses To Comment
Net gevonden in een groot project.
Somige mensen snappen niet dat unit tests gemaakt zijn om units te testen van de applicatie die je maakt
Deze unit test heeft niet zo veel code coverage..
C#:
1
2
3
4
5
6
7
8
9
10
| public void Replace_SleutelWaardeInBestandsIdVervangen_BestandsIdBevatNieuweSleutel() { string nieuweSleutel = "~45-2~"; string expected = string.Format("test{0}.Sample.jpg", nieuweSleutel); string input = "test~48-5~.Sample.jpg"; string actual = Regex.Replace(input, @"~\d+-\d+~", nieuweSleutel); Assert.AreEqual(expected, actual); } |
Somige mensen snappen niet dat unit tests gemaakt zijn om units te testen van de applicatie die je maakt
Deze unit test heeft niet zo veel code coverage..
This message was sent on 100% recyclable electrons.
Kijk in je SCM history wie het gedaan heeft en mail 'm een link naar http://www.sliver.com/dotnet/SnippetCompiler/ of http://ideone.comBasieP schreef op donderdag 21 juli 2011 @ 17:06:
Net gevonden in een groot project.C#:
1 2 3 4 5 6 7 8 9 10 public void Replace_SleutelWaardeInBestandsIdVervangen_BestandsIdBevatNieuweSleutel() { string nieuweSleutel = "~45-2~"; string expected = string.Format("test{0}.Sample.jpg", nieuweSleutel); string input = "test~48-5~.Sample.jpg"; string actual = Regex.Replace(input, @"~\d+-\d+~", nieuweSleutel); Assert.AreEqual(expected, actual); }
Somige mensen snappen niet dat unit tests gemaakt zijn om units te testen van de applicatie die je maakt
Deze unit test heeft niet zo veel code coverage..
Net geschreven. Ik denk dat het bijna onmogelijk is om te bepalen wat de play methode doet als je niet weet van de twee enums die gebruik maken van deze methode.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| public static <E extends Enum<E>> Winner play(E p1, E p2) { if (p1 == p2) { return Winner.TIE; } final int o1 = p1.ordinal(); final int o2 = p2.ordinal(); return ((o1 - o2) & 1) == 0 ^ o1 > o2 ? Winner.PLAYER2 : Winner.PLAYER1; } public enum Element3 { SCISSORS, PAPER, ROCK } public enum Element5 { SCISSORS, PAPER, ROCK, LIZARD, SPOCK } |
"Beauty is the ultimate defence against complexity." David Gelernter
Wat doet die 0 ^ daar? Die heeft geen effect.
Dóh
[ Voor 99% gewijzigd door Matis op 21-07-2011 18:26 ]
If money talks then I'm a mime
If time is money then I'm out of time
De ^ is de operator met hier de minste precedence. Het is een xor tussen "((o1 - o2) & 1) == 0" en "o1 > o2".PrisonerOfPain schreef op donderdag 21 juli 2011 @ 18:24:
Wat doet die 0 ^ daar? Die heeft geen effect.
"Beauty is the ultimate defence against complexity." David Gelernter
Ah, fair enough. In dat geval had ik gewoon een != operator gebruikt.Macros schreef op donderdag 21 juli 2011 @ 18:28:
[...]
De ^ is de operator met hier de minste precedence. Het is een xor tussen "((o1 - o2) & 1) == 0" en "o1 > o2".
Vertrouw daar aub niet op de compiler en zet er gewoon haakjes omheen, zoals je in de uitleg doetMacros schreef op donderdag 21 juli 2011 @ 18:28:
De ^ is de operator met hier de minste precedence. Het is een xor tussen "((o1 - o2) & 1) == 0" en "o1 > o2".
If money talks then I'm a mime
If time is money then I'm out of time
Waarom niet, als er iets vast staat in de compiler / language spec is het operator precedence. Leesbaarheid daargelaten.Matis schreef op donderdag 21 juli 2011 @ 18:30:
[...]
Vertrouw daar aub niet op de compiler en zet er gewoon haakjes omheen, zoals je in de uitleg doet
[ Voor 3% gewijzigd door PrisonerOfPain op 21-07-2011 18:31 ]
Hey, het was niet voor niets hier gepost
"Beauty is the ultimate defence against complexity." David Gelernter
Kleine moeite, groot gemak. Jij en ik gingen beide de boot in. Om over een eventuele stagiair nog maar niet te sprekenPrisonerOfPain schreef op donderdag 21 juli 2011 @ 18:31:
Waarom niet, als er iets vast staat in de compiler / language spec is het operator precedence. Leesbaarheid daargelaten.
Bij ons op het werk wordt je allereerst gewaarschuwd als je dit soort operaties niet aftimmert met haakjes. Doe je dat niet, dan timmert de code reviewer jou dicht
@hierboven. Het is niet zozeer een slecht programmeervoorbeeld, maar wel onleesbaar
[ Voor 7% gewijzigd door Matis op 21-07-2011 18:39 ]
If money talks then I'm a mime
If time is money then I'm out of time
Best verwarrend, die lage precedence van de bitwise OR/XOR/AND operatoren. Zelf zou ik ze boven de == operator verwachten.
Dingen als if (a & 0x04 == 0) werken niet goed zonder haakjes.
Dingen als if (a & 0x04 == 0) werken niet goed zonder haakjes.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Daarom schrijft Misra ook voor:TheCoolGamer schreef op donderdag 21 juli 2011 @ 20:42:
Best verwarrend, die lage precedence van de bitwise OR/XOR/AND operatoren. Zelf zou ik ze boven de == operator verwachten.
Dingen als if (a & 0x04 == 0) werken niet goed zonder haakjes.
Gelukkig zorgt FlexeLint er bij ons voor dat de code niet eens wil compileren47 (adv): No dependence should be placed on C’s precedence rules
If money talks then I'm a mime
If time is money then I'm out of time
Je zegt "daarom", maar ik zie geen reden. En je mag dus ook niet vertrouwen op a*b+c? Daarnaast, als ik de andere regels zo lees, zoals het niet mogen gebruiken van continue en break... oh please.
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.
Daarom heeft wel zeker een reden, immers het probleem/gevaar dat TheCoolGamer in "[alg] Slechtste programmeervoorbeelden d..." voorschrijft..oisyn schreef op donderdag 21 juli 2011 @ 21:19:
Je zegt "daarom", maar ik zie geen reden. En je mag dus ook niet vertrouwen op a*b+c? Daarnaast, als ik de andere regels zo lees, zoals het niet mogen gebruiken van continue en break... oh please.
Daarnaast zijn er bij ons, sinds het invoeren van statische code analyse, reviews en globale buildservers, een stuk minder bugs geïntroduceerd. Sommige regels lijken heel erg verneukeratief, maar leveren uiteindelijk een heel mooi stukje uniformiteit op. Net als 1 exit-point per functie, eigenlijk ook bij elke {}; zoals while-lussen en switch-statements.
Ik zeg niet dat het de heilige graal is, maar bij ons heeft het zeker geholpen
[ Voor 12% gewijzigd door Matis op 21-07-2011 21:37 ]
If money talks then I'm a mime
If time is money then I'm out of time
Tja, hoeveel slechter de programmeurs zijn, des te meer zin dat soort maatregelen hebben...
[ Voor 9% gewijzigd door Soultaker op 21-07-2011 21:46 ]
^^ Wou eigenlijk ook net zoiets zeggen. Het zijn hoogstens vuistregels, die je kan breken als je bewust bezig bent.
Voorbeeld:
En 1 exit point per functie is ook niet per se feitelijk beter. Sterker nog, ik ben juist enorme fan van snel returnen in het geval van triviale resultaten of errors, zodat je de rest van de functie niet indent.
Voorbeeld:
W T F. Recursie kan soms gewoon het beste algoritme zijn.70 (req): Functions shall not call themselves directly or indirectly

En 1 exit point per functie is ook niet per se feitelijk beter. Sterker nog, ik ben juist enorme fan van snel returnen in het geval van triviale resultaten of errors, zodat je de rest van de functie niet indent.
{signature}
Nouja, recursie ís vaak ook gewoon simpelweg niet de beste methode, en de cases dat het niet iteratief opgelost kan worden zijn zeldzaam.
En dat bedoelen ze in die guidelines vast ook wel, ik denk niet dat je het als een harde regel moet zien.
En dat bedoelen ze in die guidelines vast ook wel, ik denk niet dat je het als een harde regel moet zien.
De PDF is de 1998 versie. In 2004 is een nieuwe versie uitgekomen. Ze hebben zelf ook wel ingezien dat sommige van die regels niet werkten.
Nieuwe versie: http://www.ristancase.com...SRA-C%202004%20Rules.html
Daar is de regel veranderd in:
Nieuwe versie: http://www.ristancase.com...SRA-C%202004%20Rules.html
Daar is de regel veranderd in:
Klinkt al een stuk logischer12.1 (adv-): Limited dependence should be placed on C's operator precedence rules in expressions.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Nee hehe, je hebt lui die denken dat alles een recursief probleem is.Avalaxy schreef op donderdag 21 juli 2011 @ 21:53:
Nouja, recursie ís vaak ook gewoon simpelweg niet de beste methode
Als het iteratief kan, is dat nog niet per se de meest leesbare / intuitieve / meest performante oplossing. Maar ja, dat is lastig want dan noem ik een paar criteria waar je over moet nadenken ipv blind regeltjes volgen.en de cases dat het niet iteratief opgelost kan worden zijn zeldzaam.
{signature}
Recursief en performant gaan meestal niet goed samen anders. Laat ik het zo zeggen; meestal is de iteratieve oplossing de snellere.Voutloos schreef op donderdag 21 juli 2011 @ 22:00:
Als het iteratief kan, is dat nog niet per se de meest leesbare / intuitieve / meest performante oplossing. Maar ja, dat is lastig want dan noem ik een paar criteria waar je over moet nadenken ipv blind regeltjes volgen.
[ Voor 8% gewijzigd door PrisonerOfPain op 21-07-2011 22:04 ]
Meestal niet, soms wel.PrisonerOfPain schreef op donderdag 21 juli 2011 @ 22:02:
[...]
Recursief en performant gaan meestal niet goed samen anders.
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.