"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
1
2
3
| public void Repaint() { repaint(); } |
Hebben we iig goed om kunnen lachen.



[ Voor 15% gewijzigd door Janoz op 05-12-2013 21:40 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Want? Het zijn toch twee verschillende functies?Janoz schreef op donderdag 05 december 2013 @ 18:48:
Nou, het enige wat daar gebeurt is een dikke stackoverflow
vind ik een mooi voorbeeld
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
| protected void MyEventHandler(object sender, EventArgs e) { if (foo % 2 == 0) { switch(columnName) { case "NameColumn": bar = MyMethod("NameColumn", true); break; case "FieldColumn": bar = MyMethod("FieldColumn", true); break; case "OtherFieldColumn": bar = MyMethod("OtherFieldColumn", true); break; } } else { switch(columnName) { case "NameColumn": bar = MyMethod("NameColumn", false); break; case "FieldColumn": bar = MyMethod("FieldColumn", false); break; case "OtherFieldColumn": bar = MyMethod("OtherFieldColumn", false); break; } } } |
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
1
2
3
4
5
6
7
8
9
10
11
12
| protected void MyEventHandler(object sender, EventArgs e) { bool descriptiveName = foo % 2 == 0; switch(columnName) { case "NameColumn": case "FieldColumn": case "OtherFieldColumn": bar = MyMethod(columnName, descriptiveName); break; } } |
Zo te zien is het belangrijk dat dit een van deze drie kolommen is. Nu is een switch voor dat soort dingen ook niet echt bedoeld, dus hoe zouden jullie dat aanpakken?
[ Voor 6% gewijzigd door -Sander1981- op 10-12-2013 17:32 ]
I don't have a solution; but I do admire the problem.
We are shaping the future
Je kunt gewoon de methode zelf overriden met een andere, zwakkere, access modifier. Dat verbieden heeft niet veel zin omdat men anders alsnog deze omweg kan nemen om hetzelfde te bereiken, wat de boel alleen maar lelijker maakt.Caelorum schreef op donderdag 05 december 2013 @ 16:44:
Nu weet ik dat repaint() al public is, maar dit is natuurlijk wel een manier om private methods alsnog te exposen
Heeft geen speciale krachten en is daar erg boos over.
Nou dat ik gekk!!Verwijderd schreef op woensdag 04 december 2013 @ 19:54:
Collega vanmiddag:
PHP:
1 2 3 4 5 6 7 8 9 <?php if ($not_found) { ob_clean(); header('HTTP/1.1 301 Moved Permanently'); header("Location: http://www.nieuwe-url-yolo.com/"); exit; clean_up_routine_that_does_something_important(); }
"MIJN CLEANUP ROUTINE WERKT NIET MEER"
![]()
[ Voor 7% gewijzigd door defixje op 11-12-2013 01:28 ]
D3Fix, Ethical Hacker, Pokeraar, Programmeur
Checken en voorkomen, ben helemaal met je eenskenneth schreef op donderdag 05 december 2013 @ 11:48:
binnen iedere iteratie van een foreach excepties afvangen die gecheckt hadden kunnen worden of op z'n minst buiten de loop eenmalig opgevangen kunnen worden, yay!
Eenmalig buiten de loop opvangen niet. Die foreach ziet eruit als de mainloop die alle items verwerkt. Als er 1 item een exception geeft wil je de rest nog steeds verwerken. Niets zo vervelend als 1 falend item/dossier/order/you-name-it, dat de hele nachtelijke batchverwerking stopt. Zelfs als ik zeker weet dat er geen exceptions uit mijn code komen, voeg ik toch een algemene try-catch-log toe binnen de loop. Een klant kan vaak wel leven met enkele items die een paar dagen later verwerkt worden, maar als alles stopt kan ik pas gaan slapen als ik het opgelost heb.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.

Niet echt een programmeerfout maar error reporting aan op een live omgeving...
Full path disclosure is ook leuk trouwens.
[ Voor 15% gewijzigd door Stroopwafels op 13-12-2013 14:23 ]
1
2
3
4
5
6
7
8
| mainloop(){ //keep running the following code readInput(); doSomething(); callOtherFunction(); mainloop(); } |
Deze jongen was erg handig met programmaatjes schrijven, maar had geen flauw benul van de kracht van recursie
En dan na X-veel-keer tegen een stack overflow lopenBlueMotion schreef op zondag 15 december 2013 @ 21:43:
hoezo lussen gebruiken:
[...]
Deze jongen was erg handig met programmaatjes schrijven, maar had geen flauw benul van de kracht van recursie
Edit: duurde niet echt lang bij mij (functies zonder body gemaakt).
[ Voor 8% gewijzigd door Styxxy op 15-12-2013 22:33 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
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
| jQuery.fn.encHTML = function () { return this.each(function () { var me = jQuery(this); var html = me.html(); me.html(html.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')); }); }; jQuery.fn.decHTML = function () { return this.each(function () { var me = jQuery(this); var html = me.html(); me.html(html.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')); }); }; jQuery.fn.isEncHTML = function (str) { if (str.search(/&/g) != -1 || str.search(/</g) != -1 || str.search(/>/g) != -1) return true; else return false; }; jQuery.fn.decHTMLifEnc = function () { return this.each(function () { var me = jQuery(this); var html = me.html(); if (jQuery.fn.isEncHTML(html)) me.html(html.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')); }); } |

Ok. Eens even kijken ...Bosmonster schreef op maandag 16 december 2013 @ 14:16:
JavaScript:
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 jQuery.fn.encHTML = function () { return this.each(function () { var me = jQuery(this); var html = me.html(); me.html(html.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')); }); }; jQuery.fn.decHTML = function () { return this.each(function () { var me = jQuery(this); var html = me.html(); me.html(html.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')); }); }; jQuery.fn.isEncHTML = function (str) { if (str.search(/&/g) != -1 || str.search(/</g) != -1 || str.search(/>/g) != -1) return true; else return false; }; jQuery.fn.decHTMLifEnc = function () { return this.each(function () { var me = jQuery(this); var html = me.html(); if (jQuery.fn.isEncHTML(html)) me.html(html.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')); }); }
- Iterative ipv atomatic replacement levert bij bepaalde reeksen bugs op.
- Niet alle noodzakelijke characters worden ge-escaped. De slash is in IE niet veilig. Quotes zijn in de regel niet altijd veilig. Bepaalde typen line breaks moeten voor IE ge-escaped worden alvorens ze als HTML ingevoegd worden anders leveren ze problemen op. etc.
- Waarom het wiel opnieuw uitvinden? jQuery.fn.text() is bedoeld om tekst als tekst in te voegen.
- Gaan controleren of een string HTML-encoded is? "Wat is deze string? Kies: html <-> tekst"
[ Voor 6% gewijzigd door R4gnax op 16-12-2013 20:02 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| private void MyComboBox_SelectedValueChanged(object sender, EventArgs e) { if (!isInitializing) { if (this.MyComboBox.SelectedValue != null) { DataRowView dataRowView = this.MyComboBox.SelectedItem as DataRowView; if (dataRowView != null) { // code hier } } } } |

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| private void ListView_OnItemDataBound(object sender, ListViewItemEventArgs e) { var dataItem = e.Item as ListViewDataItem; if (e.Item.ItemType == ListViewItemType.DataItem && dataItem != null) { var myClass = dataItem as MyClass; if (myClass != null) { // doe iets } } } |
Ik vind het niet echt nette code, maar ik weet ook niet echt hoe het beter zou kunnen. Ik zou de nesting kunnen omdraaien (return early) maar dat vind ik ook niet echt netjes ogen...
We are shaping the future
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| if (!isInitializing) { return; } if (this.MyComboBox.SelectedValue == null) { return; } DataRowView dataRowView = this.MyComboBox.SelectedItem as DataRowView; if (dataRowView == null) { return; } // code hier |
Maargoed, UI-code is toch vaak verre van elegant met alle casts, validaties en dergelijke.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
We are shaping the future
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
kenneth schreef op dinsdag 17 december 2013 @ 10:53:
Ik heb er nu dit van gemaakt zodat de (lijvige) body niet ergens rechts van mijn monitor begint: [...]
1
2
3
4
5
6
7
8
9
| DataRowView dataRowView = this.MyComboBox.SelectedItem as DataRowView; if ( !isInitializing || this.MyComboBox.SelectedValue == null || dataRowView == null) { return; } // code hier |
[ Voor 7% gewijzigd door Caelorum op 17-12-2013 11:25 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Is het op deze manier niet zo dat als die this.MyComboBox.SelecteItem (neem aan dat die uit de SelectedValue komt) leeg is dat je dan een oopsie krijgt met het toekenen aan je dataRowView? Of wordt dataRowView dan gewoon false of null o.i.d.?Caelorum schreef op dinsdag 17 december 2013 @ 11:24:
[...]
C#:
1 2 3 4 5 6 7 8 9 DataRowView dataRowView = this.MyComboBox.SelectedItem as DataRowView; if ( !isInitializing || this.MyComboBox.SelectedValue == null || dataRowView == null) { return; } // code hier
Of heb ik hier nu een early morning code stukje te pakken van mijzelf?
1
2
3
| var dataRowView = new ComboBox().SelectedItem as DataRowView; Assert.Equal(null, dataRowView); // klopt, geen NRE |
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Jup,BryanD schreef op dinsdag 17 december 2013 @ 11:57:
[...] Is het op deze manier niet zo dat als die this.MyComboBox.SelecteItem (neem aan dat die uit de SelectedValue komt) leeg is dat je dan een oopsie krijgt met het toekenen aan je dataRowView? Of wordt dataRowView dan gewoon false of null o.i.d.?
MSDN: as (C# Reference)[...] The as operator is like a cast operation. However, if the conversion isn't possible, as returns null instead of raising an exception [...]
The code is equivalent to the following expression except that the expression variable is evaluated only one time.
C#:
1 expression is type ? (type)expression : (type)null
Overigens hoef je de
1
| this.MyComboBox.SelectedValue == null |
check ook niet te doen, want die vang je al af door de
1
| dataRowView == null |
Check.
[ Voor 60% gewijzigd door Woy op 17-12-2013 15:01 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Daar werd alleen in het eerste stukje code ook al niet op gecheckt dusWoy schreef op dinsdag 17 december 2013 @ 14:58:
Maar als MyComboBox null is tijdens het initializen krijg je wel een ander resultaat dan het originele stuk code, [...]
Maar door de !isInitializing check word die code niet uitgevoerd. Dus hoewel het in deze situatie geen problemen op zal leveren is het wel degelijk ander gedrag. Hetzelfde geld bijvoorbeeld als SelectedItem een exception zou kunnen gooien als nog niet alles geïnitialiseerd is.Caelorum schreef op dinsdag 17 december 2013 @ 15:00:
[...]
Daar werd alleen in het eerste stukje code ook al niet op gecheckt dus
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
http://news.php.net/php.internals/70691On 12/16/2013 07:30 PM, Rowan Collins wrote:
> The core functions which follow neither rule include C-style
> abbreviations like "strptime" which couldn't be automatically swapped to
> either format, and complete anomalies like "nl2br". If you named those
> functions as part of a consistent style, you would probably also follow
> stronger naming conventions than Rasmus did when he named
> "htmlspecialchars".
Well, there were other factors in play there. htmlspecialchars was a
very early function. Back when PHP had less than 100 functions and the
function hashing mechanism was strlen(). In order to get a nice hash
distribution of function names across the various function name lengths
names were picked specifically to make them fit into a specific length
bucket. This was circa late 1994 when PHP was a tool just for my own
personal use and I wasn't too worried about not being able to remember
the few function names.
-Rasmus
IMDB vote history | Next-gen OS, audio en video player, search engine en Movie DB
Klopt helemaal, veranderen naar && not true checks dan maar?Woy schreef op dinsdag 17 december 2013 @ 15:02:
[...] Maar door de !isInitializing check word die code niet uitgevoerd. Dus hoewel het in deze situatie geen problemen op zal leveren is het wel degelijk ander gedrag. [...]
1
2
3
| if ($errors && count($errors)) { } |

... en etcetera en zo
Waarom überhaupt hash buckets als je toch maar 100 entries hebt? Het is niet alsof die 5-in-plaats-van-50-vergelijkingen de wereld gaat schelen. En áls je dan met hash buckets gaat werken... strlen()? Hoe bedenk je het?! Zelfs het eerste karakter van de string nemen is nog logischer...afraca schreef op dinsdag 17 december 2013 @ 17:31:
Ik kan er ook niks aan doen dat ik het tegenkwam, als het over elke andere taal ging had ik het net zo goed gepost, maar we gaan het even hebben over PHP..... Want waarom toch soms van die inconsistente functienamen?
[...]
http://news.php.net/php.internals/70691
Rasmus was natuurlijk al groot aan het dromenValHallASW schreef op dinsdag 17 december 2013 @ 20:42:
[...]
Waarom überhaupt hash buckets als je toch maar 100 entries hebt? Het is niet alsof die 5-in-plaats-van-50-vergelijkingen de wereld gaat schelen. En áls je dan met hash buckets gaat werken... strlen()? Hoe bedenk je het?! Zelfs het eerste karakter van de string nemen is nog logischer...

IMDB vote history | Next-gen OS, audio en video player, search engine en Movie DB
1
2
3
| select * from tasks where trunc(tasks.Modified_Date)>=To_char(trunc(sysdate-7,'IW')) and trunc(tasks.Modified_Date)<to_char(TRUNC(sysdate,'IW')) |
1
2
| select * from tasks where to_char(tasks.In_Progress,'IYYYIW')=to_char(sysdate-7,'IYYYIW') |
En maar afvragen waarom die queries er zo lang overdoen...
Ik vind het nog opmerkelijk dat de eerste query wel resultaten teruggeeft (datum vs string).
chaozz: Using readable dates in SQL and PHP
Ik zie hier niet direct het probleem mee?Hipska schreef op dinsdag 07 januari 2014 @ 11:25:
OMG, ik wist niet dat dat nog bestond, en dan nog op onze eigen tweakblogs!
chaozz: Using readable dates in SQL and PHP
Sorteert lekker makkelijk joh !
1
2
3
4
5
6
7
8
9
10
11
| $.ajax({ type: 'POST', url: post_url, data: selected_filters, success: function(data, textStatus, jqXHR) { $('#ajax_result').html(data); eval ("$('a[rel^=facebox_]').fancybox(options);"); eval ("$('a[class=roomGet]').click(submit_cart);"); }, dataType: 'html' }); |
Dit had niet in eval gehoeven.. Zit al in een javascript context

- Pak een temperatuur in milligraden
- Bereken de graden als floor(meetwaarde / 1000.0)
- Bereken de decimalen als meetwaarde % 1000
- Sla op in de DB als decimal waarde, "<graden>.<decimalen>"

Maar het mysterie van 'waarom maakt die grafiek toch steeds van die gekke sprongen' is nu opgelost
[ Voor 8% gewijzigd door GekkePrutser op 20-01-2014 14:11 ]
Geeft goed weer waarom de tweakers blog functionaliteit niks oplevert voor tweakers. Dat soort meuk wil je niet als content. Als iemand perse dom advies wil geven kan 'ie wel wel een wordpress install aanmaken.Hipska schreef op dinsdag 07 januari 2014 @ 11:25:
OMG, ik wist niet dat dat nog bestond, en dan nog op onze eigen tweakblogs!
chaozz: Using readable dates in SQL and PHP
https://niels.nu
Mooi dunglishYou can query periods really simple
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
1
2
3
4
5
6
7
| if( $invoice['Invoice']['type'] == 'debit' ) { $text = $company['Company']['footer_first']; $text2 = $company['Company']['footer_debit']; } elseif ( $invoice['Invoice']['type'] == 'credit' ) { $text = $company['Company']['footer_first']; $text2 = $company['Company']['footer_debit']; } |

Gelukkig is dit een fout waarbij je achteraf de meetwaarden kunt fixen door extra nullen in te voegen na de punt. Maar je had je vast nog niet gerealiseerd dat dit ook fout gaat met temperaturen onder 0 (tenzij je met Python werkt). Je zou de decimalen moeten berekenen als: meetwaarde - (meetwaarde/1000)*1000 of iets dergelijks.GekkePrutser schreef op maandag 20 januari 2014 @ 13:57:
Maar even eentje van mezelf, waar ik net pas achter kom....
- Pak een temperatuur in milligraden
- Bereken de graden als floor(meetwaarde / 1000.0)
- Bereken de decimalen als meetwaarde % 1000
- Sla op in de DB als decimal waarde, "<graden>.<decimalen>"
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.
Of je rekent in Kelvin, ben je ook van negatieve temperaturen af (in ieder geval bij alledaags gebruik)..oisyn schreef op woensdag 22 januari 2014 @ 16:23:
Gelukkig komen temperaturen onder nul deze winter niet voor
Maar als je graag met integers wil rekenen, waarom sla je dan niet de mili-graden waarde op in de DB en converteer je pas naar een floating point op het moment dat je de variabele wil tonen aan de user?
|| Vierkant voor Wiskunde ||
1
2
| double whatevs = 12.456; decimal foo = Decimal.Parse(whatevs.ToString()); |

Afhankelijk van je culture is het 12,456 of 12456
[ Voor 21% gewijzigd door MTWZZ op 22-01-2014 17:32 ]
Nu met Land Rover Series 3 en Defender 90
En als het 12456 is in jouw culture, dan is dat hetzelfde als 12,456MTWZZ schreef op woensdag 22 januari 2014 @ 17:32:
Afhankelijk van je culture is het 12,456 of 12456

1
2
| double whatevs = 12.456; decimal foo = (decimal)whatevs; |
?
Kater? Eerst water, de rest komt later
Het is sowieso al raar idd maar die impliciete culture is wel een added bonusHaan schreef op donderdag 23 januari 2014 @ 09:12:
De hele constructie is al een WTF, wat is er mis met
C#:
1 2 double whatevs = 12.456; decimal foo = (decimal)whatevs;
?
Nu met Land Rover Series 3 en Defender 90
Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site
Die culture staat gewoon duidelijk in de documentatie. Het is toch algemeen bekend dat getallen anders worden opgeschreven in verschillende landen? Als je dan getal.ToString() aanroept... wat verwacht je dan? 12345 / 12,345 / 12.346 kunnen hetzelfde getal zijn, afhankelijk van welke schrijfwijze je hanteert.MTWZZ schreef op donderdag 23 januari 2014 @ 18:11:
[...]
Het is sowieso al raar idd maar die impliciete culture is wel een added bonus
Decimal.Parse gebruikt als het goed is dezelfde culture in de conversie. Wat is hier dan de "wtf" of het "slechte programmeervoorbeeld"?
If the world wouldn't suck, we'd all fall off
Van dat laatste had ik dat niet verwacht.HuHu schreef op vrijdag 24 januari 2014 @ 11:18:
... 12345 / 12,345 / 12.346 kunnen hetzelfde getal zijn, afhankelijk van welke schrijfwijze je hanteert.
...
Verwijderd
Nee, dat is te makkelijk he (niet sarcastisch bedoeld). Hoevaak ik dat mensen al niet heb moeten uitleggen als ze op een andere omgeving daar ineens ander gedrag zienHuHu schreef op vrijdag 24 januari 2014 @ 11:18:
[...]
Die culture staat gewoon duidelijk in de documentatie. Het is toch algemeen bekend dat getallen anders worden opgeschreven in verschillende landen? Als je dan getal.ToString() aanroept... wat verwacht je dan? 12345 / 12,345 / 12.346 kunnen hetzelfde getal zijn, afhankelijk van welke schrijfwijze je hanteert.
Decimal.Parse gebruikt als het goed is dezelfde culture in de conversie. Wat is hier dan de "wtf" of het "slechte programmeervoorbeeld"?
Los daarvan, moet je natuurlijk eigenlijk gewoon altijd zoiets voorkomen door een standard culture te gebruiken..
Wat is er mis met de geeikte methode? Convert.ToDecimalHaan schreef op donderdag 23 januari 2014 @ 09:12:
De hele constructie is al een WTF, wat is er mis met
C#:
1 2 double whatevs = 12.456; decimal foo = (decimal)whatevs;
?
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Dat laatste (ik neem aan dat je 12.345 bedoelt) is nog wel de Nederlandse schrijfwijze. Voorbeeld: een huis kost 249.500,00 euro. De punt is het scheidingsteken voor de duizendtallen in het Nederlands en de komma voor de decimalen.begintmeta schreef op vrijdag 24 januari 2014 @ 12:05:
[...]
Van dat laatste had ik dat niet verwacht.
Hij doelde op je typfoutHuHu schreef op vrijdag 24 januari 2014 @ 13:18:
[...]
Dat laatste (ik neem aan dat je 12.345 bedoelt) is nog wel de Nederlandse schrijfwijze. Voorbeeld: een huis kost 249.500,00 euro. De punt is het scheidingsteken voor de duizendtallen in het Nederlands en de komma voor de decimalen.
There's no place like 127.0.0.1
Een double naar een string converteren en de string weer naar decimal vind je normaal?HuHu schreef op vrijdag 24 januari 2014 @ 11:18:
Decimal.Parse gebruikt als het goed is dezelfde culture in de conversie. Wat is hier dan de "wtf" of het "slechte programmeervoorbeeld"?
Kwestie van smaak denk ik, als ik de comments in deze thread mag geloven, is het zelfs zo dat de cast notatie onder water ook gewoon de Convert method aanroept.Grijze Vos schreef op vrijdag 24 januari 2014 @ 13:15:
[...]
Wat is er mis met de geeikte methode? Convert.ToDecimal
Dan ga ik persoonlijk liever voor de kortste notatie.
[ Voor 22% gewijzigd door Haan op 25-01-2014 11:42 ]
Kater? Eerst water, de rest komt later
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| int roadSize = ...; {...} int[] roadCells = new int[roadSize]; {...} try{ for(int i = 0; i<roadCells.length; i++){ if (roadCells[i+1] == 1){ {...} } } } catch (ArrayIndexOutOfBoundsException e) { if (roadCells[0] == 1){ {...} } } |
Ja...Ehm...Het werkt...soort van...
Het idee was hier een Cellular Automaton na te maken van een "autoweg" met bepaalde update regels die afhangen van de auto's voor ieder punt op de weg. De weg moest een cyclisch gedrag hebben, dus dit was "de handigste oplossing". Ik weet nog steeds niet hoe iemand hierop kan komen

1
2
3
4
| for (int index = 0; index <= list.Count - 1; index++) { // Doe iets met list[index] } |
Zelf vind ik het dan duidelijker om als de exacte waarde van index verder niet van belang is, een foreach te gebruiken, maar dat is meer een kwestie van voorkeur.
I don't have a solution; but I do admire the problem.
Nog even afgezien van het feit dat list.Count - 1 elke keer opnieuw uitgerekend wordt.-Sander1981- schreef op maandag 17 februari 2014 @ 22:46:
Van een collega laatst:
C#:
1 2 3 4 for (int index = 0; index <= list.Count - 1; index++) { // Doe iets met list[index] }
Zelf vind ik het dan duidelijker om als de exacte waarde van index verder niet van belang is, een foreach te gebruiken, maar dat is meer een kwestie van voorkeur.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Verwijderd
Performance, de for loop is sneller dan een foreach loop-Sander1981- schreef op maandag 17 februari 2014 @ 22:46:
Van een collega laatst:
C#:
1 2 3 4 for (int index = 0; index <= list.Count - 1; index++) { // Doe iets met list[index] }
Zelf vind ik het dan duidelijker om als de exacte waarde van index verder niet van belang is, een foreach te gebruiken, maar dat is meer een kwestie van voorkeur.
Ja? Waarom?Verwijderd schreef op dinsdag 18 februari 2014 @ 04:51:
[...]
Performance, de for loop is sneller dan een foreach loop
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Verwijderd
Oud maar een leuk stukje http://blogs.msdn.com/b/k...6072.aspx?Redirected=true Mocht je met .NET 4.X programeren dan kan je beter Parallel.For gebruiken.
Daarnaast kan ik me heel goed voorstellen dat er bepaalde situaties zijn waarbij foreach veel efficienter is dan een for. Denk bijvoorbeeld aan het itereren over een LinkedListThere are circumstances where foreach() introduces a performance penalty; but when the compiler can statically determine that the collection is infact an array, then foreach performs exactly the same as the equivalent hand coded loop.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Verwijderd
Klopt, IMHO, maar in andere gevallen is het wel sneller, zo het is beter om jezelf aan te leren altijd for loops te gebruiken i.p.v. foreach, je kan even zoeken op google wat de verschillen zijn en ik denk dat het nog beter is om jezelf Parallel.For aan te leren.Janoz schreef op dinsdag 18 februari 2014 @ 09:52:
Wat ik daar lees is dat foreach helemaal niet langzamer is dan for bij arrays.
[...]
Daarnaast kan ik me heel goed voorstellen dat er bepaalde situaties zijn waarbij foreach veel efficienter is dan een for. Denk bijvoorbeeld aan het itereren over een LinkedList
Dat ligt er natuurlijk aan hoe je de for gebruikt, als je inderdaad met de for loop elke keer de indexer gebruikt zal het erg slecht zijn voor de performance, maar als code als in onderstaand voorbeeld zal minstens net zo goed als een foreach performen ( Waarschijnlijk beter door het ontbreken van de overhead van een Enumerator )Janoz schreef op dinsdag 18 februari 2014 @ 09:52:
Daarnaast kan ik me heel goed voorstellen dat er bepaalde situaties zijn waarbij foreach veel efficienter is dan een for. Denk bijvoorbeeld aan het itereren over een LinkedList
1
2
3
| for(var cur = list.Head; cur != null; cur = cur.Next ) { } |
Maar sowieso is het meestal gewoon een non-discussie wat er beter performt, want veel zal het vaak niet schelen. Je kunt je beter druk maken over de leesbaarheid van de code.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Sorry hoor maar dit is klinklare onzin. Het gebruiksgemak van foreach en parallel.foreach weegt echt niet op tegen de minimale performance winst van for loops. Met list sizes van onder de 1000 zul je sowieso weinig tot niks merken.Verwijderd schreef op dinsdag 18 februari 2014 @ 09:58:
[...]
Klopt, IMHO, maar in andere gevallen is het wel sneller, zo het is beter om jezelf aan te leren altijd for loops te gebruiken i.p.v. foreach, je kan even zoeken op google wat de verschillen zijn en ik denk dat het nog beter is om jezelf Parallel.For aan te leren.
Tenzij je met slecht geoptilmalizeerde talen werkt (denk aan LUA enz.) of met zeer grote datasets werkt is het echt niet nodig om for loops i.p.v. foreach te gaan schrijven.
Verwijderd
Ooit software geschreven waar performance een issue kan zijn?Schnoop schreef op dinsdag 18 februari 2014 @ 10:04:
[...]
Sorry hoor maar dit is klinklare onzin. Het gebruiksgemak van foreach en parallel.foreach weegt echt niet op tegen de minimale performance winst van for loops. Met list sizes van onder de 1000 zul je sowieso weinig tot niks merken.
Tenzij je met slecht geoptilmalizeerde talen werkt (denk aan LUA enz.) of met zeer grote datasets werkt is het echt niet nodig om for loops i.p.v. foreach te gaan schrijven.
Volgens mij is het branchen/joinen van de taken alsnog duurder dan simpelweg op één thread de loop te laten uitvoeren. Pas bij grote arrays heeft het zin imo.Verwijderd schreef op dinsdag 18 februari 2014 @ 10:06:
[...]
Ooit software geschreven waar performance een issue kan zijn?
Verwijderd
Dat kan ja, ligt eraan hoe groot de arrays zijn, maar het heeft zin als je meerdere cores tot je beschikking hebt, dan kan het aanzienlijk schelen in de performance.Feanathiel schreef op dinsdag 18 februari 2014 @ 10:07:
[...]
Volgens mij is het branchen/joinen van de taken alsnog duurder dan simpelweg op één thread de loop te laten uitvoeren. Pas bij grote arrays heeft het zin imo.
Dus omdat er software bestaat waar performance een issue kan zijn, is het beter om altijd for loops te prefereren?Verwijderd schreef op dinsdag 18 februari 2014 @ 10:06:
[...]
Ooit software geschreven waar performance een issue kan zijn?
Premature optimization, root of all evil, enzovoort.
Natuurlijk interessant om te weten als performance daadwerkelijk een issue is maar om een eenvoudige en leesbare constructie permanent af te serveren is overdreven.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Als jij een taal gebruikt welke bij het ittereren van 1000 items en verschil heeft van 100ms in speed dan gebruik je een, zoals ik al eerder aangaf, slecht geoptimaliseerde taal.Verwijderd schreef op dinsdag 18 februari 2014 @ 10:06:
[...]
Ooit software geschreven waar performance een issue kan zijn?
Nogmaals, dit wordt enkel relevant bij het gebruik van grote datasets. En zelfs dan bestaat de kans dat een foreach sneller is.
Het is een verzameling van factoren om te besluiten wat je gebruikt maar de gemiddelde programmeur zal zelden moeten resorten naar een for loop, laat staan zichzelf aanleren om ze altijd te gebruiken i.p.v. foreach loop.
Verwijderd
Daarvoor schreef ik ook IMHOkenneth schreef op dinsdag 18 februari 2014 @ 10:16:
[...]
Dus omdat er software bestaat waar performance een issue kan zijn, is het beter om altijd for loops te prefereren?
Premature optimization, root of all evil, enzovoort.
Natuurlijk interessant om te weten als performance daadwerkelijk een issue is maar om een eenvoudige en leesbare constructie permanent af te serveren is overdreven.
Ik heb bij het performance team gezeten van een grote leverancier van navigatiesystemen. De problemen die ik heb gezien hadden verschillende oorzaken, maar dat lag nooit aan de 0.1% verschillen tussen for-loops en foreach. Performance-problemen ontstaan meestal omdat thread A wacht op een signaal van thread B dat nooit komt, of doordat thread B 'perongeluk' aan het busy-waiten is, of doordat geheugen dom wordt gealloceerd. Zodra je naar micro-optimalisaties op zoek moet voor de laatste procent (buiten reken-intensieve kritische stukken die heel vaak worden aangeroepen, bij navigatie zou dat het renderen van de kaart of routeberekening kunnen zijn) zit je al diep in de problemen. Je kan dan beter op zoek gaan naar een betere compiler of compilervlaggen.Verwijderd schreef op dinsdag 18 februari 2014 @ 10:06:
[...]
Ooit software geschreven waar performance een issue kan zijn?
Als je leesbare code met duidelijke interfaces schrijft voorkom je de echte problemen, dat is veel belangrijker dan je druk maken om wat voor loopje.
Verwijderd
Dan hebben we het over C(++) en niet over C# toch?MBV schreef op dinsdag 18 februari 2014 @ 10:22:
[...]
Ik heb bij het performance team gezeten van een grote leverancier van navigatiesystemen. De problemen die ik heb gezien hadden verschillende oorzaken, maar dat lag nooit aan de 0.1% verschillen tussen for-loops en foreach. Performance-problemen ontstaan meestal omdat thread A wacht op een signaal van thread B dat nooit komt, of doordat thread B 'perongeluk' aan het busy-waiten is, of doordat geheugen dom wordt gealloceerd. Zodra je naar micro-optimalisaties op zoek moet voor de laatste procent (buiten reken-intensieve kritische stukken die heel vaak worden aangeroepen, bij navigatie zou dat het renderen van de kaart of routeberekening kunnen zijn) zit je al diep in de problemen. Je kan dan beter op zoek gaan naar een betere compiler of compilervlaggen.
Als je leesbare code met duidelijke interfaces schrijft voorkom je de echte problemen, dat is veel belangrijker dan je druk maken om wat voor loopje.
Edit: http://www.c-sharpcorner....formance-of-C-Sharp-code/ lees en ik ben benieuwd naar jullie ervaringen/meningen!
[ Voor 6% gewijzigd door Verwijderd op 18-02-2014 10:37 ]
Punt 1: zit misschien wat in, maar dat is meer een keuze tussen het hebben van een fixed size lijst of niet. Als je weet dat het altijd fixed size is kies je inderdaad een Array, maar zelfs daar is performance verschil vaak helemaal niet zo groot ( Behalve als je het in een loop 1000'en keren doet natuurlijk )
Punt 2: Qua performance is het ook weer compleet afhankelijk van wat je in de loop doet. Dat kleine beetje overhead van de loop gaat in 99,9% van de gevallen echt niet het verschil maken.
Punt 3: Ja die keuze moet je maken, maar hij doet het voorkomen alsof een struct sneller is dan een class, maar dat is compleet afhankelijk van de situatie. Het maakt ook nogal een verschil in het gebruik of je classes of structs gebruikt, dus de functionele keuze is nog veel belangrijker dan de performance.
Punt 4: Valide punt, al is "Altijd" ook wel overrated, want bij kleine concatenaties zal het verschil niet echt relevant zijn.
Punt 5: Compleet idioot om voor te stellen dat je maar geen properties moet gebruiken. Mocht een property assignment echt een probleem vormen dan kun je altijd nog kijken of je dat wil optimaliseren. Natuurlijk is het goed om te weten dat er wat overhead in het gebruik van properties kan zitten. Maar weer een compleet premature optimization.
Hij noemt hooguit wat punten waar je je best bewust van moet zijn, maar echt niet iets waar ik doorgaans veel rekening mee zou houden over nette leesbare code schrijven.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
1
2
3
4
5
| $foo = true; // Nooit! anders dan true of false. if( $foo==true){ /* ... */;} elseif( $foo==false){ /* ... */;} else{ /* ... */ } |
Mag iemand mij vertellen wanneer de else iets doet
Verwijderd
Het ging mij over de for versus foreach loop, niet over de andere optimalisaties, dat ben ik met je eens dat die persoon daar veels te veel in doorslaat (hij kijkt alleen naar de tijd en ziet het project niet meer)Woy schreef op dinsdag 18 februari 2014 @ 10:49:
Wat een crap artikel is dat zeg.
Punt 1: zit misschien wat in, maar dat is meer een keuze tussen het hebben van een fixed size lijst of niet. Als je weet dat het altijd fixed size is kies je inderdaad een Array, maar zelfs daar is performance verschil vaak helemaal niet zo groot ( Behalve als je het in een loop 1000'en keren doet natuurlijk )
Punt 2: Qua performance is het ook weer compleet afhankelijk van wat je in de loop doet. Dat kleine beetje overhead van de loop gaat in 99,9% van de gevallen echt niet het verschil maken.
Punt 3: Ja die keuze moet je maken, maar hij doet het voorkomen alsof een struct sneller is dan een class, maar dat is compleet afhankelijk van de situatie. Het maakt ook nogal een verschil in het gebruik of je classes of structs gebruikt, dus de functionele keuze is nog veel belangrijker dan de performance.
Punt 4: Valide punt, al is "Altijd" ook wel overrated, want bij kleine concatenaties zal het verschil niet echt relevant zijn.
Punt 5: Compleet idioot om voor te stellen dat je maar geen properties moet gebruiken. Mocht een property assignment echt een probleem vormen dan kun je altijd nog kijken of je dat wil optimaliseren. Natuurlijk is het goed om te weten dat er wat overhead in het gebruik van properties kan zitten. Maar weer een compleet premature optimization.
Hij noemt hooguit wat punten waar je je best bewust van moet zijn, maar echt niet iets waar ik doorgaans veel rekening mee zou houden over nette leesbare code schrijven.
Nee, dat is taal-onafhankelijk! Als je denkt dat 'thread X doet per-ongeluk een busy wait' een taal-afhankelijk probleem is, dan heb je het punt helemaal gemist. Het enige punt waar taal een verschil maakt is memory-management (C++ v.s. managed talen als C# en Java) en bij interfacing tussen die twee. En ook in een managed taal kan je onhandige dingen doen met geheugen, waardoor je fragmentatie en veel garbage collections krijgt. Of natuurlijk forced garbage collections...Verwijderd schreef op dinsdag 18 februari 2014 @ 10:30:
[...]
Dan hebben we het over C(++) en niet over C# toch?
Edit: http://www.c-sharpcorner....formance-of-C-Sharp-code/ lees en ik ben benieuwd naar jullie ervaringen/meningen!
Verwijderd
Dat begrijp ik ThreadX, maar heb je echte performance nodig dan zal je toch low level moeten programmeren en niet in C#. Maar ik dwaal af het ging om het verschil tussen de for en foreach loopMBV schreef op dinsdag 18 februari 2014 @ 10:58:
[...]
Nee, dat is taal-onafhankelijk! Als je denkt dat 'thread X doet per-ongeluk een busy wait' een taal-afhankelijk probleem is, dan heb je het punt helemaal gemist. Het enige punt waar taal een verschil maakt is memory-management (C++ v.s. managed talen als C# en Java) en bij interfacing tussen die twee. En ook in een managed taal kan je onhandige dingen doen met geheugen, waardoor je fragmentatie en veel garbage collections krijgt. Of natuurlijk forced garbage collections...
28618 ticks vs. 29223 ticks.
Edit net artikel gelezen.
Enige stukje waar je wat aan hebt is dat een StringBuilder sneller is met concatenation dan een string. Jammer dat hij dat dan ook niet uitlegt waarom het sneller is in zijn artikel. Is trouwens een vraag die vaak terugkomt bij C# test vragen.
[ Voor 49% gewijzigd door Russel88 op 18-02-2014 11:19 ]
Sowieso lui die if( $foo==true) schrijven...Martijn.C.V schreef op dinsdag 18 februari 2014 @ 10:50:
Iemand met wie ik had gewerkt had een periode wat minder concentratie, wat resulteerde in stukjes code als deze:
PHP:
1 2 3 4 5 $foo = true; // Nooit! anders dan true of false. if( $foo==true){ /* ... */;} elseif( $foo==false){ /* ... */;} else{ /* ... */ }
Mag iemand mij vertellen wanneer de else iets doetZoveel van dit soort dingetjes, grappig om ze tegen te komen

En als boolean vars een naam geeft als 'isFoo' heb je die hele k*tuitleg niet nodig.
#obviousoverigfeedback
{signature}
Verwijderd
Ook daar is het compleet afhankelijk van wat je exact doet. In het geval van een array doorlopen op index is het inderdaad iets sneller, maar bij bijvoorbeeld een List doorlopen op index is het al weer langzamer.Verwijderd schreef op dinsdag 18 februari 2014 @ 10:58:
[...]
Het ging mij over de for versus foreach loop, niet over de andere optimalisaties, dat ben ik met je eens dat die persoon daar veels te veel in doorslaat (hij kijkt alleen naar de tijd en ziet het project niet meer)
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
| class Program { static void Main(string[] args) { Stopwatch sw = new Stopwatch(); var listSize = 10000000; var iterations = 100; var array = Enumerable.Range(0, listSize).ToArray(); var list = Enumerable.Range(0, listSize).ToList(); sw.Start(); for (int i = 0; i < iterations; i++) ArrayForTest(array); sw.Stop(); Console.WriteLine("ArrayForTest = {0} ms", sw.ElapsedMilliseconds); sw.Restart(); for (int i = 0; i < iterations; i++) ArrayForeachTest(array); sw.Stop(); Console.WriteLine("ArrayForeachTest = {0} ms", sw.ElapsedMilliseconds); sw.Restart(); for (int i = 0; i < iterations; i++) ListForTest(list); sw.Stop(); Console.WriteLine("ListForTest = {0} ms", sw.ElapsedMilliseconds); sw.Restart(); for (int i = 0; i < iterations; i++) ListForeachTest(list); sw.Stop(); Console.WriteLine("ListForeachTest = {0} ms", sw.ElapsedMilliseconds); Console.ReadKey(true); } static long ArrayForTest(int[] array) { long result = 0; for(int i = 0; i < array.Length; i++) { result += array[i]; } return result; } static long ArrayForeachTest(int[] array) { long result = 0; foreach (int item in array) { result += item; } return result; } static long ListForTest(List<int> list) { long result = 0; for (int i = 0; i < list.Count; i++) { result += list[i]; } return result; } static long ListForeachTest(List<int> list) { long result = 0; foreach(int item in list) { result += item; } return result; } } |
Output:
ArrayForTest = 2644 ms ArrayForeachTest = 3208 ms ListForTest = 7550 ms ListForeachTest = 6294 ms
En dit is met 100 * 10.000.000 iteraties, dus compleet verwaarloosbaar in normale situaties.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Punt 1Verwijderd schreef op dinsdag 18 februari 2014 @ 10:30:
[...]
Dan hebben we het over C(++) en niet over C# toch?
Edit: http://www.c-sharpcorner....formance-of-C-Sharp-code/ lees en ik ben benieuwd naar jullie ervaringen/meningen!
Wat hij aanhaalt bevestigd alleen maar wat ik al 100 keer gezegd heb, het maakt echt alleen uit bij grotere datasets.
Hier een (.NET 4) resultaat van zijn stuk code wat 5 keer gedraaid wordt, waarbij ik 10.000.000 iteraties gebruik i.p.v. 10.000 en geen timerticks tel maar miliseconden.:

Je ziet inederaad verschil, bij 10 miljoen iteraties.
Bij de 100.000 iteraties geven beide 0 ms, bij de 1 miljoen krijg je pas verschil te zien:

Punt 2
Hij vergelijkt hier appels met peren. ALs hij het realistisch had willen doen had zijn for loop niet Count.Add(i); moeten zijn maar Count.Add(Count[i]);
Aanschouw het resultaat (wederom iteraties verhoogd naar 10.000.000):

kijk eens aan, de foreach is zelfs sneller in dit specifiek geval....
Punt 3
Structs zijn enkel beter indien je er data inzet welke ongewijzigd blijft. Het aanmaken van structs gaat welliswaar sneller maar het aanpassen niet. Hieronder het zelfde verhaal waar bij de structs en classes al zijn aangemaakt en in een loop (10 mil iteraties) aangepast worden. Je ziet dat bij aanpassingen classes sneller zijn.

Hangt dus af van de situatie. De meneer in de link gaat hier verder niet op in dus de vergelijknig slaat wederom kant nog wal.
Punt 4
Een punt waar hij wel gelijk heeft. Uiteraard bij "veelvuldig" gebruik. Bij 1 string manipulatie zal je er niks van merken.
Punt 5
ugh....
Het verschil (wederom miliseconden) van 10 miljoen keer:

Mocht je inderdaad een systeem schrijven wat meer dan 10 miljoen keer zoiets doet dan is het wellicht interessant om geen properties te gebruiken. Als de meneer dit vermeld had had hij zijn lezers wellicht nog iets geleerd.
Verwijderd
Hoho, wil je even een paar postings naar boven en dan die van mij bekijkenSchnoop schreef op dinsdag 18 februari 2014 @ 11:48:
[...]
Punt 1
Wat hij aanhaalt bevestigd alleen maar wat ik al 100 keer gezegd heb, het maakt echt alleen uit bij grotere datasets.
Hier een (.NET 4) resultaat van zijn stuk code wat 5 keer gedraaid wordt, waarbij ik 10.000.000 iteraties gebruik i.p.v. 10.000 en geen timerticks tel maar miliseconden.:
[afbeelding]
Je ziet inederaad verschil, bij 10 miljoen iteraties.
Bij de 100.000 iteraties geven beide 0 ms, bij de 1 miljoen krijg je pas verschil te zien:
[afbeelding]
Punt 2
Hij vergelijkt hier appels met peren. ALs hij het realistisch had willen doen had zijn for loop niet Count.Add(i); moeten zijn maar Count.Add(Count[i]);
Aanschouw het resultaat (wederom iteraties verhoogd naar 10.000.000):
[afbeelding]
kijk eens aan, de foreach is zelfs sneller in dit specifiek geval....
Punt 3
Structs zijn enkel beter indien je er data inzet welke ongewijzigd blijft. Het aanmaken van structs gaat welliswaar sneller maar het aanpassen niet. Hieronder het zelfde verhaal waar bij de structs en classes al zijn aangemaakt en in een loop (10 mil iteraties) aangepast worden. Je ziet dat bij aanpassingen classes sneller zijn.
[afbeelding]
Hangt dus af van de situatie. De meneer in de link gaat hier verder niet op in dus de vergelijknig slaat wederom kant nog wal.
Punt 4
Een punt waar hij wel gelijk heeft. Uiteraard bij "veelvuldig" gebruik. Bij 1 string manipulatie zal je er niks van merken.
Punt 5
ugh....
Het verschil (wederom miliseconden) van 10 miljoen keer:
[afbeelding]
Mocht je inderdaad een systeem schrijven wat meer dan 10 miljoen keer zoiets doet dan is het wellicht interessant om geen properties te gebruiken. Als de meneer dit vermeld had had hij zijn lezers wellicht nog iets geleerd.
Wij geven hier al een aantal keer aan dat het alleen uitmaakt bij zeer grote arrays, en dan kom jij met een link aanzetten die precies dat bevestigd (maar niet letterlijk omdat de schrijver geen idee heeft wat hij doet). Vervolgens vraag je onze mening over dit stuk, die heb ik zojuist gegeven.Verwijderd schreef op dinsdag 18 februari 2014 @ 12:00:
[...]
Hoho, wil je even een paar postings naar boven en dan die van mij bekijken
Zijn compleet stuk hoort in ieder geval thuis in "slechte programmeervoorbeelden". Niet vanwege de code maar puur vanwege de belachelijk beargumentatie en het gebrek aan diepgang.
Verwijderd
Dan zit zijn stukje nu in juiste threadSchnoop schreef op dinsdag 18 februari 2014 @ 12:07:
[...]
Zijn compleet stuk hoort in ieder geval thuis in "slechte programmeervoorbeelden". Niet vanwege de code maar puur vanwege de belachelijk beargumentatie en het gebrek aan diepgang.
Ipv. slim proberen te doen kun je ook een voorbeeld geven waarbij het wel significant sneller is. Je begint je eigen stelling steeds verder af te zwakken.Verwijderd schreef op dinsdag 18 februari 2014 @ 12:11:
[...]
Dan zit zijn stukje nu in juiste thread
Performance, de for loop is sneller dan een foreach loop
Klopt, IMHO, maar in andere gevallen is het wel sneller, zo het is beter om jezelf aan te leren altijd for loops te gebruiken i.p.v. foreach, je kan even zoeken op google wat de verschillen zijn en ik denk dat het nog beter is om jezelf Parallel.For aan te leren.
Dat kan ja, ligt eraan hoe groot de arrays zijn, maar het heeft zin als je meerdere cores tot je beschikking hebt, dan kan het aanzienlijk schelen in de performance.
Verwijderd
O nee, dat doe ik (nog) niet mijn stelling verder af te zwakken, maar ik ga nu wel meer twijfelen over het performance verschil tussen een for en foreach loop. Laat ik het zo zeggen, als ik niet met "tegenbewijs" kan komen hebben jullie gelijk, afgesproken?Russel88 schreef op dinsdag 18 februari 2014 @ 12:23:
[...]
Ipv. slim proberen te doen kun je ook een voorbeeld geven waarbij het wel significant sneller is. Je begint je eigen stelling steeds verder af te zwakken.
[...]
[...]
[...]
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.