[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
1
2
3
4
5
6
7
8
| //Code om waarde van een boolean te bepalen if(boo == true){ return true; } else if(boo == false){ return false; } |
Kan er in welke situatie dan ook een reden zijn waardoor het beter is om te doen zoals hierboven in plaats van gewoon return boo?
[ Voor 33% gewijzigd door begintmeta op 12-10-2014 13:53 ]
Dat hangt van de taal af, maar normaal gesproken gebruik je return boo.ObiTewodros schreef op zondag 12 oktober 2014 @ 13:34:
Dit is ook iets wat ik heel vaak terug zie komen:
code:
1 2 3 4 5 6 7 8 //Code om waarde van een boolean te bepalen if(boo == true){ return true; } else if(boo == false){ return false; }
Kan er in welke situatie dan ook een reden zijn waardoor het beter is om te doen zoals hierboven in plaats van gewoon return boo?
Als je dat niet doet, dan kan het gedrag wat moeilijker te begrijpen zijn. Neem als voorbeeld de volgende definitie in Python:
1
2
3
4
5
| def foo(x): if x == True: return True elif x == False: return False |
Hier geeft foo(x) alleen True/False terug als x gelijk is aan True/False. In Python hangt dit af van de equality-methode die door x geimplementeerd is. Als x noch gelijk aan True noch aan False is, dan retourneert deze functie None terug (de default returnwaarde in Python).
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
1
| return !!boo; |
doen om een boolean te forceren.
1
| return boo ? true : false; |
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.
Heerlijk voor flags:YopY schreef op maandag 13 oktober 2014 @ 11:59:
Misschien bij weakly-typed talen als Javascript, maar dan kun je bijv
JavaScript:
1 return !!boo;
doen om een boolean te forceren.
1
| return !!(flags & WhateverFlags_Thing); |
Dat is toch logisch? Stel dat iemand het voor elkaar krijgt om met bepaalde input een andere Exception te triggeren die als Message een URL heeft en daarmee mensen redirect naar een andere pagina?Sebazzz schreef op donderdag 09 oktober 2014 @ 17:30:
Waarna Redirect zelf alsnog een ThreadAbortException opgooit. #fail
En Exception.Message misbruiken terwijl je wel een custom Exception class hebt gemaakt. #fail
HACK
????
PROFIT$
Security jongen. Die man heeft daar oog voor.
iOS developer
Verwijderd
1
2
3
4
5
| $connect = mysqli_connect($host, $dbuser, $bdpass, $dbname); if ($connect) { } else mysqli_close($connect); |
Nee, het was niet een slim idee om volstrekt variabele content aan te kunnen. De data was niet variabel en normaal gedefinieerde functies hadden ook volstaan.
Hij heeft moeten trakteren.
If all you have is a hammer, every problem starts to look like a nailKaw schreef op dinsdag 14 oktober 2014 @ 15:59:
Bij ons op het werk was er iemand die in interne code Json gebruikte als data object om van functie naar functie te gooien.
Nee, het was niet een slim idee om volstrekt variabele content aan te kunnen. De data was niet variabel en normaal gedefinieerde functies hadden ook volstaan.
Hij heeft moeten trakteren.
"Any sufficiently advanced technology is indistinguishable from magic."
De sukkel. Dat kan veel moderner.Kaw schreef op dinsdag 14 oktober 2014 @ 15:59:
Bij ons op het werk was er iemand die in interne code Json gebruikte als data object om van functie naar functie te gooien.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Dan zeg ik, initialiseren die handelRayNbow schreef op zondag 12 oktober 2014 @ 13:55:
[...]
Dat hangt van de taal af, maar normaal gesproken gebruik je return boo.
Als je dat niet doet, dan kan het gedrag wat moeilijker te begrijpen zijn. Neem als voorbeeld de volgende definitie in Python:
Python:
1 2 3 4 5 def foo(x): if x == True: return True elif x == False: return False
Hier geeft foo(x) alleen True/False terug als x gelijk is aan True/False. In Python hangt dit af van de equality-methode die door x geimplementeerd is. Als x noch gelijk aan True noch aan False is, dan retourneert deze functie None terug (de default returnwaarde in Python).
Hoe gaat dat hier helpen?
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Een string die true of false kan zijn? Daar ben ik al absoluut geen voorstander van.RayNbow schreef op dinsdag 14 oktober 2014 @ 18:23:
[...]
Hoe gaat dat hier helpen?Het argument x zou hier ook een string kunnen zijn en dan retourneert foo een None.
In mijn optiek is een boolean een boolean en geen string.
Python is niet statically typed en dus kun je foo met van alles aanroepen.BoringDay schreef op dinsdag 14 oktober 2014 @ 21:23:
[...]
Een string die true of false kan zijn? Daar ben ik al absoluut geen voorstander van.
In mijn optiek is een boolean een boolean en geen string.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Dat had ik inmiddels wel begrepen. Persoonlijk vind ik dat altijd een linke manier van programmeren (slechts een voorkeur) , ik kies liever voor een strong typed language.RayNbow schreef op dinsdag 14 oktober 2014 @ 21:31:
[...]
Python is niet statically typed en dus kun je foo met van alles aanroepen.
Uiteraard is het belangrijk om een functie zodanig te definieren dat het een begrijpbaar gedrag vertoont. Een functie dat gedrag A vertoond voor type X maar gedrag B voor type Y is vragen om problemen.BoringDay schreef op dinsdag 14 oktober 2014 @ 21:50:
[...]
Dat had ik inmiddels wel begrepen. Persoonlijk vind ik dat altijd een linke manier van programmeren (slechts een voorkeur) ,
Python is strongly typed.ik kies liever voor een strong typed language.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Nee, chars heb je niet nodig. Dat zijn ook gewoon strings.
We are shaping the future
Volgens mij klopt het wel:kenneth schreef op dinsdag 14 oktober 2014 @ 22:25:
Strong/weak typing, static/dynamic typing, altijd weer dezelfde verwarring
"A programming language that requires a variable to be defined as well as the variable it is. For example, C is a strong typed language, when declaring the variable you must also specify the variable type"
Kortom wanneer je een variabele definieert dan definieer je die met het type.
Chars zijn helemaal geen strings, een string bestaat namelijk uit char's (array of char).Alex) schreef op dinsdag 14 oktober 2014 @ 22:27:
Pfffrt, types zijn overrated. Strings zijn alles wat je nodig hebt.
Nee, chars heb je niet nodig. Dat zijn ook gewoon strings.
Nee, je hebt het fout. Een string is opgebouwd uit strings. Je hebt tenslotte niets anders nodig dan strings.BoringDay schreef op dinsdag 14 oktober 2014 @ 23:06:
[...]
Chars zijn helemaal geen strings, een string bestaat namelijk uit char's (array of char).
We are shaping the future
Kwestie van: het hele leven is te fixen met duct tape. Ik snap je punt. VolledigAlex) schreef op dinsdag 14 oktober 2014 @ 23:09:
[...]
Nee, je hebt het fout. Een string is opgebouwd uit strings. Je hebt tenslotte niets anders nodig dan strings.
Sinds wanneerAlex) schreef op dinsdag 14 oktober 2014 @ 23:09:
[...]
Nee, je hebt het fout. Een string is opgebouwd uit strings. Je hebt tenslotte niets anders nodig dan strings.
Bij mijn weten is een string een reeks van karakters.
Alex) maakt een grapje...BoringDay schreef op dinsdag 14 oktober 2014 @ 23:20:
[...]
Sinds wanneer
Bij mijn weten is een string een reeks van karakters.
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
Gelukkig maar! ik zou bijna mijn schoolboeken doorsnuffelen op fouten
Dus volgens die definitie is Haskell niet strongly typed? Daar hoef je namelijk niet het type op te geven, dat kan de compiler namelijk.BoringDay schreef op dinsdag 14 oktober 2014 @ 23:05:
[...]
Volgens mij klopt het wel:
"A programming language that requires a variable to be defined as well as the variable it is. For example, C is a strong typed language, when declaring the variable you must also specify the variable type"
Kortom wanneer je een variabele definieert dan definieer je die met het type.
De definities zijn (kort door de bocht) als volgt:
Static: type-checking @ compile time;
Dynamic: type-checking @ run time;
Weak: bij een "verkeerd" type wordt er een type conversion poging gedaan;
Strong: bij een "verkeerd" type krijg je een type error.
Alex) schreef op dinsdag 14 oktober 2014 @ 23:09:
[...]
Nee, je hebt het fout. Een string is opgebouwd uit strings. Je hebt tenslotte niets anders nodig dan strings.
In Python heb je geen character type. Als je bijv. "foo"[0] doet in Python, krijg je een string ter lengte 1 terug.BoringDay schreef op dinsdag 14 oktober 2014 @ 23:20:
[...]
Sinds wanneer
Bij mijn weten is een string een reeks van karakters.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Verwijderd


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
| if ( age < 40 ) { if (r8[q] <= dens40[0]) { MamDens = 1; } else if (r8[q] <= (dens40[0] + dens40[1])) { MamDens = 2; } else if (r8[q] <= (dens40[0] + dens40[1]+ dens40[2])) { MamDens = 3; } else { MamDens = 4; } } else{ if ( age < 50 ) { if (r8[q] <= dens50[0]) { MamDens = 1; } else if (r8[q] <= (dens50[0] + dens50[1])) { MamDens = 2; } else if (r8[q] <= (dens50[0] + dens50[1] + dens50[2])) { MamDens = 3; } else { MamDens = 4; } } else{ if ( age < 60 ) { if (r8[q] <= dens60[0]) { MamDens = 1; } else if (r8[q] <= ( dens60[0] + dens60[1] + dens60[2])) { MamDens = 2; } else if (r8[q] <= ( dens60[0] + dens60[1] + dens60[2])) { MamDens = 3; } else { MamDens = 4; } } else{ if ( age < 70 ) { if (r8[q] <= dens70[0]) { MamDens = 1; } else if (r8[q] <= (dens70[0] + dens70[1])) { MamDens = 2; } else if (r8[q] <= (dens70[0] + dens70[1] + dens70[2])) { MamDens = 3; } else { MamDens = 4; } } else{ if (r8[q] <= dens100[0]) { MamDens = 1; } else if (r8[q] <= (dens100[0] + dens100[1])) { MamDens = 2; } else if (r8[q] <= (dens100[0] + dens100[1] + dens100[2])) { MamDens = 3; } else { MamDens = 4; } } } } } |
Heeft geen speciale krachten en is daar erg boos over.
1
2
| UIButton* someButton=self.someButtons[i]; NSURL* url=[UIButton urlForAdgen:someButton.tag]; // whut? |
Via de tag van een button data meegeven

