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.
Iedereen, want PHP doet dat vanaf versie 4 sowieso.Sebazzz schreef op zaterdag 04 april 2009 @ 18:06:
[...]
Hoeveel mensen compileren nou een PHP script in plaats van deze gewoon direct te laten uitvoeren als plain text bestand?
Sole survivor of the Chicxulub asteroid impact.
Dan zet je hem alsnog al plain text bestand op de server, niet als half voorverteerd gevaLAtleX schreef op zondag 05 april 2009 @ 11:19:
[...]
Iedereen, want PHP doet dat vanaf versie 4 sowieso.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Verwijderd
Dat hoeft helemaal niet hoor. Het is veel efficienter om 1x te compileren en daarna direct het resultaat vanuit storage de engine in te gooien. Hiervoor zijn genoeg mogelijkheden.Sebazzz schreef op zondag 05 april 2009 @ 18:23:
[...]
Dan zet je hem alsnog al plain text bestand op de server, niet als half voorverteerd gevaL
Negeer je nou expres al mijn posts?Sebazzz schreef op zondag 05 april 2009 @ 18:23:
[...]
Dan zet je hem alsnog al plain text bestand op de server, niet als half voorverteerd gevaL
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
Verder was het totaal niet mijn bedoeling om weer een hetze rond PHP te beginnen, die hebben we hier al genoeg...mijn excuses.
1
2
3
4
5
6
7
8
9
10
11
12
| private XmlDocument getData(){ XmlDocument result = new XmlDocument(); //plaats een boel dingen in result xml return result; } private void foo(){ XmlDocument xml = new XmlDocument(); xml.LoadXml(this.getData().InnerXml); //ga weer vrolijk iets doen met je xml document } |
Lets remove all security labels and let the problem of stupidity solve itself

Kan het niet zijn dat hij zijn xml gewoon saved in de foo functie? Zou nog ietwat steek houden.
[ Voor 41% gewijzigd door boe2 op 06-04-2009 09:56 ]
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Het had zo gemoeten:Boeboe schreef op maandag 06 april 2009 @ 09:53:
2 verschillende functies toch? De ene geeft iets terug, de andere niets
Kan het niet zijn dat hij zijn xml gewoon saved in de foo functie? Zou nog ietwat steek houden.
1
2
3
4
5
6
7
8
9
10
11
| private XmlDocument getData(){ XmlDocument result = new XmlDocument(); //plaats een boel dingen in result xml return result; } private void foo(){ XmlDocument xml = this.getData(); //ga weer vrolijk iets doen met je xml document } |
Denk ik.
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack
Vind dat niet echt een slecht programmeervoorbeeld, Dit soort constructies zijn vaak het gevolg van 23 keer refactoren, aanpassen, method extracten etc, etc. Dan ben je het overzicht ff kwijt wat die methode nou ook al weer precies deed, en dan sluipen zulke onlogische dingen er in.ikke007 schreef op maandag 06 april 2009 @ 08:49:
Tijdje terug ook een mooi grapje tegen gekomen. Moest echt 2x kijken wat er gebeurde (Overigens, met LoadXml kun je hele handige dingen doen m.n. i.c.m. namespaces, maar hier was dat niet het geval).
C#:
1 2 3 4 5 6 7 8 9 10 11 12 private XmlDocument getData(){ XmlDocument result = new XmlDocument(); //plaats een boel dingen in result xml return result; } private void foo(){ XmlDocument xml = new XmlDocument(); xml.LoadXml(this.getData().InnerXml); //ga weer vrolijk iets doen met je xml document }
Net zoiets wat ik tegen kwam laatst:Wijnbo schreef op maandag 06 april 2009 @ 11:28:
[...]
Vind dat niet echt een slecht programmeervoorbeeld, Dit soort constructies zijn vaak het gevolg van 23 keer refactoren, aanpassen, method extracten etc, etc. Dan ben je het overzicht ff kwijt wat die methode nou ook al weer precies deed, en dan sluipen zulke onlogische dingen er in.
1
2
3
4
5
6
7
| $Array = Array(); $Result = $this->Query->fetch_object; foreach($Result as $Key => $Value) { $Array[$Key] = $Value; } |
Even uit het hoofd, toch maar even aangepast naar fetch_assoc
Om die nog even te beantwoorden: Zend Optimizer heb je nodig als je werkt met php files die zijn gecompiled door Zend Guard. Als je bijv. Myreact download zijn alle files al gecompiled (en encrypted?) en die kun je enkel draaien als je Zend Optimizer hebt. Verder doet t niks zover ik kon vinden. Meeste hosters hebben dit inderdaad wel geinstalleerd staan (is gratis ook)..oisyn schreef op zondag 05 april 2009 @ 01:18:
[...]
Er is anders ook de Zend Optimizer die ik bij veel hosters geinstalleerd heb zien staan. Geen idee of die er wat mee doet (maar Zend kennende niet)
Wat natuurlijk erg efficiënt israptorix schreef op woensdag 08 april 2009 @ 17:16:
Ik bedacht me laatst nog een leuke, was iemand die een select deed op een table van 800 items, vervolgens ging hij de results in een array stoppen, en daar de laatste 10 van displayen
raptorix schreef op woensdag 08 april 2009 @ 17:16:
Ik bedacht me laatst nog een leuke, was iemand die een select deed op een table van 800 items, vervolgens ging hij de results in een array stoppen, en daar de laatste 10 van displayen
Schrijf dit soort dingen niet te snel af als inefficient. soms kan er een bedoeling achterzitten...
Ben wel eens in omgevingen terechtgekomen waarbij een sql verbinding opbouwen zo duur was dat het lonender was om het kleine resultaat ( 800 resultaten ) te cachen op de webserver dan om elke keer weer een roundtrip naar de db-server te maken om een net iets andere weergave van die 800 resultaten te tonen.
Als het enkel en alleen maar om de laatste 10 resultaten ging dan is het nutteloos ( want om te controleren of het echt de laatste 10 zijn moet je toch een roundtrip naar de db doen ), als er meer vanuit die 800 resultaten gewerkt werd kan het zin hebben...
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <?php function foo($bar) { // heel erg niet zo boeiende zaken unset($bar); } unset($bar); while (/* voorwaarde */) { if (/* een andere voorwaarde */) { $bar = 'b'; } foo($bar); } ?> |
De progger in kwestie kon niet begrijpen waarom z'n $bar alsmaar 'b' bleef...

Verwijderd

Verwijderd
Daarom zet ik het het liefste ook in zn 'strictste' modus. Dan word je vanzelf in de goede richting gedwongen.
Ik heb na een paar avonden zuipen ook nog wel eens van die grappen als eh:
1
| if($variabele='waarde') |
en dan nog een uur lopen zoeken ook

[ Voor 14% gewijzigd door Verwijderd op 11-04-2009 16:39 ]
Ik snap het ook pas sinds kort hoorVerwijderd schreef op vrijdag 10 april 2009 @ 21:31:
Noujah dat is tot daar aan toe, maar deze persoon snapte het hele concept scope niet.
Verwijderd
Die & gaat niet eens werken. Unset doet namelijk een unlink op de identifier zelf, niet op de daadwerkelijke waarde. De $bar in de functie is niet dezelfde als de $bar buiten de functie. Ze verwijzen slechts naar dezelfde waarde, maar het zijn verschillende variabelen. Dat is niet alleen een scope iets, dit werkt ook niet:Verwijderd schreef op vrijdag 10 april 2009 @ 21:26:
Hij zal de eerste niet zijn die een & voor z'n parameters vergeet, ik heb ook wel eens een flink kwartier lopen zoeken de oplossing van zo'n bug.
1
2
3
4
| $a = 4; $b = &$a; unset($b); echo $a; |
De output is gewoon 4.
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 laat overal een spatie tussen, dan zie je fouten veel vlugger.Verwijderd schreef op zaterdag 11 april 2009 @ 16:38:
Hier had een heel PHP-bash-verhaal kunnen staan
Daarom zet ik het het liefste ook in zn 'strictste' modus. Dan word je vanzelf in de goede richting gedwongen.
Ik heb na een paar avonden zuipen ook nog wel eens van die grappen als eh:
PHP:
1 if($variabele='waarde')
en dan nog een uur lopen zoeken ook. Dan weet je ook vanzelf dat je beter een dagje kan gaan slapen
1
| if ( $variabele = 'waarde' ) |
Verwijderd
Mijn forum-programmeren is ook een stuk minder secuur dan wat ik normaal gesproken doe
1
| $variable = "1"; |
inplaats van
1
| $variable = 1; |
Vrij dom
Hangt er helemaal vanaf natuurlijk. Aangezien php niet aan typechecking doet, ondesteun ik mezelf op deze manier.DJ-Visto schreef op zondag 12 april 2009 @ 14:39:
Dit vindt ik ook vrij dom (van mij zelf)
PHP:
1 $variable = "1";
inplaats van
PHP:
1 $variable = 1;
Vrij dom
Als ik in een variabele een string heb, en ik wil dat het zich gedraagd als een string etc. Dan gebruik ik gerust "1". Wil ik dat het een int is, gebruik ik gerust 1.
Op die manier kun je zelf makkelijk zien in de code wat voor type je verwacht/gebruikt
Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?
Verwijderd
1
2
3
| <?php $variable = "banaan"; ?> |
Dit hier is wel vrij dom. Niet zo'n helder idee van mij
Proberen een pagina te refreshen via asp.
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
| dim connSleep, sleep, sql, q q=1 do until q = 5 q=q+1 Set connSleep = CreateObject("ADODB.Connection") connSleep.Open Application("Connection") sleep = 3 connSleep.commandTimeout = sleep + 5 sql = "WAITFOR DELAY '00:00:" & right(clng(sleep),2) & "'" connSleep.Execute sql,,129 connSleep.close Set connSleep = Nothing |
Helaas dat ASP server side is.

[ Voor 44% gewijzigd door Verwijderd op 12-04-2009 16:28 ]
Ik had het laatst nodig gewoon om alles op 1 te zetten weet niet meer precies, maar zo is het makkelijkThunderNet schreef op zondag 12 april 2009 @ 14:58:
[...]
Hangt er helemaal vanaf natuurlijk. Aangezien php niet aan typechecking doet, ondesteun ik mezelf op deze manier.
Als ik in een variabele een string heb, en ik wil dat het zich gedraagd als een string etc. Dan gebruik ik gerust "1". Wil ik dat het een int is, gebruik ik gerust 1.
Op die manier kun je zelf makkelijk zien in de code wat voor type je verwacht/gebruikt
Laat je nu je applicatie een tijdje slapen door middel van een blocking call naar de DBMS, met nog eens een prachtig stukje non-standard SQL als klap op de vuurpijl? Dat vind ik persoonlijk een grotere WTF dan het verwarren van de serverside en de clientside.Verwijderd schreef op zondag 12 april 2009 @ 15:24:
Dit hier is wel vrij dom. Niet zo'n helder idee van mij![]()
Proberen een pagina te refreshen via asp.
Computer Science: describing our world with boxes and arrows.
Lijkt me dat je op een drukke site op die manier ook je connection pool binnen no time leeg hebt en de boel volledig inzakt...netvor schreef op dinsdag 14 april 2009 @ 09:35:
[...]
Laat je nu je applicatie een tijdje slapen door middel van een blocking call naar de DBMS, met nog eens een prachtig stukje non-standard SQL als klap op de vuurpijl? Dat vind ik persoonlijk een grotere WTF dan het verwarren van de serverside en de clientside.
Maar voor sleep heb ik ook wel spannende dingen gezien hoor (zo uit mijn hoofd):
1
2
3
4
5
6
| DateTime before = new DateTime(); TimeSpan ts; while(true) { ts = new DateTime().Substract(before); if(ts.Seconds > 10) { break; } } |
En dan afvragen waarom de performance zo slecht is

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Ampera-e (60kWh) -> (66kWh)
Ik hoop toch van harte dat op een beetje productie site je niet elke request dat script van disk zit te ladenZoijar schreef op zondag 05 april 2009 @ 23:58:
Dat gezeur over die snelheid van een php script dat in 99% van de gevallen totaal niets uitmaakt... waarschijnlijk duurt de disk seek langer dan het hele script.
Vermoed dat ze een clone willen hebben.Grijze Vos schreef op maandag 06 april 2009 @ 10:09:
Volgens mij gaat het erom dat hij een XMLDocument convert naar een XMLDocument met die LoadXML functie; die natuurlijk compleet overbodig is.
Sowieso wordt er tegenwoordig veel meer naar "chunky" inplaats van "chatty" communicatie gegaan. Het idee is dat geheugen dirt cheap is, en je door zaken in chunks op te halen en deze data te cachen je SQL servers (die toch vaak een bottleneck zijn) onlasten. Niet dat dat in het beschreven voorbeeld het geval was, dat klonk meer als iemand die LIMIT nog niet ontdekt hadGomez12 schreef op vrijdag 10 april 2009 @ 20:16:
Ben wel eens in omgevingen terechtgekomen waarbij een sql verbinding opbouwen zo duur was dat het lonender was om het kleine resultaat ( 800 resultaten ) te cachen op de webserver dan om elke keer weer een roundtrip naar de db-server te maken om een net iets andere weergave van die 800 resultaten te tonen.
https://niels.nu
[ Voor 99% gewijzigd door Woy op 16-04-2009 14:53 ]
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
NMe schreef op woensdag 01 oktober 2008 @ 13:31:
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.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Jawel, zie hier!null schreef op dinsdag 14 april 2009 @ 10:36:
Haha beide creatief hoor. Kent ASP geen sleep functie?
🃏 TCG Codex - Je volledige TCG verzameling in je broekzak ::: 🍏 TCG Codex for iOS ::: 🤖 TCG Codex for Android
Sowieso, op het moment dat je een stuk code kopieert om ergens anders te plakken (al dan niet met kleine aanpassingen) moet je je even goed achter de oren krabben.
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Ligt eraan hoe je je code opgebouwd hebt, vindt ik. Ik kan zo complete packages copypasta-en in andere projecten in veel gevallen (Java btw), en ze in de bestaande code aanroepen zonder problemen.CodeCaster schreef op donderdag 16 april 2009 @ 14:37:
Tsja, het blijft lastig om na te denken voordat je code schrijft.
Sowieso, op het moment dat je een stuk code kopieert om ergens anders te plakken (al dan niet met kleine aanpassingen) moet je je even goed achter de oren krabben.
Maar dat zijn dan ook vaak applicaties, ipv PHP scripts die vaak meer 'snel even' in elkaar gezet zijn.
Zou het - als dit probleempje vaker voorkomt overigens - niet handig zijn om een gewoonte van de 'omgekeerde' vergelijking te maken?Verwijderd schreef op zaterdag 11 april 2009 @ 16:38:
Ik heb na een paar avonden zuipen ook nog wel eens van die grappen als eh:
PHP:
1 if($variabele='waarde')
en dan nog een uur lopen zoeken ook. Dan weet je ook vanzelf dat je beter een dagje kan gaan slapen
1
2
| if ('waarde' = $variabele) // geeft een fout if ('waarde' == $variabele) // werkt |
[ Voor 30% gewijzigd door YopY op 16-04-2009 15:12 ]
Verwijderd
Je wilt immers '$variabele' vergelijken met een vooraf vastgezette waarde, en niet andersom.
Nu komt het programmeertechnisch op precies hetzelfde neer (bij == of ===), maar het oogt onlogisch
Computer Science: describing our world with boxes and arrows.
Een goede editor IDE kan je meestal wel een waarschuwing laten geven indien je de = ipv == fout zou maken. Dat lijkt mij op zich handiger.netvor schreef op donderdag 16 april 2009 @ 15:48:
Hetzelfde geldt voor if("literal".equals(myString)) in Java, dat wordt ook vaak genoemd als veilige vervanger voor myString.equals("literal") ivm NPE's. Helemaal mee eens, maar voor mensen die gewoonlijk van links naar rechts lezen is het inderdaad niet logisch.
Het voorbeeldje dat je hier aanhaalt met de .equals vind ik persoonlijk eigenlijk net niet goed. Indien het een probleem vormt betekent dit meestal dat de String waarmee je vergelijkt niet null mag zijn. Dan moet je garanderen dat dat niet kan. Of indien die wel null mag zijn dan moet je daar rekening mee houden.
Door het zo omgekeerd te doen zorg je ervoor dat een probleem minder snel gedetecteerd wordt en dat het ook moeilijker wordt om het probleem te vinden.
Een NullPointerException is veel meer een wake-up call dan een if die af en toe eens onverwacht fout gaat.
my 0.02c.
Zelf onlangs nog tegen volgende beginnersfout aangelopen:
1
2
3
4
5
6
7
| //before if if (condition) invokeMethod(); else System.out.println("Heel even println gebruiken om te debuggen..."); dosomethingElse(); //after-if |
En me maar blijven afvragen waarom doSomethingElse() niet meer altijd aangeroepen werd...
edit: idd, goed gezien kenneth
[ Voor 1% gewijzigd door bomberboy op 16-04-2009 16:48 . Reden: foutje ]
Tochbomberboy schreef op donderdag 16 april 2009 @ 16:01:
En me maar blijven afvragen waarom doSomethingElse() niet meeraltijd aangeroepen werd...
Een van de redenen dat wij in onze styleguide hebben staan dat we altijd accolades om een block gebruiken, ook al is het een block van een regel.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Ach, new int[1][2][3] is ook verkeerd om. Elk element in de buitenste array is dan een int[2][3] en niet een int[1][2]. Een notatie als new [1][2][3]int had dan logischer geweest, dat kun je in je hoofd gewoon parsen als [1] ( [2] ( [3] (int))), oftewel "een array van 1 (array van 2 (array van 3 ints)s)s".netvor schreef op donderdag 16 april 2009 @ 15:48:
Hetzelfde geldt voor if("literal".equals(myString)) in Java, dat wordt ook vaak genoemd als veilige vervanger voor myString.equals("literal") ivm NPE's. Helemaal mee eens, maar voor mensen die gewoonlijk van links naar rechts lezen is het inderdaad niet logisch. Maar ach, het past wel bij de taal: package names zijn immers ook omgedraaide FQDN's.
Nou hebben de meeste mensen hier niet veel moeite mee, maar ik ben bezig met een taal waarin een int[string] een hashmap is met string keys en int values. Maar hoe zit het dan met dit?
1
2
| int[string][] a; int[][string] b; |
a is hier een map van string naar int-arrays, terwijl b een array is van string-naar-int-maps. Intuitief gezien zo je juist zeggen dat het precies andersom is

[ Voor 24% gewijzigd door .oisyn op 16-04-2009 16:06 ]
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.
Als je eenmaal gewend bent aan die notatie is hij juist heel fijn. Je hoeft dan de variabele niet meer op null te checken.netvor schreef op donderdag 16 april 2009 @ 15:48:
Hetzelfde geldt voor if("literal".equals(myString)) in Java, dat wordt ook vaak genoemd als veilige vervanger voor myString.equals("literal") ivm NPE's. Helemaal mee eens, maar voor mensen die gewoonlijk van links naar rechts lezen is het inderdaad niet logisch. Maar ach, het past wel bij de taal: package names zijn immers ook omgedraaide FQDN's.
1
2
3
4
| bool isEqual = false; if(myVar != null) { isEqual = myVar.equals("MYTEXT"); } |
of
1
| bool isEqual = "MYTEXT".equals(myVar); |
Uiteraard werkt dit ook met constanten. Als je equals op de constante gebruikt in plaats van op de variabele scheelt het je een if (of een mogelijke null pointer exception als je van goed vertrouwen bent en de if skipt).
Ik gebruik nu al enige tijd het laatste voorbeeld en dat werkt stukken beter. Heb het liefst zo min mogelijk overbodige code. Checks op NULL zijn helaas nodig, maar leveren soms overbodig veel code op. Gelukkig zit er nu in .NET ook String.IsNullOrEmpty(), wat ook fijner werkt dan if(myVar == null || myVar.equals("")).
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Verwijderd
Eigenlijk zou je al goed moeten gaan denken of je niet iets 'verkeerd' doet als je direct gaat vergelijken op constante waarden. 9 van de 10 gevallen kan je die waarden extracten naar een const o.i.d., toch?.Gertjan. schreef op donderdag 16 april 2009 @ 16:06:
[...]
Als je eenmaal gewend bent aan die notatie is hij juist heel fijn. Je hoeft dan de variabele niet meer op null te checken.
C#:
1 2 3 4 bool isEqual = false; if(myVar != null) { isEqual = myVar.equals("MYTEXT"); }
of
C#:
1 bool isEqual = "MYTEXT".equals(myVar);
Uiteraard werkt dit ook met constanten. Als je equals op de constante gebruikt in plaats van op de variabele scheelt het je een if (of een mogelijke null pointer exception als je van goed vertrouwen bent en de if skipt).
Ik gebruik nu al enige tijd het laatste voorbeeld en dat werkt stukken beter. Heb het liefst zo min mogelijk overbodige code. Checks op NULL zijn helaas nodig, maar leveren soms overbodig veel code op. Gelukkig zit er nu in .NET ook String.IsNullOrEmpty(), wat ook fijner werkt dan if(myVar == null || myVar.equals("")).
1
2
3
4
5
6
7
8
| if(value > 64000){ value -= 65536; printf("altered\n"); } if (value < -64000){ value += 65536; printf("altered\n"); } |
Het probleem zit vrij diep, in het uitlezen en combineren van 4 registers, wat met code gebeurt die niet door mij is geschreven. Soms slaat de waarde van de registers om van neg naar pos of omgekeerd, waardoor het uitlezen van de registers op dat exacte moment slecht afloopt. Dat is mijn gok alleszins, en dit lost het voorlopig op. In de onderliggend code is iets te lezen in de stijl van 'should be single commit' wat het grotendeels verklaart.
Als ik eens tijd teveel heb los ik het wel deftig op, maar dat heb ik al dikwijls tegen mezelf gezegd
Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.
Hoe kom je erbij om slechte met een 'g' te schrijven?BtM909 schreef op donderdag 16 april 2009 @ 17:08:
De lama's zijn ook al een tijd gestopt met de allerslechtste aller tijde, dus een mooie title change voor dit topic

[ Voor 0% gewijzigd door BtM909 op 16-04-2009 17:45 ]
Misschien heft VNU aandelen in een niet nader te noemen 2e hands boekenwinkel?MBV schreef op donderdag 16 april 2009 @ 17:17:
[...]
Hoe kom je erbij om slechte met een 'g' te schrijven?
Uiteraard, maar stel dat je de waarde in een const hebt staan dan pas je hetzelfde principe toe. Dus:Verwijderd schreef op donderdag 16 april 2009 @ 16:49:
[...]
Eigenlijk zou je al goed moeten gaan denken of je niet iets 'verkeerd' doet als je direct gaat vergelijken op constante waarden. 9 van de 10 gevallen kan je die waarden extracten naar een const o.i.d., toch?
const.equals(var);
Het was slechts een voorbeeld, en had geen zin om in het voorbeeld aan te moeten duiden dat de string een const was dus heb ik er voor gekozen om gewoon een string te gebruiken.
Ben nu met een project bezig waar men geen booleans in de DB gooit, maar CHAR's dus overal staat:
if(var.equals("Y")), daar zou een const zeker op zijn plaats zijn
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.

En "Y" is wel het slechtste voorbeeld: welke constante zou je willen gebruiken die korter is dan 3 tekens? Ook zo'n collega hier die overal voor een constante gebruikt, ik vind het alleen maar lastig en vergeet het 90% van de keren (waarschijnlijk PHP-deformatie
Refactoring is inderdaad de beste optie, maar het betreft een systeem van ongeveer 9 jaar oud en geschreven in de meest aftandse versie van Java. Ben blij dat het nog draait en ga daar zeker niet aanzitten. Daar is geen tijd en geen geld voor. Het niet gebruiken van booleans is historisch gegroeid omdat Oracle geen bit veld kent en men dacht: "Weet je wat? We maken een char(1) veld".MBV schreef op donderdag 16 april 2009 @ 18:36:
Ehm, een refactoring naar booleans gebruiken lijkt mij meer op z'n plaats?![]()
En "Y" is wel het slechtste voorbeeld: welke constante zou je willen gebruiken die korter is dan 3 tekens? Ook zo'n collega hier die overal voor een constante gebruikt, ik vind het alleen maar lastig en vergeet het 90% van de keren (waarschijnlijk PHP-deformatie).
Gelukkig mag ik het systeem herschrijven en heb ik inmiddels een database connection class gemaakt die wel booleans accepteert en terug geeft.
Het huidige systeem duikt op iedere willekeurige locatie rechtstreeks de DB in en readers/connections gaan dwars door de applicatie lagen heen en ik heb denk ik wel 10 verschillende connectie methodes gezien
Waarom zou je geen constante willen gebruiken voor korte waardes? Stel dat je de boel wil omschrijven naar Nederlands (om de een of andere dubieuze reden) dan heb ik geen zin om een replace uit te voeren op "Y" -> "J". Dus dat het onzinnig is om een const te maken ben ik niet met je eens... En als je bijvoorbeeld codes bestaande uit 3 alfanumerieke karakters wilt gebruiken (voor statussen of iets dergelijks), dan is een lijstje met consts wel handig (zeker als je fatsoenlijke code completion hebt).
Maar goed met consts geldt het zelfde als met alle andere dingen, overdaad schaadt.
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Verwijderd
Het voordeel van een constante is dat je de waarde kan veranderen als dat nodig is, zonder overal de code aan te passen. Geen enkele constante is zo constant dat die nooit aangepast zal worden.MBV schreef op donderdag 16 april 2009 @ 18:36:
Ehm, een refactoring naar booleans gebruiken lijkt mij meer op z'n plaats?![]()
En "Y" is wel het slechtste voorbeeld: welke constante zou je willen gebruiken die korter is dan 3 tekens? Ook zo'n collega hier die overal voor een constante gebruikt, ik vind het alleen maar lastig en vergeet het 90% van de keren (waarschijnlijk PHP-deformatie).
Ook geeft een constante aan wat de waarde betekent. UP_LIMIT en LO_LIMIT is een stuk duidelijker dan 23452 en 3231 overal.
Mmm. Of je T of Y moet gebruiken is al een discussie op zich. Als je de DB ook gebruikt voor rapportages dan is Y handiger, omdat je op die manier direct de DB waarde in je rapport kunt gebruiken.MBV schreef op donderdag 16 april 2009 @ 20:08:
En dát waren reden 2 en 3 om "Y" niet als constante te doen: "Y" is vrij duidelijk (Al had ik zelf "T" gedaan), en de debiel die dat gaat wijzigen in "J", "T" of "W" mag op staande voet ontslagen worden.
Je moest eens weten wat voor rare requests er soms komen. Stel je hebt een Franse klant die rechtstreeks rapportages op de DB laat draaien. Reken er maar op dat hij een O en N wil ipv een Y en N. En er zijn nou eenmaal developers die klakkeloos doen wat er gevraagd wordt. Het nadeel van het ontslaan van die mensen is dat je zelf die rommel mag opruimen...
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Verwijderd
Stel, je wilt dit systeem naar booleans converteren. Wat heb je dan liever als originele code?MBV schreef op donderdag 16 april 2009 @ 20:08:
En dát waren reden 2 en 3 om "Y" niet als constante te doen: "Y" is vrij duidelijk (Al had ik zelf "T" gedaan), en de debiel die dat gaat wijzigen in "J", "T" of "W" mag op staande voet ontslagen worden.
1
2
3
4
5
6
7
8
9
| char myValue = getMyValue(); if('Y'.equals(myValue)) { /* ... */ } // ... if('N'.equals(myValue)) { /* ... */ } // ... en nog veel meer van dit soort statements ... |
of heb je liever dit:
1
2
3
4
5
6
7
8
9
10
11
12
| static final char Y = 'Y'; static final char N = 'N'; char myValue = getMyValue(); if(Y.equals(myValue)) { /* ... */ } // ... if(N.equals(myValue)) { /* ... */ } // ... en nog veel meer van dit soort statements ... |
Constanten (of beter gezegd: alles behalve literals) gebruiken is sowieso makkelijker. Je hoeft alleen de definitie van de constanten aan te passen, en de declaratie van de variabelen. De logica blijft exact gelijk.
In dit geval is de naamgeving nogal slecht, maar ik verplaats me even in de originele programmeurs, die deze DB-structuur ook bedacht hebben.
Mochten de waardes in die database ook gebruikt worden in de UI, en je zou graag de boel willen vertalen, dan zul je dus inderdaad de constanten moeten aanpassen. Natuurlijk ga je dan het systeem grondig refactoren, maar in veel gevallen ben je heel blij dat je geen magic values hebt gebruikt.
[ Voor 6% gewijzigd door .Gertjan. op 16-04-2009 20:51 ]
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
1
| if ((number / 3 * 2) + (number / 3) == number) |
With PlaneShift since 2003. WC-Grid ftw!
.Gertjan. schreef op donderdag 16 april 2009 @ 20:39:
[...]
Mmm. Of je T of Y moet gebruiken is al een discussie op zich. Als je de DB ook gebruikt voor rapportages dan is Y handiger, omdat je op die manier direct de DB waarde in je rapport kunt gebruiken.
1
2
3
4
5
6
7
8
| SELECT id, blablabla, CASE someBoolean WHEN 'T' THEN 'Y' ELSE 'N' END AS someBoolean FROM funnyTable |
Geen idee hoeveel SQL-dialecten ik nu heb gemixt, maargoed
Het nadeel van niet ontslaan is dat er nog veeeeel meer rotzooi komtHet nadeel van het ontslaan van die mensen is dat je zelf die rommel mag opruimen...
Verwijderd schreef op donderdag 16 april 2009 @ 20:48:
[...]
Stel, je wilt dit systeem naar booleans converteren. Wat heb je dan liever als originele code?
1
2
3
4
5
| class DbAccesDinges extends NormaleDbAccessDinges { public boolean getBoolean() { return "Y".equals(getMyValue()); } } |
Zoiets?

Verder maakt het voor mij niet uit: ik zou die Y.equals(myValue) toch find-replacen door myValue, en N.equals(myValue) door !myValue. Ik ben namelijk heel handig met regexes, en eclipse ook
En een extreem voorbeeld: is dit nuttig?
1
2
3
4
5
6
7
8
9
10
| public class GlobalConstants { public final char DOT = '.'; } public class SomethingElse { myMethod(string x) { if (GlobalConstants.DOT.equals(x)) doSomething(); } } } |
Bij langere waarden zou ik het wel bij gaan houden. Geloof me: dat heb ik echt wel geleerd. Mijn voorganger bij mijn vorige baan had een hekel aan enums in databases, en hield de status van orders etc bij in integers of CHAR(1). Documentatie van wat welke status betekende was nergens te bekennen.Gertjan. schreef op donderdag 16 april 2009 @ 20:50:
Tevens is het voordeel van constanten dat je geen foutjes kunt maken (of je moet de verkeerde constante pakken). Nou zal je "Y" meestal wel goed spellen, maar bij langere/minder logische waardes ga je geheid fouten maken. Of als je aan 2 systemen tegelijk werkt het ene systeem "Y" gebruikt en het andere "T", die ga je gegarandeerd door elkaar gooien.


True voor number=0 maar zonder commentaar (stond er zinnig commentaar boven) valt er niet veel over te zeggen.PhoenixT schreef op donderdag 16 april 2009 @ 21:08:
C#:
1 if ((number / 3 * 2) + (number / 3) == number)
[ Voor 44% gewijzigd door Sebazzz op 16-04-2009 21:48 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
6/3*2 + 6/3 ==6 => 4 + 2 == 6
100/3*2 + 100/3 == 100 => 66.66... + 33.33... == 100
Tenminste, zo werkt dat in de meeste talen.
Verwijderd
1
| if(number % 3 == 0) |
Met floating points zou het nog weleens kunnen kloppen overigens, maar ook dan kan je te maken krijgen met afronding.
[ Voor 49% gewijzigd door Verwijderd op 16-04-2009 22:26 ]
Je weet toch het type van number helemaal nietMBV schreef op donderdag 16 april 2009 @ 22:21:
fout, je vergeet dat het integer division is. 100/3*2 + 100/3 = 66 + 33 != 100.
Tenminste, zo werkt dat in de meeste talen.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
En nee dot, de eigenlijke waarde gaat niet verloren.
Een beetje meer info van de OP zou wel leuk zijn.
Bvb waarom stond die if er of waarom is er niet true gebruikt, er zal toch wat commentaar hebben gestaan?
Verwijderd
Inderdaad. In C++ kan het net zo goed zijn dat dit de manier is om een game engine te initialiseren. number is gewoon een ongeïnitialiseerd level object, en met de /-operator geef je aan welk level je wilt starten.Creepy schreef op donderdag 16 april 2009 @ 22:26:
[...]
Je weet toch het type van number helemaal niet
Maar ik heb wel eens creepyer dingen meegemaakt, gewoon integers opslaan in een string en constant Convert.ToInt32() gebruiken als je ze in een berekening wilt gebruiken. Redenering "Ja, dat is makkelijk als ik die waarden in een textbox wil zetten". Ja slimmerd, doe het dan andersom
[ Voor 35% gewijzigd door PhoenixT op 16-04-2009 22:48 ]
With PlaneShift since 2003. WC-Grid ftw!
Maar in Programming is dat geen realistisch uitgangspuntSimon Verhoeven schreef op donderdag 16 april 2009 @ 22:27:
MBV, ik ga even van een ideale variabele situatie uit. (geen verval e.d.)
Wat bedoel je precies? Want als je een float dat niet goed deelbaar is door 3 deelt door 3 dan eindig je toch echt met afrondingsfouten. 1/3 is nou eenmaal niet eindig in het binaire stelsel.En nee dot, de eigenlijke waarde gaat niet verloren.
.edit: ik heb het even uitgerekend, 1/3 als 32 bits float is eigenlijk
0.3333333432674407958984375
1/3 als 64 bits float is eigenlijk
0.333333333333333314829616256247390992939472198486328125
Zelfs zonder modulo is het alsnog omslachtig. Hij had ook gewoon number / 3 * 3 == number kunnen doenPhoenixT schreef op donderdag 16 april 2009 @ 22:45:
Ja klopt, ik had moeten zeggen dat number een int is. Maar die kerel had echt lang zitten nadenken over hoe hij kon berekenen of een getal nu deelbaar door 3 is of niet en kwam met deze prachtige formule op de proppen. Een simpele modulo (%) was genoeg geweest
[ Voor 43% gewijzigd door .oisyn op 16-04-2009 23:05 ]
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.
Modulus operator is natuurlijk juist.
PheonixT, dat het een int is is nogal belangrijk.
Laatste keer dat ik het probeerde leverde 3.5f/3 toch echt 1 op. Je moet door 3.0 delen om floating point division te krijgen. In C uiteraard, geen idee wat de regels voor Java zijn.
Uhm, nee? Je compiler is stuk. Of je herinnert je het gewoon verkeerdMBV schreef op donderdag 16 april 2009 @ 23:19:
Uhm, nee![]()
Laatste keer dat ik het probeerde leverde 3.5f/3 toch echt 1 op. Je moet door 3.0 delen om floating point division te krijgen. In C uiteraard, geen idee wat de regels voor Java zijn.
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
Het kan zijn dat hij zich dit herinnert: 7 / 2 / 3.0. De eerste berekening is dan 7 / 2, waarin alleen maar integers voorkomen. De berekening wordt dan uiteindelijk 3 / 3.0 in plaats van 3.5 / 3.0..oisyn schreef op donderdag 16 april 2009 @ 23:27:
[...]
Uhm, nee? Je compiler is stuk. Of je herinnert je het gewoon verkeerd. Integral types worden geconverteerd naar float bij een berekening met een float erin.
Niet per sé, vul in de originele code voor "number" eens -3 in.Verwijderd schreef op donderdag 16 april 2009 @ 22:23:
Het is dus hetzelfde als:
C:
1 if(number % 3 == 0)
Met floating points zou het nog weleens kunnen kloppen overigens, maar ook dan kan je te maken krijgen met afronding.
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
Verwijderd
(-3 / 3 * 2) + (-3 / 3) == -3l0c4lh0st schreef op vrijdag 17 april 2009 @ 01:10:
[...]
Niet per sé, vul in de originele code voor "number" eens -3 in.
(-1 * 2) + -1 == -3
-2 - 1 == -3
-3 == -3
-3 % 3 == 0
0 == 0
Volgens mij klopt het wel aardig.
[ Voor 0% gewijzigd door Verwijderd op 17-04-2009 01:53 . Reden: oeps ]
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.
Op zich is dit een goede oplossing, omdat je ten alle tijden in de database een vaste waarde kunt hanteren (in jouw geval T of F), maar er zijn natuurlijk meer wegen naar Rome. In mijn project is het helaas nodig om iets dergelijks te gebruiken. Ik heb nog geen fatsoenlijke manier gevonden om een boolean van en naar Oracle te sturen vanuit mijn code. Dus ga je inderdaad de getBoolean() functies overriden, maar mijn class doet meer dan alleen die functie overriden dus dan is het een kleine moeite om getBoolean maar meteen goed te implementeren.MBV schreef op donderdag 16 april 2009 @ 21:48:
[...]
SQL:
1 2 3 4 5 6 7 8 SELECT id, blablabla, CASE someBoolean WHEN 'T' THEN 'Y' ELSE 'N' END AS someBoolean FROM funnyTable
Geen idee hoeveel SQL-dialecten ik nu heb gemixt, maargoedZo zag het er bij een grote computerketen uit.
[...]
Het nadeel van niet ontslaan is dat er nog veeeeel meer rotzooi komt
Wat is dan de echt goede oplossing? Ook kijken naar N en indien geen N en geen Y dan een exception gooien (overigens een goed idee). Uiteraard ook rekening houden met NULL values..[...]
Java:
1 2 3 4 5 class DbAccesDinges extends NormaleDbAccessDinges { public boolean getBoolean() { return "Y".equals(getMyValue()); } }
Zoiets?Als je daar al over na gaat denken, doe het dan direct écht goed, en niet half goed.
In dit geval is het misschien niet nuttig, maar ik kan me voorstellen als je getallen moet parsen dat je wel een scheidingsteken hanteert (uiteraard noem je die niet DOT), die dan misschien geen const wordt, maar zeker wel nuttig is als global variabele.Verder maakt het voor mij niet uit: ik zou die Y.equals(myValue) toch find-replacen door myValue, en N.equals(myValue) door !myValue. Ik ben namelijk heel handig met regexes, en eclipse ook
En een extreem voorbeeld: is dit nuttig?
Java:
1 2 3 4 5 6 7 8 9 10 public class GlobalConstants { public final char DOT = '.'; } public class SomethingElse { myMethod(string x) { if (GlobalConstants.DOT.equals(x)) doSomething(); } } }
Tja, het opslaan en gebruik van abstracte codes of nietszeggende cijfers komt best veel voor. Vooral in communicatie met oudere systemen. Dan krijg je codes terug als C1 of X5 en die stellen dan een status voor waarop een actie moet worden ondernomen. Mijn oplossing is meestal om fatsoenlijk enumerators ofzo te gebruiken en dan bij communicatie met een extern systeem deze waardes pas om te zetten, maar schijnbaar hebben veel ontwikkelaars dat idee niet (getuige de gigantische wirwar aan codes en cijfers in mijn huidige project) en gooien die nietszeggende gegevens gewoon in de DB en zetten in de code dubieuze if statements om gedrag te bepalen aan de hand van die niets zeggende codes. Het enige voordeel is dan dat je bij het exporteren geen conversie hoeft te doen.[...]
Bij langere waarden zou ik het wel bij gaan houden. Geloof me: dat heb ik echt wel geleerd. Mijn voorganger bij mijn vorige baan had een hekel aan enums in databases, en hield de status van orders etc bij in integers of CHAR(1). Documentatie van wat welke status betekende was nergens te bekennenEnums, of zelfs impliciete enums door constantes in de programmeertaal te gebruiken hadden echt geholpen
Ik denk dat het gewoon een kwestie van voorkeur en ervaring is. Iedereen heeft zijn eigen grenzen en de een zal sneller een const gebruiken. Zelfde verhaal met isolatie naar functies. De een zal sneller dingen in een functie gooien dan de ander (en weer een ander maakt functies van hooguit X regels). Maar je moet maar zo zien: Het houdt het developer leven interessant.
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Ik bedoelde: Als je gaat nadenken over hoe je gaat vergelijken (Of je "Y".equals of TRUE.equals neerzet), dan moet je niet de micro-optimalisatie doen, maar moet je direct de slag maken naar een functie zoals ik die neer had gezet..Gertjan. schreef op vrijdag 17 april 2009 @ 09:11:
Wat is dan de echt goede oplossing? Ook kijken naar N en indien geen N en geen Y dan een exception gooien (overigens een goed idee). Uiteraard ook rekening houden met NULL values..
Enneh, NULL moet je uiteraard omzetten naar FILENOTFOUND
Het was echt precies zijn strategie om niet een karakter neer te zetten, maar DOT of ASTERISK e.d., omdat hij dat mooier vond staan. Een andere naam geven om te kunnen wijzigen had ook niet veel zin gehad: wanneer is de multiplier voor het laatst van teken veranderd?[...]
In dit geval is het misschien niet nuttig, maar ik kan me voorstellen als je getallen moet parsen dat je wel een scheidingsteken hanteert (uiteraard noem je die niet DOT), die dan misschien geen const wordt, maar zeker wel nuttig is als global variabele.
Functies moeten op 1 scherm passen, tenzij het nodeloos complexer wordt om het in functies op te splitsen.Ik denk dat het gewoon een kwestie van voorkeur en ervaring is. Iedereen heeft zijn eigen grenzen en de een zal sneller een const gebruiken. Zelfde verhaal met isolatie naar functies. De een zal sneller dingen in een functie gooien dan de ander (en weer een ander maakt functies van hooguit X regels). Maar je moet maar zo zien: Het houdt het developer leven interessant.
En ik zit nu met het volgende dilemma:
1
2
3
4
5
6
7
8
9
10
11
12
| getXByName(String name) { if (....) something.getXByName(); else if (...) somethingElse.getLocalXByName(); } getYByName(String name) { if (....) something.getYByName(); else if (...) somethingElse.getLocalYByName(); } |
Ze zijn allebei 100 regels lang, en op de functieaanroepen na identiek. Is het de moeite waard om een functor-klasse te maken?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| $codes = array(0,0,530,1356,1684,2158,2551,2606,2870,3509,3911,4020,4514,6725); $times = array(0); for ($i=1;$i<sizeof($codes);$i++) { if ($codes[$i]<60) { if ($codes[$i] <10) $valeur="0:0".$codes[$i]; else $valeur = "0:".$codes[$i]; } else { $minute = floor($codes[$i]/60); $sec = $codes[$i]%60; if ($sec < 10) $sec="0".sec; $valeur = $minute+':'+$sec; } $times[] = $valeur; } |
Ik denk dat dit stukkie code een aantal seconden moet converteren naar minuten:seconden notatie (dwz 65 seconden -> 1:05). Echter hij werkt niet,
1
2
3
4
5
| $chapters = array(0, 0, 530, 1356, 1684, 2158, 2551, 2606, 2870, 3509, 3911, 4020, 4514, 6725); $times = array(); foreach($chapters as $chapter) { $times[] = floor($chapter / 60) . sprintf(":%02d", ($chapter % 60)); } |
Veel mooier,
Edit:
1
2
3
4
5
| $chapterindex = array(0, 0, 530, 1356, 1684, 2158, 2551, 2606, 2870, 3509, 3911, 4020, 4514, 6725); $times = array(); foreach($chapterindex as $chapter) { $times[] = sprintf("%d:%02d", floor($chapter / 60), ($chapter % 60)); } |
is nog mooierder.
[ Voor 13% gewijzigd door YopY op 17-04-2009 09:53 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Min die constructie daaro,
Dat er iets aan moet gebeuren is uiteraard zeker. Je code geeft verder weinig context dus ik kan niet zeggen wat de beste manier is om deze code DRY compatible te makenMBV schreef op vrijdag 17 april 2009 @ 09:39:
En ik zit nu met het volgende dilemma:
Java:
1 2 3 4 5 6 7 8 9 10 11 12 getXByName(String name) { if (....) something.getXByName(); else if (...) somethingElse.getLocalXByName(); } getYByName(String name) { if (....) something.getYByName(); else if (...) somethingElse.getLocalYByName(); }
Ze zijn allebei 100 regels lang, en op de functieaanroepen na identiek. Is het de moeite waard om een functor-klasse te maken?
De 2 functies zijn uiteraard getIdentifierByName en getMethodByName, en kunnen op diverse scope-levels worden opgevraagd.
Toch iets functor-achtigs ben ik bang

[ Voor 3% gewijzigd door MBV op 17-04-2009 21:27 ]
Je kunt als argument een pointer naar MONITORINFO dan wel een MONITORINFOEX struct meegeven, het verschil zit hem in de "TCHAR szDevice[CCHDEVICENAME]" in MONITORINFOEX waar de naam in gekopieerd wordt.
Nou heb ik die CCHDEVICENAME even opgezocht en wat blijkt? Das een define naar 32The MONITORINFOEX structure is a superset of the MONITORINFO structure. It has one additional member: a string that contains a name for the display monitor. Most applications have no use for a display monitor name, and so can save some bytes by using a MONITORINFO structure.

Begrijp me niet verkeerd, geheugen sparen vind ik prima, maar 32 bytes is de moeite niet waard, je hebt ten eerste een variabele nodig die de grootte van de struct aangeeft en ten tweede heb je extra code om de grootte van de struct te controleren, dan blijft er van die 32 bytes wel erg weinig over.
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
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
1
2
3
4
5
6
7
8
9
10
| var ok = "no"; if (document.form.to.length > 0) { ok = "yes"; } .... if (ok == "no") { alert("Blabedyblooblah"); } |
Daar krullen je tenen toch van. Ok, het is geen beveiligingslek, de code is niet meteen minder leesbaar en niet veel langer dan de "juiste" code zou zijn maar als je al niet ziet wanneer je een boolean moet gebruiken en wanneer niet stel ik me toch vragen bij je programmeerkunsten.
[ Voor 3% gewijzigd door Verwijderd op 03-05-2009 03:17 ]
Hij vindt het dus onzin dat er 2 structs moeten zijn: Een met en een zonder naam..oisyn schreef op zondag 03 mei 2009 @ 01:40:
Ik snap je hele punt eigenlijk niet echt. Waar komt je geheugen besparen argument in hemelsnaam vandaan? En waarop zou die 32 chars in die struct ook maar iets te maken hebben met de code die je moet schrijven om die check te doen?
Als je die struct zonder naam gebruikt bespaar je dus 32 bytes geheugen.
Wat ie met die code om een check te doen bedoelt is mij ook een raadsel.
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
Als het 100% eigen code was zou ik de minder uitgebreide struct deprecaten en weg willen halen, maar MS heeft weer iets meer reden om aardig mbt backwards compatability te doen.
{signature}
Verwijderd
Toen de memo op het bureau van de desbetreffende progger terecht kwam zal er ongetwijfeld gevloekt zijn want bij MS is backwards compatibility redelijk king dus heb je zo'n lelijke workaround nodig.
Het is heel makkelijk natuurlijk om achteraf te roepen dat het dom is, maar vaak heeft zoiets gewoon een logische oorzaak.
Om die check te doen heb je wat extra instructies nodig en je moet ook een constante opslaan, dat stelt natuurlijk geen reet voor maar het gaat wel van je besparing van 32 bytes af..oisyn schreef op zondag 03 mei 2009 @ 01:40:
Ik snap je hele punt eigenlijk niet echt. Waar komt je geheugen besparen argument in hemelsnaam vandaan? En waarop zou die 32 chars in die struct ook maar iets te maken hebben met de code die je moet schrijven om die check te doen?
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
[ Voor 9% gewijzigd door .oisyn op 03-05-2009 18:02 ]
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.
http://www.xs4all.nl/~smit/nice-function.cpp
Hoop maar dat het nog werkt
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.
Kater? Eerst water, de rest komt later
Je hebt bovendien het voordeel dat zaken als intellisense werken. Komt nog eens bij dat je als je voor "Y" e.d. geen constanten gebruikt, ergens een of andere grens moet gaan trekken, en waar trek je die grens? Strings van 2 characters? 3? Waarom?Verwijderd schreef op donderdag 16 april 2009 @ 20:48:
Constanten (of beter gezegd: alles behalve literals) gebruiken is sowieso makkelijker. Je hoeft alleen de definitie van de constanten aan te passen, en de declaratie van de variabelen. De logica blijft exact gelijk.
Nee, alles constanten, klaar. Best practices zijn er voor een reden, en een van de belangrijkste is dat iedereen in je team dezelfde regels volgt.
https://niels.nu
Ik geloof dat het uit mathematica kwam. Herschreven CForm[xxx]. En dan maar hopen dat het nog klopt, want als dit niet werkt is het natuurlijk onmogelijk te debuggen....oisyn schreef op woensdag 06 mei 2009 @ 11:50:
Ik hoop dat die gegenereerd is, en dat je dat niet zelf in hebt lopen typen...
Het is een substap (er zijn nog 3 van deze functies...) om het perspective n-point probleem op te lossen, dwz. als je de 2d projectie van een set punten hebt, en je hebt de corresponderende 3d punten in een model in een ander coordinaten stelsel, dan wil je de diepte van de 2d punten reconstrueren. Een heel basis en belangrijk probleem in computer vision. Maar helaas erg lastig om efficient en numeriek stabiel op te lossen, omdat je te maken hebt met een set van niet lineaire vergelijkingen.
Wie maakt er een efficiënte en nette versie van?Zoijar schreef op woensdag 06 mei 2009 @ 12:19:
[...]
Ik geloof dat het uit mathematica kwam. Herschreven CForm[xxx]. En dan maar hopen dat het nog klopt, want als dit niet werkt is het natuurlijk onmogelijk te debuggen...
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
Dit topic is gesloten.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.