Een category op een UIButton gebruiken om een NSURL te genereren

Maar het pareltje van een category was dus zo opgezet:
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
| // // UIImageView_ABCAdgen.h // ABCKompjoeters'n'Stuff // // Created by Matthew Baranowski on 6/21/13. // Copyright (c) 2013 ABC. All rights reserved. // #import "UIImageView+ABCAdgen.h" #import <AFNetworking/AFHTTPRequestOperation.h> #import <AFNetworking/UIImageView+AFNetworking.h> @implementation UIImageView (ABCAdgen) - (void)setAdgenBackgroundWithPlaceholderImage:(UIImage *)placeholderImage completion:(void(^)(BOOL success))completion; { // boring stuff related to Image View } @end // Ohhh let's put a category for a UIButton here, they'll never see that coming! @implementation UIButton (ABCAdgen) + (NSURL *)urlForAdgen:(ABCAdgenFooterSlot)adgenId { NSString *path = nil; // lots of hardcoded crap here } - (void)setImageWithAdgenId:(int)adId { // more exciting features } @end |
Man man man man man man man man man man om een category in een andere category te verstoppen omdat je te lam bent om ff een nieuwe file aan te maken, wat een lamzak

iOS developer
Wat is er dan mis aan het toepassen van Catogories?
Catagories kunnen aardig nuttig zijn maar uit deze stukje code kan je dat niet geheel opmaken.
Dus je zal toch moeten weten wat de intentie/reden v.d. ontwikkelaar was.
Apple heeft wel netjes omschreven wanneer je ze dient toe te passen:
https://developer.apple.c...izingExistingClasses.html
[ Voor 8% gewijzigd door BoringDay op 15-11-2014 15:42 ]
Er zijn gevallen waarbij een category op zich wel zou kunnen, zoals UIColor met een hex convertor uitbreiden. Maar je zou ook gewoon een HexColor : UIColor kunnen gebruiken of een HexColorConverter : NSObject kunnen maken en dan zou je code nog beter zijn want dan weet degene na je meteen dat het niet de standaard UIColor is die dat soort dingen doet.BoringDay schreef op zaterdag 15 november 2014 @ 15:41:
@BikkelZ
Wat is er dan mis aan het toepassen van Catogories?
Catagories kunnen aardig nuttig zijn maar uit deze stukje code kan je dat niet geheel opmaken.
Dus je zal toch moeten weten wat de intentie/reden v.d. ontwikkelaar was.
Apple heeft wel netjes omschreven wanneer je ze dient toe te passen:
https://developer.apple.c...izingExistingClasses.html
Dat er in het voorbeeld wat ik gaf gewoon grof misbruik gemaakt wordt lijkt me wel duidelijk hoop ik? Wat heeft een NSURL met een UIButton te maken? En waarom moet dat ergens bij een andere category include er nog even bij gerommeld worden?
iOS developer
Als ik de code bekijk lijkt het in eerste instantie dat het wel correct wordt toegepast.BikkelZ schreef op maandag 17 november 2014 @ 16:06:
[...]
Er zijn gevallen waarbij een category op zich wel zou kunnen, zoals UIColor met een hex convertor uitbreiden. Maar je zou ook gewoon een HexColor : UIColor kunnen gebruiken of een HexColorConverter : NSObject kunnen maken en dan zou je code nog beter zijn want dan weet degene na je meteen dat het niet de standaard UIColor is die dat soort dingen doet.
Dat er in het voorbeeld wat ik gaf gewoon grof misbruik gemaakt wordt lijkt me wel duidelijk hoop ik? Wat heeft een NSURL met een UIButton te maken? En waarom moet dat ergens bij een andere category include er nog even bij gerommeld worden?
Immers wordt hier bij 2 baseclasses (waarvan de implementatie niet beschikbaar is) uitgebreid met dezelfde catagory. (zie uitleg van Apple).
Ik kan me indenken men een button maakt en wanneer je erop klikt de url wordt opgehaald?
Verder vind ik het te weinig code om geheel te beoordelen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| + (NSURL *)urlForAdgen:(ABCAdgenFooterSlot)adgenId { NSString *path = nil; switch (adgenId) { case Rolex: path = @"http://www.rolex.com"; break; case Nike: path = @"http://www.nike.com"; break; case Mercedes: path = @"http://www.mercedes.de"; break; return [NSURL URLfromString:path]; } } |
Waarom nou zoiets lelijks doen met een category? Je kunt de NSURL als een @parameter instellen als je de standaard UIButton extendt in plaats van een category gebruikt. Dan hoef je gelijk ook niet die breekbare .tag constructie te gebruiken.
iOS developer
Als je goed kijkt zie je dat 2 baseclasses (waarvan de implementatie niet bekend is) worden uitgebreid met een gemeenschappelijke catagory. Op deze manier voorkom je dat je 2x of vaker een subclass moet maken.BikkelZ schreef op dinsdag 18 november 2014 @ 02:59:
Het was zoiets als:
Objective-C:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 + (NSURL *)urlForAdgen:(ABCAdgenFooterSlot)adgenId { NSString *path = nil; switch (adgenId) { case Rolex: path = @"http://www.rolex.com"; break; case Nike: path = @"http://www.nike.com"; break; case Mercedes: path = @"http://www.mercedes.de"; break; return [NSURL URLfromString:path]; } }
Waarom nou zoiets lelijks doen met een category? Je kunt de NSURL als een @parameter instellen als je de standaard UIButton extendt in plaats van een category gebruikt. Dan hoef je gelijk ook niet die breekbare .tag constructie te gebruiken.
In de link die ik eerder aangaf staat het uitgelegd wat de regels zijn voor het toepassen van catagory zijn.
Je brengt het alsof het een goed ding is, voorkomen dat je een subclass moet aanmaken. Daar ben je mij al kwijt. Een subclass of een category zijn allebei lappen code die je moet onderhouden waarbij de category het gehandicapte broertje van de subclass is waar je geen properties aan kunt toevoegen en nog wat maffe limitaties ten koste van leesbaarheid en voorspelbaarheid. Een category gebruik je waar subclassing niet mogelijk is, bijvoorbeeld iets toevoegen aan UIViewController óók als hij in UITableViewController zit. Maar dan nog liever niet.BoringDay schreef op dinsdag 18 november 2014 @ 08:08:
[...]
Als je goed kijkt zie je dat 2 baseclasses (waarvan de implementatie niet bekend is) worden uitgebreid met een gemeenschappelijke catagory. Op deze manier voorkom je dat je 2x of vaker een subclass moet maken.
In de link die ik eerder aangaf staat het uitgelegd wat de regels zijn voor het toepassen van catagory zijn.
Verder heb ik geen idee waarom een gemeenschappelijke category een goed ding is. Je frot twee aanpassingen van twee verschillende classes in één file en je noemt de file alleen naar de eerste. Hoezo is dat nou een voordeel? Één class, één file. Ik zie alle pods die categories toepassen het zelfde doen. Enige uitzondering is DTColor+Compatibility waarbij zowel NSColor als UIColor een category krijgen en met compiler directives bepaald wordt welke het wordt.
Een category toevoegen aan een Button die iets doet wat niet bij die klasse thuis hoort (single responsibility principe) via een file die qua filename aanduidt bij een ImageView te horen is gewoon wazige code. En dan ook nog de .tag property misbruiken terwijl je met subclassen gewoon een NSURL property kunt toevoegen wat een stuk minder breekbaar is.
iOS developer
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Lees de uitleg van Apple misschien het dan iets duidelijker wordt.
Haal voor mij even wat jij bedoelt er uit want ik heb er al drie keer door heen gelezen en niks gevonden. Ik denk ook gewoon niet dat Apple bedoelt wat jij bedoelt.BoringDay schreef op dinsdag 18 november 2014 @ 18:53:
@BikkelZ
Lees de uitleg van Apple misschien het dan iets duidelijker wordt.
iOS developer
1
2
3
4
5
6
7
| sb.Append(string.Format("In dit scherm kunt u als Beheerder de Beheerders functie voor accounts inregelen")); sb.AppendLine(string.Format("{0}", "<br/>")); sb.AppendLine(string.Format("{0}", "<br/>")); sb.AppendLine(string.Format("{0}","Uit de getoonde lijst van accounts geeft u aan welke Beheerder of Medewerker moet zijn.")); sb.AppendLine(string.Format("{0}", "<br/>")); sb.AppendLine(string.Format("{0}", "Vervolgens klikt u op bewaren.")); sb.AppendLine(string.Format("{0}", "<br/>")); |
Geen idee waarom iemand dit zo op zou lossen. Behalve als ze betaald werden per regel code, maar dan kan ik me nog wel wat verbeteringen indenken! En qua schaal: dit is één van de cases in een 190 regels tellend switch-statement dat ook wel in een regel of 60 zou kunnen.
Zelfde project de volgende -- dit is ook lekker handig en gevaarlijk en ik heb het tijdens het debuggen uiteraard stuk zien lopen...
1
| RecordID = int.Parse(string.Format("{0}{1}", index, geb.GebruikerId)) |
... omdat index een iterator is die duizenden keren kan itereren en ja, hier snap ik nog veel minder van. Er staat wel een commentaar onder: "Een beetje krom [...]". Agree. Ik weet ook niet waar dat RecordID verder voor is, de foreach waar dit in staat is genest in een andere foreach dus in die zin kan ik me er iets bij voorstellen, maar zet dat dan niet in een 32bits integer! Oh en ook hier weer die volkomen overbodige string.Format. Het zal voor de performance vast geen ramp zijn maar verder...
[ Voor 3% gewijzigd door Cyphax op 21-11-2014 16:07 ]
Saved by the buoyancy of citrus
oh, en zie ik nou Nederlandse variable namen?
Ja. Op zich vind ik dat niet erg; als het gaat om domeingegevens wil je die misschien niet altijd vertalen, als je maar consistent bent. Maar ook op dat punt... ach hier heb je vier functienamen uit dat project, dat spreekt ook wel voor zichzelf:Xantios schreef op maandag 24 november 2014 @ 11:04:
en natuurlijk woorden als "inregelen"![]()
oh, en zie ik nou Nederlandse variable namen?
GetHyperlinkText()
ZoekResultaatHeaderText()
AssembleZoekResultaatBase()
OpvragenGebruiker()
Gewoon allemaal door elkaar, ook binnen dezelfde file/class. Mja.
Overigens is "inregelen" niet zo gek omdat ze hier werken met zogeheten inregelingen. Heeft volgens mij met wetgevingen te maken.
[ Voor 9% gewijzigd door Cyphax op 24-11-2014 11:25 ]
Saved by the buoyancy of citrus
FTFYCyphax schreef op maandag 24 november 2014 @ 11:24:
Ja. Op zich vind ik dat niet erg; als het gaat om domeingegevens wil je die misschien niet altijd vertalen, als je maar consistent bent.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Iets als "gebruiker" mag je van mij best vertalen naar "user", maar ik kan het ook wel begrijpen als je dat niet doet. Ook hier weer; consistentie is belangrijk.
Saved by the buoyancy of citrus
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Waarschijnlijk was het idee om nieuwe regels echt duidelijk te krijgen in de code, of de HTML moest er netter uitzien.Cyphax schreef op vrijdag 21 november 2014 @ 16:06:
Ik zit te debuggen in een project hier... en ik kom dingen tegen waarvan ik denk "huh" of "moet dat nou". Een string samenstellen?
Visual Basic:
1 2 3 4 5 6 7 sb.Append(string.Format("In dit scherm kunt u als Beheerder de Beheerders functie voor accounts inregelen")); sb.AppendLine(string.Format("{0}", "<br/>")); sb.AppendLine(string.Format("{0}", "<br/>")); sb.AppendLine(string.Format("{0}","Uit de getoonde lijst van accounts geeft u aan welke Beheerder of Medewerker moet zijn.")); sb.AppendLine(string.Format("{0}", "<br/>")); sb.AppendLine(string.Format("{0}", "Vervolgens klikt u op bewaren.")); sb.AppendLine(string.Format("{0}", "<br/>"));
Geen idee waarom iemand dit zo op zou lossen. Behalve als ze betaald werden per regel code, maar dan kan ik me nog wel wat verbeteringen indenken! En qua schaal: dit is één van de cases in een 190 regels tellend switch-statement dat ook wel in een regel of 60 zou kunnen.
Ik heb zelf iets stoms gedaan; de code die ik postte is geen vb.net maar c#. Die lopen hier een beetje door elkaar. Da's wel lekker verwarrend soms, als je die moet mixen.hellum schreef op maandag 24 november 2014 @ 11:40:
[...]
Waarschijnlijk was het idee om nieuwe regels echt duidelijk te krijgen in de code.
Anyway, nieuwe regels is dan al wat makkelijker dan in vb.net en dat wisten ze zelf ook. Hier nog eentje om het af te leren. Ik ben er ook niet zo'n groot voorstander van om dit soort teksten in de code te zetten maar het is in dit geval een interne tool (maar denk maar niet dat de code in productie mooier is...)
1
2
3
4
5
6
7
8
| sb.Append(string.Format("U heeft zich eerder aangemeld als beheerder.")); sb.AppendLine( string.Format( " Om uw aanmelding als beheerder in behandeling te kunnen nemen dient u een registratiecode aan te vragen.")); sb.AppendLine(string.Format("{0}", " Heeft u deze al ontvangen, dan kiest u \"ja\" en vult u de registratiecode in. Indien u de code nog niet in u bezit heeft, kiest u \"nee\", download u het aanvraagformulier, vult het in en stuurt u het op.")); sb.AppendLine(string.Format("{0}", "<br/>")); break; |
Ah de HTML, daar lijkt het wel een beetje op inderdaad maar het blijft geen reden om String.Format in te zetten en er dan eigenlijk niets mee te doen. 'k Weet niet of de performance er redelijkerwijs onder lijdt, misschien kan de compiler het een beetje optimaliseren.Waarschijnlijk was het idee om nieuwe regels echt duidelijk te krijgen in de code, of de HTML moest er netter uitzien.
[ Voor 19% gewijzigd door Cyphax op 24-11-2014 11:52 ]
Saved by the buoyancy of citrus
Omdat de domeinspecificatie ook over "user" praat?Janoz schreef op maandag 24 november 2014 @ 11:29:
Precies. Als de rest van je domein in het NL is, waarom dan gebruiker wel vertalen?
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.
1
2
3
4
5
6
7
8
9
| public class Team { public string nameOfTeam = ""; public Team() { } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public class Money { private int money = 100; public Money() { } public int getMoney() { return money; } public void addMoney(int amountOfMoney) { money += amountOfMoney; } } |
Wat was ik aan het denken?

Nouja, beter nutteloze classes dan onbegrijpbare spaghetti code, toch?
Op na wat kleine andere dingetjes is de rest vrij goed(wat mij verbaast).
Een paar van die kleine dingetjes(money is Money):
1
| money.addMoney(-100); |
twee spaties is wel een geldige naam!
1
2
3
4
5
6
7
8
9
10
11
| void checkName() { if (motName == "" || motName == " ") { Console.Clear(); Console.WriteLine("that's no name! give it a new name please!"); motName = Console.ReadLine(); checkName(); } else... } |
Dit zorgt voor een stackoverflow als je enter ingedrukt houd. Niet te vergeten dat de "loop" niet while true is, maar precies het zelfde doet. *ironie* Lekker efficient!
Het was ook niet iets supers. Een grappig console spelletje, waarbij je tegen willekeurig gegenereerde teams(gewoon namen) kon racen met je eigen motor(die je een naam kon geven) die een willekeurig vermogen en bouwjaar heeft. Je won op basis van willekeurigheid, en je kreeg daarvoor geld, ook op basis van willekeurigheid, waarvoor je je motor extra vermogen kunt geven, wat niks doet.
[ Voor 5% gewijzigd door space_octopus op 24-11-2014 12:34 ]
Dat is een patternspace_octopus schreef op maandag 24 november 2014 @ 12:32:
Toen ik nog een beginner was had ik dit soort classes:
C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class Money { private int money = 100; public Money() { } public int getMoney() { return money; } public void addMoney(int amountOfMoney) { money += amountOfMoney; } }
Ben even kwijt welke presentatie ik dat uit zag, leek wel interessant. Helaas heb ik voorlopig nog genoeg andere puin te ruimen voordat ik me druk kan gaan maken over dit soort minor issues.
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
1
2
3
4
5
6
7
8
| Class User { var firstName; var lastname var gebruikersnaam; var password; var nawNummer; } |
Als je dingen uitlegt, gebruik asjeblieft óf volledig Nederlands of beter nog enkel Engels.
En nou gaat het voorbeeld om OO-programmeren, daar kan je ActionScript prima voor gebruiken... maar toch, wie gebruikt er nu nog Flash?
Nou zit ik hier als enige IT-er tussen een groepje designers, maar leer ze het dan goed

[ Voor 9% gewijzigd door Richh op 24-11-2014 13:34 ]
☀️ 4500wp zuid | 🔋MT Venus 5kW | 🚗 Tesla Model 3 SR+ 2020 | ❄️ Daikin 3MXM 4kW
MacBook Pro 2023 [14-inch, M2 Pro, 32GB RAM, 512GB]
1
2
3
4
5
6
7
8
| try { persoon.BSN = int.Parse(BSN); } catch (Exception ex) { persoon.BSN = 0; } |
1
2
| transform.position = Vector3.Lerp(transform.position, spawn.transform.position, 0.1f); if (transform.position == spawn.transform.position) intro = false; |
Beweeg (ieder frame) 10% in de richting van spawn.transform.position, en daarna moet ie exact dat getal worden. En wij vroegen ons af waarom het lang duurde voordat de intro voorbij was
EDIT:
en deze nog van mezelf:
1
2
3
| #if false { //Fixes the Flashdevelop indentation bug, I'm super sorry but not really #end |
Omdat de IDE dat bestand niet helemaal goed wilde parsen en steeds de indentatie verneukte.
[ Voor 23% gewijzigd door Wolfos op 24-11-2014 14:58 ]
Hier kunnen best geldige redenen voor zijn. Insert discussie over exceptionsRohem schreef op maandag 24 november 2014 @ 14:47:
Kom net ook een mooi stukje tegen, geschreven in november vorig jaar volgens TFS. int.TryParse bestond zeker nog niet..![]()
C#:
1 2 3 4 5 6 7 8 try { persoon.BSN = int.Parse(BSN); } catch (Exception ex) { persoon.BSN = 0; }
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| static F1(jtprime1){A d,t,y,z;B*b,*u;I c,*dv,e,i,j,k,m,n,p,q,*wv,x,*zv; RZ(w); k=0; n=AN(w); wv=AV(w); RE(m=sup(n,wv)); jt->rank=0; JBREAK0; GA(z,INT,n,AR(w),AS(w)); zv= AV(z); RZ(d=grade1(ravel(w))); dv= AV(d); if(p4792){I*u=AV(p4792); c=AN(p4792); while(n>k&&c>(x=wv[dv[k]]))zv[dv[k++]]=u[x];} else{ while(n>k&&0==wv[dv[k]])zv[dv[k++]]=2; while(n>k&&1==wv[dv[k]])zv[dv[k++]]=3; while(n>k&&2==wv[dv[k]])zv[dv[k++]]=5; } if(n==k)R z; j=3; p=0; e=PT; q=1+(I)sqrt((D)m); x=wv[dv[k]]; GA(t,B01,q,1,0); u=BAV(t); sieve(0L,q,u,u); GA(y,B01,MIN(m,MM),1,0); b=BAV(y); for(;0<=p&&p<m;p+=q){ if(x>=e){c=x/PT; e=PT*(1+c); c=MIN(c,ptn); if(j<c*PT){j=c*PT; p=ptt[c-1];}} JBREAK0; q=MIN(MM,m-p); sieve(p,q,b,u); c=j+q/3; if(x>c)for(i=1-p%2;i<q;i+=2)j+=b[i]; else for(i=1-p%2;i<q;i+=2) if(b[i]){while(j==x){zv[dv[k++]]=i+p; if(n==k)R z; x=wv[dv[k]];} ++j;} } while(n>k)zv[dv[k++]]=p; R z; } |
Begrijpelijke namen hebben ze blijkbaar nog nooit van gehoord...
En dan ook nog een chronisch gebrek aan spaties om het nóg slechter leesbaar te makeniThinkSo schreef op maandag 24 november 2014 @ 16:43:
J, een prachtige programmeertaal, maar de source van de interpreter... Een stuk minder. Ben je bezig met het een en ander wat met die source te maken heeft, open je een willekeurig bestand, en dan is dit wat je ziet (het volgende komt echt uit de source, en is gewoon willekeurig geselecteerd. De rest ziet er ook zo uit.):
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 static F1(jtprime1){A d,t,y,z;B*b,*u;I c,*dv,e,i,j,k,m,n,p,q,*wv,x,*zv; RZ(w); k=0; n=AN(w); wv=AV(w); RE(m=sup(n,wv)); jt->rank=0; JBREAK0; GA(z,INT,n,AR(w),AS(w)); zv= AV(z); RZ(d=grade1(ravel(w))); dv= AV(d); if(p4792){I*u=AV(p4792); c=AN(p4792); while(n>k&&c>(x=wv[dv[k]]))zv[dv[k++]]=u[x];} else{ while(n>k&&0==wv[dv[k]])zv[dv[k++]]=2; while(n>k&&1==wv[dv[k]])zv[dv[k++]]=3; while(n>k&&2==wv[dv[k]])zv[dv[k++]]=5; } if(n==k)R z; j=3; p=0; e=PT; q=1+(I)sqrt((D)m); x=wv[dv[k]]; GA(t,B01,q,1,0); u=BAV(t); sieve(0L,q,u,u); GA(y,B01,MIN(m,MM),1,0); b=BAV(y); for(;0<=p&&p<m;p+=q){ if(x>=e){c=x/PT; e=PT*(1+c); c=MIN(c,ptn); if(j<c*PT){j=c*PT; p=ptt[c-1];}} JBREAK0; q=MIN(MM,m-p); sieve(p,q,b,u); c=j+q/3; if(x>c)for(i=1-p%2;i<q;i+=2)j+=b[i]; else for(i=1-p%2;i<q;i+=2) if(b[i]){while(j==x){zv[dv[k++]]=i+p; if(n==k)R z; x=wv[dv[k]];} ++j;} } while(n>k)zv[dv[k++]]=p; R z; }
Begrijpelijke namen hebben ze blijkbaar nog nooit van gehoord...
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
sieve en MIN zijn waarschijnlijk externe functies (de tweede waarschijnlijk een function-like macro) dus die zou een obfuscator ook ongemoeid laten. Aan de andere kant zijn er blijkbaar wel macro's als AV, AN, en GA gedefinieerd.
Ik denk toch dat het een mentaal gestoorde programmeur is die die code geschreven heeft.
Ook zijn sommige afkortingen nog redelijk logisch gekozen, zo is R bijvoorbeeld return, bij een obfuscator zou je dat ook niet verwachten (ook staan er hier en daar nog comments)Soultaker schreef op maandag 24 november 2014 @ 17:21:
Misschien auto-gegenereerde code? Hoewel de naamgeving van de variabelen dan ook niet heel logisch is (dan zou je a,b,c,.. of x0,x1,x2 ofzo verwachten), en er hier en daar tactisch whitespace is toegevoegd.
sieve en MIN zijn waarschijnlijk externe functies (de tweede waarschijnlijk een function-like macro) dus die zou een obfuscator ook ongemoeid laten. Aan de andere kant zijn er blijkbaar wel macro's als AV, AN, en GA gedefinieerd.
Ik denk toch dat het een mentaal gestoorde programmeur is die die code geschreven heeft.
Dan gebruik je user. Als je dan 'gebruiker' gebruikt ben je immers aan het vertalen (en->nl).oisyn schreef op maandag 24 november 2014 @ 12:13:
[...]
Omdat de domeinspecificatie ook over "user" praat?
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Was het maar zo'n feest. Zat code die bijkans onleesbaar is en alleen een paar super-simpele handelingen verricht.mcDavid schreef op dinsdag 25 november 2014 @ 09:30:
Volgens mij is het gewoon een gevalletje "Hoe ingewikkelder je code eruit ziet, hoe knapper de programmeur"
BSN zou je eigenlijk al een aparte class moeten implementeren met een ingebouwde (aangepaste) elf proef en een custom exception invalidBSN oid.Rohem schreef op maandag 24 november 2014 @ 14:47:
Kom net ook een mooi stukje tegen, geschreven in november vorig jaar volgens TFS. int.TryParse bestond zeker nog niet..![]()
C#:
1 2 3 4 5 6 7 8 try { persoon.BSN = int.Parse(BSN); } catch (Exception ex) { persoon.BSN = 0; }
Elfproef word voor meerderen dingen gebruikt. Naar mij mening kan het beter een extension method worden zodat je hem ook kan gebruiken op bijv. IBANPolarBear schreef op dinsdag 25 november 2014 @ 12:25:
[...]
BSN zou je eigenlijk al een aparte class moeten implementeren met een ingebouwde (aangepaste) elf proef en een custom exception invalidBSN oid.
Nvm bij bsn is hij natuurlij i * -1

[ Voor 5% gewijzigd door 2Keys op 25-11-2014 20:44 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| tasks = Queue() add_tasks_to_queue(tasks) def worker(): while True: task = tasks.get() execute(task) tasks.task_done() for _ in xrange(NUM_THREADS): t = Thread(target=worker) t.daemon = True t.start() tasks.join() |
De code heeft het altijd prima gedaan, maar dit stuk code werd dan ook maar 1x uitgevoerd in het programma. Drie keer raden wat er uiteindelijk gebeurt als dit stukje code meerdere keren wordt uitgevoerd.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir
En een BSN als int definiëren is ook al zoiets, het is een string die uit cijfers bestaat nu heb je meteen een probleem met eventuele voorloopnullen..PolarBear schreef op dinsdag 25 november 2014 @ 12:25:
[...]
BSN zou je eigenlijk al een aparte class moeten implementeren met een ingebouwde (aangepaste) elf proef en een custom exception invalidBSN oid.
Kater? Eerst water, de rest komt later
1
2
3
4
5
6
7
8
| try { executeMethodLogic(); } catch (Exception exception) { throw new Exception(exception.Message); } |
Ik vond het al vreemd dat ik zo enorm weinig informatie kreeg in de logs over de gebeurde exceptions en hierbij heb ik dus het probleem gevonden.
Het voordeel is dat ik nu zonder problemen 1/4de van de gehele codebase kan verwijderen
Wat is het probleem daarbij? Ik maak m'n functies in PHP ook altijd met try/catch exceptions.Eppux schreef op maandag 12 januari 2015 @ 20:23:
Voor de een of andere reden vond de vorige developer het een goed idee om voor zo goed als iedere methode het volgende stukje code als basis te gebruiken.
C#:
1 2 3 4 5 6 7 8 try { executeMethodLogic(); } catch (Exception exception) { throw new Exception(exception.Message); }
Ik vond het al vreemd dat ik zo enorm weinig informatie kreeg in de logs over de gebeurde exceptions en hierbij heb ik dus het probleem gevonden.
Het voordeel is dat ik nu zonder problemen 1/4de van de gehele codebase kan verwijderen.
Zoals Feanathiel correct aanhaalt, de enige informatie die je achteraf nog van een exception kan vinden in de log is de message van de exception. Type van exception en trace ben je volledig kwijt. Zeer handig om de fout te lokaliserenHatsieflatsie schreef op maandag 12 januari 2015 @ 21:22:
[...]
Wat is het probleem daarbij? Ik maak m'n functies in PHP ook altijd met try/catch exceptions.
Daarnaast wat is het voordeel aan alle methods wrappen in een try/catch? In de meeste gevallen heb je toch al een try/catch aan de oorsprong van je call stack voor het loggen. Het enige nuttige wat je mogelijk zou kunnen toevoegen is een echte foutafhandeling of mogelijks een wrapper exception met meer info voor betere tracebaarheid, maar dat is toch iets dat je meer niet als wel nodig hebt?
string _example = 1 + "";
Het is in ieder geval kortere code dan:biglia schreef op dinsdag 13 januari 2015 @ 11:34:
C# door een Senior Developer. Converteren van int naar string voortdurend als volgt:
string _example = 1 + "";
1
| string _example = 1.ToString(); |
Death smiles at us all, all a man can do is smile back.
PSN
Verwijderd
Zoals ik vermoede, heb ik een stukje legacy code wat ik niet verwijderd heb.(jQuery post request in html):
1
2
3
4
5
6
7
8
| function GetPermissions(id){ $.post("/post/post.home.php",{ type: '1', id: id }, function(data) { document.getElementById("results").innerHTML = data; } ); } |
DIe stuurt een request naam de PHP bestand "post.home.php". Deze code is bedoel om de permissies van de gebruiker te checken.
1
2
3
4
5
6
7
8
9
| function GetUserData($id){ $connection = new Connection('','','','',true); $connection->Query('SELECT * FROM `students` WHERE `id`=:id LIMIT 1'); $connection->Bind(":id", $id); $result = $connection->Select(); $connection->Disconnect(); return $result; } |
Wat als gevolg heeft dat hij de variabel $result gaat echo'en in de HTML file. Maar heb er nooit bij stil gestaan dat je deze code ook via de chrome developer console kan uitvoeren. Dit was het resultaat toen ik het uitvoerde*:
Dus ja door stukje code in te voeren kon je alle leerling accounts de gegevens uitlezen. Best stomme fout, maar ja fouten zijn gepermitteerd als je sinds kort programmeert ( 5 maanden + wat hobby ervaring).
Weer een lesje geleerd waarom je geen post request en prive gegevens combineert, en echt schaamend dat ik SELECT * all heb gedaan

*P.S: Wachtwoorden zijn niet encrypt omdat dit de developement omgeving is en niet de production omgeving.
Nooit client-side code zoals Javascript vertrouwen inderdaadVerwijderd schreef op dinsdag 13 januari 2015 @ 13:19:
Laatst heb ik voor me zelf bewezen dat ik toch echt een flut programmeur ben. De klant (van me stage) benaderde me dat er aantal gevallen waren waar bij leerlingen op het door mij gemaakte systeem konden inloggen op andere accounts.
Zoals ik vermoede, heb ik een stukje legacy code wat ik niet verwijderd heb.(jQuery post request in html):
JavaScript:
1 2 3 4 5 6 7 8 function GetPermissions(id){ $.post("/post/post.home.php",{ type: '1', id: id }, function(data) { document.getElementById("results").innerHTML = data; } ); }
DIe stuurt een request naam de PHP bestand "post.home.php". Deze code is bedoel om de permissies van de gebruiker te checken.
PHP:
1 2 3 4 5 6 7 8 9 function GetUserData($id){ $connection = new Connection('','','','',true); $connection->Query('SELECT * FROM `students` WHERE `id`=:id LIMIT 1'); $connection->Bind(":id", $id); $result = $connection->Select(); $connection->Disconnect(); return $result; }
Wat als gevolg heeft dat hij de variabel $result gaat echo'en in de HTML file. Maar heb er nooit bij stil gestaan dat je deze code ook via de chrome developer console kan uitvoeren. Dit was het resultaat toen ik het uitvoerde*:
[afbeelding]
Dus ja door stukje code in te voeren kon je alle leerling accounts de gegevens uitlezen. Best stomme fout, maar ja fouten zijn gepermitteerd als je sinds kort programmeert ( 5 maanden + wat hobby ervaring).
Weer een lesje geleerd waarom je geen post request en prive gegevens combineert, en echt schaamend dat ik SELECT * all heb gedaan![]()
*P.S: Wachtwoorden zijn niet encrypt omdat dit de developement omgeving is en niet de production omgeving.
Maar waarom zijn wachtwoorden op de productieomgeving niet ge-encrypt? Toch logischer om dat gewoon altijd goed te doen, kan je het ook niet vergeten.
Verwijderd
Ze zijn encrypt op productie omgeving, dat had je even verkeerd begrepen (of ik heb het verkeerd geformuleerd). En op development omgeving zijn ze niet geencrypt (nooit geimplementeerd omdat ik er problemen mee had...)Barryvdh schreef op dinsdag 13 januari 2015 @ 13:44:
[...]
Nooit client-side code zoals Javascript vertrouwen inderdaad
Maar waarom zijn wachtwoorden op de productieomgeving niet ge-encrypt? Toch logischer om dat gewoon altijd goed te doen, kan je het ook niet vergeten.
Javascript can be a b*tch sometimes...
[ Voor 9% gewijzigd door Verwijderd op 13-01-2015 13:54 ]
Oeps, bedoelde op ontwikkeling niet ge-encrypt inderdaad.Verwijderd schreef op dinsdag 13 januari 2015 @ 13:54:
[...]
Ze zijn encrypt op productie omgeving, dat had je even verkeerd begrepen (of ik heb het verkeerd geformuleerd). En op development omgeving zijn ze niet geencrypt (nooit geimplementeerd omdat ik er problemen mee had...)
Javascript can be a b*tch sometimes...
Dan zoek je die uit.Verwijderd schreef op dinsdag 13 januari 2015 @ 13:54:
En op development omgeving zijn ze niet geencrypt (nooit geimplementeerd omdat ik er problemen mee had...)

{signature}
1
2
3
4
| //in de header using namespace std; //in de source std:map<int,int> mymap; |
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.
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
Maar even los hiervan. Een using directive/declaration in global namespace scope in een header

[ Voor 49% gewijzigd door .oisyn op 29-01-2015 00:14 ]
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.
Precies. Ik kwam er ook alleen maar achter omdat de compiler me waarschuwde voor een ongebruikt label.Super_ik schreef op donderdag 29 januari 2015 @ 00:03:
Std: is een label
Het is helaas wel al te kenmerkend voor de kwaliteit van 'wetenschappelijke' code in het algemeen...
En daarom: -Werror (treat all warnings as errors)NESFreak schreef op donderdag 29 januari 2015 @ 00:53:
[...]
Precies. Ik kwam er ook alleen maar achter omdat de compiler me waarschuwde voor een ongebruikt label.
Het is helaas wel al te kenmerkend voor de kwaliteit van 'wetenschappelijke' code in het algemeen...
Na tijd weer in dit topic beland, vandaar de late reactie. Maar goede tip inderdaad, daar had ik nog niet aan gedachtPolarBear schreef op dinsdag 25 november 2014 @ 12:25:
[...]
BSN zou je eigenlijk al een aparte class moeten implementeren met een ingebouwde (aangepaste) elf proef en een custom exception invalidBSN oid.
Daar is toch niets mis meeivov schreef op donderdag 29 januari 2015 @ 11:08:
if($true == false)
1
2
3
4
| function isTrue($true) { if($true == false) return false; else return true; } |
Zo toch gewoon
Haha, maar het is inderdaad best verwarrend die var name
[ Voor 16% gewijzigd door xehbit op 29-01-2015 13:00 ]
1
| if($var) |
Waarom zou je er nog een == tussen zetten
[ Voor 12% gewijzigd door Richh op 29-01-2015 16:04 ]
☀️ 4500wp zuid | 🔋MT Venus 5kW | 🚗 Tesla Model 3 SR+ 2020 | ❄️ Daikin 3MXM 4kW
Zo is veel mooier *kuch*Dragon707 schreef op donderdag 29 januari 2015 @ 12:59:
PHP:
1 2 3 4 function isTrue($true) { return ($true == false) ? false : true; }
Zo toch gewoon![]()
Haha, maar het is inderdaad best verwarrend die var name
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Dat is op zich prima tijdens development, maar er zijn ook mensen die open source code releasen waarbij dat in het build system staat, dat is dan weer niet zo handig.ErikKo schreef op donderdag 29 januari 2015 @ 09:10:
[...]
En daarom: -Werror (treat all warnings as errors)
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
Het is en blijft PHP, dus waarom zou je dit enkel op een boolean gebruikenRichh schreef op donderdag 29 januari 2015 @ 16:04:
Zolang je variabele een boolean is...
PHP:
1 if($var)
Waarom zou je er nog een == tussen zetten
Maar in loosely typed talen zou ik booleans toch expliciet (en dan niet met == maar met ===true) checken, iets te vaak meegemaakt dat iemand $var dacht te kunnen gebruiken voor een string / int en dan zo af en toe "vreemde" resultaten krijgen
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.