[alg] Slechtste programmeervoorbeelden deel 4 Vorige deel Overzicht Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 ... 75 ... 103 Laatste
Acties:
  • 993.630 views

Acties:
  • 0 Henk 'm!

  • joppybt
  • Registratie: December 2002
  • Laatst online: 26-09 09:16
Maak van het deleted-vinkje een veld deleted-datetime en zet een unieke index op email+deleted-datetime. Zo sla je twee vliegen in een klap:
  • auditing: je kunt meteen zien wanneer iemand is verwijderd
  • unieke e-mails: er zal er altijd maar eentje zijn met verwijderd-datetime leeg.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

joppybt schreef op zondag 13 november 2011 @ 12:11:
Maak van het deleted-vinkje een veld deleted-datetime en zet een unieke index op email+deleted-datetime. Zo sla je twee vliegen in een klap:
  • auditing: je kunt meteen zien wanneer iemand is verwijderd
  • unieke e-mails: er zal er altijd maar eentje zijn met verwijderd-datetime leeg.
Probleem daarmee is dat een NULL in een unieke key (met MySQL) problemen kan veroorzaken waarbij het alsnog niet uniek hoeft te zijn ;) Daarnaast (bij mij ging het niet om e-mailadressen) is dat alsnog niet uniek genoeg, de kans bestond namelijk dat er meerdere mutaties waren op hetzelfde tijdstip.

Acties:
  • 0 Henk 'm!

  • Down
  • Registratie: Februari 2005
  • Laatst online: 18:12
Onbekend schreef op zaterdag 12 november 2011 @ 19:00:
Mijn mening is dat een programma en database zo flexibel mogelijk moet zijn. De enige eis is dat er een primary key is ( 1 kolom van het type Int of Bigint) waarmee je de regels kan onderscheiden. Er mag w.m.b. gewoon dubbele en overlappende data in staan.
Dat lijkt me afhankelijk van het domein, hoe kun je dit per definitie van alle systemen zeggen? En daarbij, welk onderscheid maak je nou echt met een kunstmatige key?

Mother north, how can they sleep while their beds are burning?


Acties:
  • 0 Henk 'm!

  • HeSitated
  • Registratie: April 2009
  • Laatst online: 03-12-2024
Kom net achter slordigheidje bij www.regiotaxigelderland.nl.

Als je onder de kop "Wat kost Regiotaxi Gelderland?" klikt op tarieven, kom je in een keer in de testomgeving terecht.... :o

Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 21:53
HeSitated schreef op maandag 14 november 2011 @ 21:42:
Kom net achter slordigheidje bij www.regiotaxigelderland.nl.

Als je onder de kop "Wat kost Regiotaxi Gelderland?" klikt op tarieven, kom je in een keer in de testomgeving terecht.... :o
Help me even. Ik zie het niet?

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • HeSitated
  • Registratie: April 2009
  • Laatst online: 03-12-2024
Webgnome schreef op maandag 14 november 2011 @ 21:45:
[...]
Help me even. Ik zie het niet?
Klik op een regio en dan onder "Algemene info" en dan weer onder "Wat kost ..."

Na het klikken op de hyperlink "tarieven", even in je adres balk kijken...

[ Voor 15% gewijzigd door HeSitated op 14-11-2011 21:52 . Reden: Iets uitgebreider.. ]


Acties:
  • 0 Henk 'm!

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Ik zie hier ook niets raars. Sowieso kan ik hier de kost "Wat kost Regiotaxi Gelderland" alleen vinden op de vraag en antwoord pagina en daar staat geen link onder. Er staat wel een normale link in het menu naar tarieven.

Ah een edit hierboven.

Ik vermoed dat ze de test website gemirrored hebben naar de normale site, alleen zijn ze een hardlink vergeten :) . Wel vaag dat de testsite online staat (en onder het veel te voor de hand liggende subdomein).

[ Voor 35% gewijzigd door Aloys op 14-11-2011 21:58 ]


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Aloys schreef op maandag 14 november 2011 @ 21:55:
Ik zie hier ook niets raars. Sowieso kan ik hier de kost "Wat kost Regiotaxi Gelderland" alleen vinden op de vraag en antwoord pagina en daar staat geen link onder. Er staat wel een normale link in het menu naar tarieven.

Ah een edit hierboven.

Ik vermoed dat ze de test website gemirrored hebben naar de normale site, alleen zijn ze een hardlink vergeten :) . Wel vaag dat de testsite online staat (en onder het veel te voor de hand liggende subdomein).
Testsites zijn vaak als preview voor de klant, klant kan niet op het intranet van IT bedrijf, lastig lastig, echter heeft dat niet veel nut meer nadat de website live gegaan is.

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 22-09 20:16
Blijkbaar staan die links allemaal hardcoded in de content en heeft nooit iemand de moeite genomen om ze aan te passen. "het werkt toch?" - Totdat er een keer iets anders op dat testdomein komt te staan, dan zitten ze met allemaal dode links.
Wel jammer dat het CMS blijkbaar niet voorziet in een mogelijkheid om automatisch links te genereren, of dat die mogelijkheid blijkbaar niet gebruikt wordt.

Ik vind die hele website sowieso nogal 2004 ogen, zelden zo'n onoverzichtelijke navigatie gezien.

[ Voor 11% gewijzigd door mcDavid op 14-11-2011 23:19 ]


Acties:
  • 0 Henk 'm!

  • HeSitated
  • Registratie: April 2009
  • Laatst online: 03-12-2024
mcDavid schreef op maandag 14 november 2011 @ 23:18:
Wel jammer dat het CMS blijkbaar niet voorziet in een mogelijkheid om automatisch links te genereren, of dat die mogelijkheid blijkbaar niet gebruikt wordt.
Door alleen relationele paden te gebruiken hadden ze dit probleem niet gehad....

Vandaag een reactie gekregen van die club:
Geachte heer mevrouw,

Voor de kosten kunt u bellen met onze call center. Het call center is te bereiken op het nummer 0900 02 76.
Voor overige informatie en klachten kunt u bellen met het projectbureau in Arnhem. Zei zijn te bereiken op het nummer 026 355 21 21.

Indien er nog vragen of onduidelijkheden zijn dan vernemen wij deze graag.

Met vriendelijke groet,

S**** D**

Projectbureau Regiotaxi Gelderland
Antwoordnummer 411
6800 WC Arnhem

026 355 2121
rtgklanten@gelderland.nl
|:( |:(

Acties:
  • 0 Henk 'm!

  • jessy100
  • Registratie: November 2010
  • Laatst online: 26-09 13:42
ik vond deze laatst bij een klasgenoot zijn CSS:

code:
1
 Background-kleur:#FFFFFF


ik ben maar weggelopen :/

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:52
HeSitated schreef op dinsdag 15 november 2011 @ 17:32:
[...]Vandaag een reactie gekregen van die club:
[...]
|:( |:(
Die is best wel slecht. Zo maak je ook een goede en professionele indruk zeg!

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 16:26

Ventieldopje

I'm not your pal, mate!

jessy100 schreef op dinsdag 15 november 2011 @ 18:04:
ik vond deze laatst bij een klasgenoot zijn CSS:

code:
1
 Background-kleur:#FFFFFF


ik ben maar weggelopen :/
OMG HIJ IS DE ; VERGETEN |:(

* Ventieldopje snapt natuurlijk wel wat er echt fout is :+

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 21:32
Ventieldopje schreef op dinsdag 15 november 2011 @ 19:47:
[...]

OMG HIJ IS DE ; VERGETEN |:(

* Ventieldopje snapt natuurlijk wel wat er echt fout is :+
; 'vergeten' is niet verkeerd als dat het laatste element is in de stijl :>.

Acties:
  • 0 Henk 'm!

  • Tsunami
  • Registratie: Juni 2002
  • Niet online
HeSitated schreef op maandag 14 november 2011 @ 21:42:
Kom net achter slordigheidje bij www.regiotaxigelderland.nl.

Als je onder de kop "Wat kost Regiotaxi Gelderland?" klikt op tarieven, kom je in een keer in de testomgeving terecht.... :o
http://eenwillekeurigsubdomein.regiotaxigelderland.nl werkt ook, dus denk niet dat dat een testomgeving is. Of misschien alleen intern.

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

jessy100 schreef op dinsdag 15 november 2011 @ 18:04:
ik vond deze laatst bij een klasgenoot zijn CSS:

code:
1
 Background-kleur:#FFFFFF


ik ben maar weggelopen :/
Ja maar het werkt toch? De achtergrond is toch ook wit als je deze gebruikt _O-

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.


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
jessy100 schreef op dinsdag 15 november 2011 @ 18:04:
ik vond deze laatst bij een klasgenoot zijn CSS:

code:
1
 Background-kleur:#FFFFFF


ik ben maar weggelopen :/
En opeens moet ik weer denken aan de kuren van VBScript in de nederlandstalige MS Office. :P

Acties:
  • 0 Henk 'm!

  • Jeldert
  • Registratie: Juni 2001
  • Niet online

Jeldert

Rozijntjes

Net als formules in Nederlandstalige Excel :+

Juist


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
HeSitated schreef op dinsdag 15 november 2011 @ 17:32:
[...]

Door alleen relationele paden te gebruiken hadden ze dit probleem niet gehad....
Ik neem aan dat je relatieve paden bedoelt, if not: wat zijn relationele paden? :P

Acties:
  • 0 Henk 'm!

  • farmertjes
  • Registratie: Maart 2010
  • Laatst online: 02-06 20:29
HeSitated schreef op dinsdag 15 november 2011 @ 17:32:
[...]

Vandaag een reactie gekregen van die club:

Voor overige informatie en klachten kunt u bellen met het projectbureau in Arnhem. Zei zijn te bereiken op het nummer 026 355 21 21.

[...]
Lekker professioneel ...

flickr


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 26-09 10:03
valt in het niet bij het totaal niet lezen van de mail, en gewoon een auto-response sturen.

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
MBV schreef op woensdag 16 november 2011 @ 13:54:
valt in het niet bij het totaal niet lezen van de mail, en gewoon een auto-response sturen.
De mail is wel gelezen, maar niet goed geinterpreteerd. In de mail zal iets hebben gestaan als "de tarievenpagina werkt niet", wat geinterpreteerd werd als "ik wil de tarieven weten'. Het is dus geen auto-respons, het is een antwoord op de vraag.

Dat het een opmerking 'fix je site' was en niet een vraag 'wat kosten jullie'.... da's een ander verhaal. Maar bij mensen die 'zei' als aanwijzend voornaamwoord gebruiken verwacht ik ook niet teveel vaardigheid in begrijpend lezen.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
ValHallASW schreef op woensdag 16 november 2011 @ 14:23:
Maar bij mensen die 'zei' als aanwijzend voornaamwoord gebruiken verwacht ik ook niet teveel vaardigheid in begrijpend lezen.
Zeg dat niet te hard. Ik merk heel erg vaak dat woorden en zinssnedes in mijn hoofd heel erg zinnig lijken, maar dat ik na een submit alsnog de edit-knop moet gebruiken. Vaak of omdat mijn zinsbouw nergens op slaat, of omdat ik woorden verkeerd spel (vaak op klank).

Sterker nog, ik denk juist dat als je goed begrijpend kunt lezen, dat je juist toleranter bent voor (kleine) spellingsfoutjes.

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ik heb last van ICT-dyslexie.

Ik wilde vanmiddag het woordje srcQry schrijven en er kwam pardoes het woordje sqlQry uit.

Zo vervang ik wel vaker woorden door keywords of andere termen die ik vaak gebruik.

Acties:
  • 0 Henk 'm!

  • Bartjeh
  • Registratie: September 2010
  • Laatst online: 17-09 09:27
Suf voorbeeld van mezelf:

JavaScript:
1
2
3
for(i = 0; i< x.length; i++){
  doSomething();
}


doSomething maakt natuurlijk weer gebruik van een for-loop met i.

Dan ben je dus de halve dag bezig om erachter te komen dat als je er geen var voor zet dat het een global variabele wordt en ze elkaar dus onwijs gaan zitten neten.

zucht :/

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Bartjeh schreef op woensdag 16 november 2011 @ 16:20:
JavaScript:
1
2
3
for(i = 0; i< x.length; i++){
    ...
}
Is het niet ook slimmer om (bijv) var len = x.length; boven de for-loop te zetten en alleen len in de loop te gebruiken, zodat het niet elke keer opnieuw 'gechecked' hoeft te worden? :)

[ Voor 6% gewijzigd door OkkE op 16-11-2011 16:32 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Bartjeh
  • Registratie: September 2010
  • Laatst online: 17-09 09:27
OkkE schreef op woensdag 16 november 2011 @ 16:31:
[...]

Is het niet ook slimmer om (bijv) var len = x.length; boven de for-loop te zetten en alleen len in de loop te gebruiken, zodat het niet elke keer opnieuw 'gechecked' hoeft te worden? :)
=D Yep. Ik heb vandaag niet zo'n beste dag geloof ik 8)7

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 21:32
OkkE schreef op woensdag 16 november 2011 @ 16:31:
[...]

Is het niet ook slimmer om (bijv) var len = x.length; boven de for-loop te zetten en alleen len in de loop te gebruiken, zodat het niet elke keer opnieuw 'gechecked' hoeft te worden? :)
Is dat in JavaScript sneller dan? Ik geloof namelijk dat het in C# sneller is om te verwijzen naar de count van de array dan naar een nieuwe int waarde. Alhoewel dat natuurlijk micro-optimalisaties zijn.

Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Echt micro-micro optimalisaties, maar de jQuery-source lijkt over het algemeen ook gewoon de length property te gebruiken.

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Volgens mij wordt in veel gevallen de lengte voor een array gewoon apart opgeslagen in het geheugen.

Dan is het alleen de overhead van het afvragen van een property van je array vs. het aanmaken en vrijgeven van een tijdelijke variabele waarbij je die afvraging één keer doet.

Het is in ieder geval niet zo dat die lengte elke keer 'berekend' wordt.


Of dit, in C#, hetzelfde is voor Lists weet ik niet, je hebt dan ook een Count() methode vs. een Length property, dus in het geval van de methode zal er wel even snel geteld worden...

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

In C# zal je bij een List eerder foreach gebruiken, niet? Dan is het niet zo belangrijk :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Het lijkt er op dat het eigenlijk niets uitmaakt. http://jsperf.com/got-length :)

-- edit --
Ik vroeg het me ook meer af, dan dat het echt een stelling was.

[ Voor 32% gewijzigd door OkkE op 16-11-2011 16:53 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

OkkE schreef op woensdag 16 november 2011 @ 16:52:
Het lijkt er op dat het eigenlijk niets uitmaakt. http://jsperf.com/got-length :)

-- edit --
Ik vroeg het me ook meer af, dan dat het echt een stelling was.
Nee, ze failen allebei 8)

code:
1
2
3
4
5
6
ReferenceError: x is not defined.

    * message: x is not defined
    * fileName: http://jsperf.com/got-length
    * lineNumber: 83
    * stack: ()@http://jsperf.com/got-length:83 ([object HTMLAppletElement])@http://jsperf.com/got-length:1 ([object Object])@http://a.jsperf.com/benchmark-320.js:14 c([object Object])@http://a.jsperf.com/benchmark-320.js:14 y([object Object])@http://a.jsperf.com/benchmark-320.js:14 ao([object Object])@http://a.jsperf.com/benchmark-320.js:14 aL()@http://a.jsperf.com/benchmark-320.js:14 (124)@http://a.jsperf.com/benchmark-320.js:14

Acties:
  • 0 Henk 'm!

  • Bartjeh
  • Registratie: September 2010
  • Laatst online: 17-09 09:27
OkkE schreef op woensdag 16 november 2011 @ 16:52:
Het lijkt er op dat het eigenlijk niets uitmaakt. http://jsperf.com/got-length :)

-- edit --
Ik vroeg het me ook meer af, dan dat het echt een stelling was.
Pff! Zit ik net al m'n code te refactoren |:(

j/k :)

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:52
OkkE schreef op woensdag 16 november 2011 @ 16:31:
[...]

Is het niet ook slimmer om (bijv) var len = x.length; boven de for-loop te zetten en alleen len in de loop te gebruiken, zodat het niet elke keer opnieuw 'gechecked' hoeft te worden? :)
Ik gebruik vaak een ongekeerde forloop:
JavaScript:
1
2
3
for(i = x.length -1; i>=0 ; i--){ 
    ... 
}

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 21:32
Caelorum schreef op woensdag 16 november 2011 @ 17:02:
[...]

Ik gebruik vaak een ongekeerde forloop:
JavaScript:
1
2
3
for(i = x.length -1; i>=0 ; i--){ 
    ... 
}
Dat kan natuurlijk - vooral in C-talen - veiliger zijn met betrekking tot het geheugen. Echter is een omgekeerde for-loop niet altijd wenselijk. Ook hebben 'moderne' talen vaak een foreach-mechanisme, wat een for-loop vaak overbodig maakt.

Maar goed, dat is mijn bescheiden mening :).

Acties:
  • 0 Henk 'm!

  • Priet
  • Registratie: Januari 2001
  • Laatst online: 21:40

Priet

To boldly do what no one has..

Of je gebruikt:

JavaScript:
1
2
3
for (var i = 0, y; y = x[i]; i++) {
  // Do something with y...
}


Dan hoef je (zelf) in het geheel niet te tellen :)

/Edit: de benchmark geeft aan dat deze methode het snelste is: http://jsperf.com/got-length/3

[ Voor 22% gewijzigd door Priet op 16-11-2011 19:21 ]

"If you see a light at the end of a wormhole, it's probably a photon torpedo!"


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 16:26

Ventieldopje

I'm not your pal, mate!

Of je gebruikt:

JavaScript:
1
2
3
for(var i in x) {
    alert(x[i]);
}

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Priet schreef op woensdag 16 november 2011 @ 19:16:
/Edit: de benchmark geeft aan dat deze methode het snelste is: http://jsperf.com/got-length/3
Het kan (theoretisch) sneller als je de post-increment vermijdt.

JavaScript:
1
2
3
for (var i = x.length, y ; y = x[ --i ] ; ) {
  doSomething();
}


Overigens zijn de testcases die je aanhaalt niet echt correct. Er wordt namelijk niets met het betreffende array element gedaan, waardoor een slimme browser alles kan short-circuiten. Er zijn meer representatieve testcases te bedenken.

[ Voor 28% gewijzigd door R4gnax op 16-11-2011 19:40 ]


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 16:26

Ventieldopje

I'm not your pal, mate!

Heb de testcase even aangepast (revisie 4).

@R4gnax, in Opera 11.60 build 1150 is jou optie helaas de traagste van allen. Mijn optie is niet de snelste maar is wel het schoonste in code en het minst vatbaar voor fouten als de volgorde van het loopen niet uit maakt (die kan niet gegarandeerd worden namelijk).

In internet explorer is mijn oplossing vele echt vele malen sneller :+

Benchmark: http://jsperf.com/got-length/4

[ Voor 17% gewijzigd door Ventieldopje op 16-11-2011 19:37 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 23:48
Caelorum schreef op woensdag 16 november 2011 @ 17:02:
[...]

Ik gebruik vaak een ongekeerde forloop:
JavaScript:
1
2
3
for(i = x.length -1; i>=0 ; i--;){ 
    ... 
}
Deze valt iets om te schrijven naar een nog wat efficiëntere variant
JavaScript:
1
2
3
for(i = x.length; i--){
     ...
}

De vergelijking gebeurd eerst waarna die er eentje af haalt. de "if(0)" wordt dus pas gedaan nadat de iteratie al doorlopen is met i = 0. Hierdoor hoeft ie alleen te kijken of het niet 0 is in plaats van >= 0.

De twee eerste tests, met verschil in x.length in conditie of daarvoor gedefinieerd zijn in "mijn" Opera (11.52 op Linux) overigens exact net zo snel:
length 12,224,687 ±0.75% fastest
var len 12,224,687 ±0.75% fastest

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Ventieldopje schreef op woensdag 16 november 2011 @ 19:34:

@R4gnax, in Opera 11.60 build 1150 is jou optie helaas de traagste van allen. Mijn optie is niet de snelste maar is wel het schoonste in code en het minst vatbaar voor fouten als de volgorde van het loopen niet uit maakt (die kan niet gegarandeerd worden namelijk).
Op een daadwerkelijke array (en niet op een integer; de originele setup voor die test hoort echt thuis in dit topic!) is mijn optie toch echt sneller. Jouw optie is en het traagste en gaat keihard op z'n plaat als iemand Array.prototype heeft uitgebreid.

Het snelste is trouwens het combineren v/e decrementing loop + length cache met strict type equality met numerieke waarde 0. Daarbij uiteraard het gebruik van pre- ipv post-decrement.

JavaScript:
1
2
3
for (var i = x.length; --i !== 0 ; ) {
  doSomething();
}


http://jsperf.com/got-length/5

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 16:26

Ventieldopje

I'm not your pal, mate!

Hij is inderdaad ontzettend traag op een array, die van jou zal ik onthouden, super snel ;) Vreemd dat "for in" wel super snel werkt (in IE 9) op een integer :?

Als je Array.prototype niet uitbreid en je de volgorde niet uit maakt is dit nog het snelste of ben ik nu alsnog verkeerd aan het denken?

JavaScript:
1
2
3
4
5
var y = x.length;
for (var i in y) {
  x[i] = 'test' + i;
  doSomething();
}


Benchmark: http://jsperf.com/got-length/8

[ Voor 76% gewijzigd door Ventieldopje op 16-11-2011 20:28 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 26-09 11:35
Davio schreef op woensdag 16 november 2011 @ 16:14:
Ik heb last van ICT-dyslexie.

Ik wilde vanmiddag het woordje srcQry schrijven en er kwam pardoes het woordje sqlQry uit.

Zo vervang ik wel vaker woorden door keywords of andere termen die ik vaak gebruik.
Ik ontwikkel software waar mensen webformulieren mee bouwen, dus in de code staat heel de tijd form dit, form dat, form zus, form zo.

Laatst uren zitten zoeken warom mn query het niet deed... stond er

SQL:
1
SELECT ... FORM ... WHERE ...


8)7

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 21:32
Safari optimaliseert gewoon de drie middelste tests gewoon weg :+. Maar goed, nu definiëren wat traag is natuurlijk.

Acties:
  • 0 Henk 'm!

  • Priet
  • Registratie: Januari 2001
  • Laatst online: 21:40

Priet

To boldly do what no one has..

alex3305 schreef op woensdag 16 november 2011 @ 20:29:
[...]

Safari optimaliseert gewoon de drie middelste tests gewoon weg :+. Maar goed, nu definiëren wat traag is natuurlijk.
En zo hoort het ook. Eigenlijk zou elke browser datzelfde resultaat moeten laten zien, in wezen is de loop steeds hetzelfde.

"If you see a light at the end of a wormhole, it's probably a photon torpedo!"


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 16:28
Ik vind de verschillen tussen de browsers eigenlijk ook wel interessant. Op mijn systeem is Chrome voor de length en var len een factor 3 sneller, terwijl voor y, y 2, y 3 en y 4 (waar overigens door zowel Firefox als Chrome de verschillen worden weggeoptimaliseerd) Firefox zo'n 40% sneller is. Voor de strict type equality is Firefox een factor 2 sneller.

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Ventieldopje schreef op woensdag 16 november 2011 @ 20:20:
Als je Array.prototype niet uitbreid en je de volgorde niet uit maakt is dit nog het snelste of ben ik nu alsnog verkeerd aan het denken?

JavaScript:
1
2
3
4
5
var y = x.length;
for (var i in y) {
  x[i] = 'test' + i;
  doSomething();
}


Benchmark: http://jsperf.com/got-length/8
Ja, je bent alsnog verkeerd aan het denken.

De for ... in constructie itereert over (de namen van) de leden van een variable. Jouw variable y is een simpel Number primitief type. Die zal om en nabij de 0 leden hebben. Dat is nogal een verschil met de 10000 iteraties die de rest v/d tests doen.
hostname schreef op woensdag 16 november 2011 @ 21:02:
Voor de strict type equality is Firefox een factor 2 sneller.
In dat specifieke scenario zijn alle variabelen dan ook van een afleidbaar vast type voor Firefox, waardoor de javascript engine alles naar native code kan gaan compileren. Ik geloof niet dat Chrome dat specifieke scenario ondersteunt, maar zeker weten doe ik het niet.

[ Voor 23% gewijzigd door R4gnax op 16-11-2011 21:27 ]


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 16:26

Ventieldopje

I'm not your pal, mate!

Die zal om en nabij de 0 leden hebben. Dat is nogal een verschil met de 10000 iteraties die de rest v/d tests doen.
Haha :+ Nu net ff geprobeert in een los scriptje zonder die benchmark meuk, je hebt gelijk hij itereert niks :+ Was ook te mooi om waar te zijn natuurlijk!

JavaScript:
1
2
3
4
var i = x.length;
while(--i !== -1) {
  doSomething();
}


Is volgens de benchmark even snel als jou oplossing en doet in principe ook het zelfde.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 18:14
Ventieldopje schreef op woensdag 16 november 2011 @ 21:49:
JavaScript:
1
2
3
4
var i = x.length;
while(--i !== -1) {
  doSomething();
}


Is volgens de benchmark even snel als jou oplossing en doet in principe ook het zelfde.
Ha, dat schreeuwt om de --> "operator"...
JavaScript:
1
2
3
4
var i = x.length;
while(i-->0) {
  doSomething();
}

Maar de beste manier om dit te optimaliseren lijkt me toch om goed te kijken naar doSomething(). Bij de loop constructie kun je imho het beste voor de leesbaarste variant gaan, qua snelheid is er weinig eer aan te behalen...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Down schreef op zaterdag 12 november 2011 @ 23:54:
C#:
1
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath


Verwijst naar de path waar je .svc file zich bevindt :)
Server.MapPath("~"). ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Ventieldopje schreef op woensdag 16 november 2011 @ 19:25:
Of je gebruikt:

JavaScript:
1
2
3
for(var i in x) {
    alert(x[i]);
}
Of je gebruikt:

JavaScript:
1
_.each(x, function(num) { alert(num) })


[/shameless Underscore plug]. Of het sneller is durf ik niet te zeggen (ik betwijfel het), maar dat terzijde, het is korter. De performance zal hem ook niet in de for-loop zitten tenzij je echt heel veel hele kleine berekeningen doet - je zult altijd voor de meest leesbare, logische en bugvrije variant moeten gaan. Een .each of .map kun je moeilijk fout doen, daar je niet zit met indexes en termination conditions en increments of decrements en initialisatie van indexes op 0 of x.length - 1 etc etc etc. Ook niet met foreach overigens.

ik meende vernomen te hebben dat de underscore functionaliteit overgenomen gaan worden in de volgende ecmascript standaard. Voor optimalisaties vanuit JS interpreters is dat natuurlijk goed nieuws, daar je dit soort constructies makkelijker multithreaded kunt maken.

  • BenoitRoosens
  • Registratie: Augustus 2010
  • Laatst online: 12-07-2023
Man man man, dit is dan geschreven door een informaticus:


C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
template<class Key, class Val>
class Map
{
protected:
    std::map<Key,Val> m_items;

public:
    /// Constructor
    Map()
    {

    }
    
    /// Destructor
    ~Map()
    {
        m_items.clear();
    }

    /// Get the number of associations in the map
    DWORD Length()  { return m_items.size();}

    void SetAt(Key k, Val v)
    {
        m_items[k] = v;
    }

    /// Get the value associated with Key = k.
    Val Lookup(Key k)
    {
        return m_items[k];
    }

    /// Returns true if the map is empty
    bool IsEmpty() { return m_items.empty();}

    void Clear() { m_items.clear();}
};


Het ergste is dan dat de reden was dat de STL niet performant is 8)7

  • mbarie
  • Registratie: Mei 2011
  • Laatst online: 04-08-2021
Ik dacht ik doe voor de gein mee aan het merkenonderzoek bij de Computer Totaal. Krijg je dit:
code:
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
PRINTCOMMENTS begin programm ba_start

     PRINTCOMMENTS begin function sid_create

     PRINTCOMMENTS begin function sid_exists
     SELECT sid FROM ba__sid where `sid`="11111714164454714" AND `sid` IS NOT NULL;
     num_rows: 0
     exists_sid: is-false
     PRINTCOMMENTS end function sid_exists

     INSERT INTO `ba__sid` (`surveyid`, `time`, `sid`, `useragent`) VALUES("2011",CURRENT_TIMESTAMP,"11111714164454714","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0")
     affected_rows: 1
     PRINTCOMMENTS end function sid_create

PRINTCOMMENTS end programm ba_start

PRINTCOMMENTS ba_start
filename_requestfile: index
filename: ba_start
sid: 11111714164454714
filename_request_count: 1
filename_inserted_page: is-false
error_fatal: is-false
error_page: is-false
DUPLICATES_INSERT: is-false
duplicates_insert_requestfile: is-false
duplicates_insert: is-false

Storyteller @ soundcloud


  • haneev
  • Registratie: November 2005
  • Laatst online: 23-09 19:38
SELECT sid FROM ba__sid where `sid`="11111714164454714" AND `sid` IS NOT NULL;
Is dit niet nogal triviaal? als sid al een getal is dan zal die sowieso niet null zijn, toch?

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:51

RayNbow

Kirika <3

YopY schreef op woensdag 16 november 2011 @ 23:18:
[...]


Of je gebruikt:

JavaScript:
1
_.each(x, function(num) { alert(num) })
Zeg, gebruik eens eta-reduction... ;)

JavaScript:
1
_.each(x, alert)


Nog korter. :Y)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
haneev schreef op donderdag 17 november 2011 @ 14:21:
[...]

Is dit niet nogal triviaal? als sid al een getal is dan zal die sowieso niet null zijn, toch?
Niet als de input NULL of leeg is.

Freelance Unity3D developer


  • Ram0n
  • Registratie: Maart 2002
  • Laatst online: 03-07 13:05

Ram0n

Bierbrouwende nerd

TJHeuvel schreef op donderdag 17 november 2011 @ 16:43:
[...]

Niet als de input NULL of leeg is.
Als de input gelijk is aan 11111714164454714, dan is het dus niet leeg. "als x een waarde van y heeft en niet leeg is"...

Eigenaar/brouwer Milky Road Brewery


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

BenoitRoosens schreef op donderdag 17 november 2011 @ 14:01:
Man man man, dit is dan geschreven door een informaticus:


C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
template
class Map
{
protected:
    std::map m_items;

public:
    /// Constructor
    Map()
    {

    }
    
    /// Destructor
    ~Map()
    {
        m_items.clear();
    }

    /// Get the number of associations in the map
    DWORD Length()  { return m_items.size();}

    void SetAt(Key k, Val v)
    {
        m_items[k] = v;
    }

    /// Get the value associated with Key = k.
    Val Lookup(Key k)
    {
        return m_items[k];
    }

    /// Returns true if the map is empty
    bool IsEmpty() { return m_items.empty();}

    void Clear() { m_items.clear();}
};
Mooi ook hoe een lookup van een niet bestaande key er ineens voor zorgt dat de key daarna wel bestaat (met default value)

.edit: WTF als ik je quote dan neemt ie de < en > niet mee en alles wat daar tussenin staat 8)7. Da's op zich dan ook wel weer een slecht programmeervoorbeeld :+
.edit2: hmm, slecht programmeervoorbeeld van mijzelf dan, de issue zit in m'n chrome extension :P

[ Voor 11% gewijzigd door .oisyn op 17-11-2011 17:42 ]

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.


  • BenoitRoosens
  • Registratie: Augustus 2010
  • Laatst online: 12-07-2023
Alles is daar gewoon fout aan...
SetAt doet insert, LookUp doet een insert van een default waarde indien deze niet bestaat, die constructor en destructor staan daar niets te doen. Het beste is nog altijd, waarom zou je dit gebruiken? Je limiteert je default map capabilities door een crap implementatie. Typisch voor iemand die de STL niet kent :)

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
En dan ook die DWORD nog :X

[ Voor 5% gewijzigd door PrisonerOfPain op 17-11-2011 19:28 ]


  • mbarie
  • Registratie: Mei 2011
  • Laatst online: 04-08-2021
haneev schreef op donderdag 17 november 2011 @ 14:21:
[...]

Is dit niet nogal triviaal? als sid al een getal is dan zal die sowieso niet null zijn, toch?
Het ging mij in eerste instantie om het feit dat dergelijke informatie vrijgegevens wordt terwijl je de site bezoekt. Lijkt me allerminst gewenst gedrag van een enquete om zomaar queries uit spugen. De debug output wordt meer en meer naarmate je verder vordert.

Storyteller @ soundcloud


  • Down
  • Registratie: Februari 2005
  • Laatst online: 18:12
Handig om een alternatief te weten, al kost hij wel meer moeite :+

Mother north, how can they sleep while their beds are burning?


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
In het kader van "ken je API":

C#:
1
2
3
4
if (shoppingBasket.ShoppingBasketItems.Where(x => x.ContentType == "RET").FirstOrDefault() != null)
{
    return 0;
}

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 26-09 09:20

Haan

dotnetter

Grijze Vos schreef op vrijdag 18 november 2011 @ 09:48:
In het kader van "ken je API":

C#:
1
2
3
4
if (shoppingBasket.ShoppingBasketItems.Where(x => x.ContentType == "RET").FirstOrDefault() != null)
{
    return 0;
}
Ik moet zeggen dat ik daar soms ook nog wel intrap, maar als ik dan later naar zo'n regel kijk valt het meestal wel weer op dat het niet zo handig is.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

Verwijderd

Vandaag een mooie gezien via reddit:

JavaScript:
1
dir.permissions = 666; // Make the file writable


Maar liefst vijf bugs in een regel.

De bron.

[ Voor 9% gewijzigd door Verwijderd op 19-11-2011 17:45 ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Die programmeur was vast een satanist. ^^

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Haan schreef op vrijdag 18 november 2011 @ 11:47:
[...]

Ik moet zeggen dat ik daar soms ook nog wel intrap, maar als ik dan later naar zo'n regel kijk valt het meestal wel weer op dat het niet zo handig is.
Gevalletje Any() gebruiken :)

C#:
1
2
3
4
if (shoppingBasket.ShoppingBasketItems.Any(x => x.ContentType == "RET")) 
{ 
    return 0; 
}


There, I fixed it.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Volgens mij had ie dat wel door hoor. ;)

Oh btw, vergeten te zeggen dat deze code uberhaupt incorrect was (de if statement had er niet mogen staan uberhaupt). Maar het grappigste was nog dat deze code gebruikt werd om een totaal uit te rekenen dat vervolgens helemaal niet mmer gebruikt werd in de rest van de code.

Een (WPF) viewmodel class van 1600 regels van dit soort fijne troep. :( Laatste horde in de complete rewrite, en dan ben ik klaar. (Op wat kleine dingetjes na.)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Zie ik dat ik zelf ook eens vergeten ben Any() te gebruiken

C#:
1
2
3
4
5
var p = from pr in properties
        where pr.Name == property
        select pr;

return p.Count() > 0;


Oeps :)

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:09
So what ? Als je code duidelijk is, is het goed. Gaat 'Any' zoveel performanter zijn ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

whoami schreef op zondag 20 november 2011 @ 08:47:
So what ? Als je code duidelijk is, is het goed. Gaat 'Any' zoveel performanter zijn ?
Zie http://stackoverflow.com/...rms-better-any-vs-count-0
Daadwerkelijk verschil zal wel niet echt te merken zijn maar ik vind Any() vaak leesbaarder..

Nu met Land Rover Series 3 en Defender 90


Acties:
  • 0 Henk 'm!

Verwijderd

Nou ja, het kan een heel stuk korter ;)

C#:
1
return properties.Any(p => p.Name == property);


Daarbij zal het na optimalisatie (compiler) weinig verschil maken want je doet ongeveer hetzelfde.

De bovengenoemde Linq-query wordt idd pas uitgevoerd zodra je Count() aanroept.
Dan zul je dus dit krijgen:
C#:
1
return properties.Count(p => p.Name == property);

Hierbij gaan we dus itereren door alle properties en tellen hoeveel er de opgevraagde naam hebben. Waar Any stopt zodra we er één gevonden hebben.

Any:
C#:
1
2
3
4
5
6
7
8
9
bool Any<Tsource>(this IEnummerable<Tsource> source, Func<Tsource, bool> predicate)
{
foreach(Tsource s in source)
{
if(predictate.Invoke(s))
return true;
}
return false;
}


Count:
C#:
1
2
3
4
5
6
7
8
9
10
int Count<Tsource>(this IEnummerable<Tsource> source, Func<Tsource, bool> predicate)
{
int count = 0;
foreach(Tsource s in source)
{
if(predictate.Invoke(s))
++count;
}
return count;
}


(Ik vermoed dat dit ongeveer zo werkt :p)
En ja, ik heb je zojuist even uitgelegd hoe LINQ werkt :+

[ Voor 106% gewijzigd door Verwijderd op 20-11-2011 12:26 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:09
Nou, dat wist ik nog niet hoor, hoe LINQ werkt ...

Ik betwijfel trouwens dat Count() in alle gevallen ook over de list zal moeten lopen. In dit specifieke geval maak je nl. een nieuwe collectie, en die heeft een Count property ...

Alhoewel:
code:
1
2
3
var p = from pr in properties
        where pr.Name == property
        select pr;

returned een IEnumerable, die geen Count heeft.

Terwijl
code:
1
2
3
var p = (from pr in properties
        where pr.Name == property
        select pr).ToList();

Natuurlijk wel een ICollection met Count property returned.

[ Voor 106% gewijzigd door whoami op 20-11-2011 12:27 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Dat hangt helemaal van de Linq provider af. In dit geval gaat het om een entity framework collectie die naar een List is gecast, dus moet de Count over alle items lopen en kan de Any gewoon bij de eerste stoppen.
Als het een IQueryable expressie is dan wordt het direct vertaald naar een SQL query.

Ik ben btw nog een andere variant tegen gekomen:

C#:
1
if (someCollection.Where(x => Predicate(x)).FirstOrDefault() != null)


Het blijft gewoon slechte code. Any geeft precies aan wat je wilt bereiken met die code, en het is het kortst om te schrijven.

(nitpick @ Sander, het is 'predicate' ;))

[ Voor 3% gewijzigd door Grijze Vos op 20-11-2011 12:24 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

In het geval dat je een predicate (oftewel LINQ query) opgeeft moet dat wel, want die Query moet uitgevoerd worden.

Indien dit niet het geval is zal hij idd gewoon de eigen Count aanroepen ;)

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:09
Grijze Vos schreef op zondag 20 november 2011 @ 12:22:
Dat hangt helemaal van de Linq provider af. In dit geval gaat het om een entity framework collectie die naar een List is gecast, dus moet de Count over alle items lopen en kan de Any gewoon bij de eerste stoppen.
Als het een IQueryable expressie is dan wordt het direct vertaald naar een SQL query.
Als het naar een List is gecast, zal de Count property van de list aangesproken worden denk ik. Neemt natuurlijk niet weg dat het creeëren van de List ook wel tijd in beslag neemt.
C#:
1
if (someCollection.Where(x => Predicate(x)).FirstOrDefault() != null)


Het blijft gewoon slechte code. Any geeft precies aan wat je wilt bereiken met die code, en het is het kortst om te schrijven.
Het kan inderdaad beter, maar, het is nu niet echt code waar mijn haar recht van zou komen. Ik bedoel maar, ik heb al veel slechtere code gezien in productie-omgevingen, waarbij je echt 100 keer de code moet herlezen , en het soms nog niet duidelijk is wat de bedoeling precies is. :)

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
De Count method kan niet aangeroepen worden omdat er een predikaat wordt gebruikt. Dit is ook zeker niet het ergste van wat ik gezien heb de afgelopen 10 weken in deze applicatie, maar het was wel een grappige in het kader 'ken je API'. ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

whoami schreef op zondag 20 november 2011 @ 12:41:
[...]
Als het naar een List is gecast, zal de Count property van de list aangesproken worden denk ik. Neemt natuurlijk niet weg dat het creeëren van de List ook wel tijd in beslag neemt.
Tijd en geheugen. Ik gebruik vrijwel altijd ToArray() als ik de uiteindelijke lijst wil hebben. Dit duurt net zo lang als ToList(), of iets minder, maar je hebt niet de List-overhead. Maar, je mist wel een paar van die handige List-functies :p

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:09
Verwijderd schreef op zondag 20 november 2011 @ 18:08:
[...]

Tijd en geheugen. Ik gebruik vrijwel altijd ToArray() als ik de uiteindelijke lijst wil hebben. Dit duurt net zo lang als ToList(), of iets minder, maar je hebt niet de List-overhead. Maar, je mist wel een paar van die handige List-functies :p
Een List gebruikt intern ook 'maar' een array (wel rekening houden met de capacity) :P Nu, 't is natuurlijk te zien wat je uiteindelijk met het resultaat wil doen.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 22:30
NOTE: Please do NOT use non-standard ASCII characters in your username. Certain non-critical site features will not work for member names with ASCII characters.
Erm, lolwut? Moet ik dus nu wel of niet standaard ASCII karakters gebruiken om de "non-critical features" te gebruiken?

:D

[ Voor 7% gewijzigd door Styxxy op 20-11-2011 20:24 ]


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
.

[ Voor 100% gewijzigd door P_de_B op 20-11-2011 20:33 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 26-09 09:20

Haan

dotnetter

Grijze Vos schreef op zondag 20 november 2011 @ 12:22:
Dat hangt helemaal van de Linq provider af. In dit geval gaat het om een entity framework collectie die naar een List is gecast, dus moet de Count over alle items lopen en kan de Any gewoon bij de eerste stoppen.
Als het een IQueryable expressie is dan wordt het direct vertaald naar een SQL query.

Ik ben btw nog een andere variant tegen gekomen:

C#:
1
if (someCollection.Where(x => Predicate(x)).FirstOrDefault() != null)


Het blijft gewoon slechte code. Any geeft precies aan wat je wilt bereiken met die code, en het is het kortst
Afgezien van het gebruik van Any() is de hele Where gewoon overbodig omdat FirstOrDefault ook gewoon een overload heeft waar de predicate in gecheckt kan worden.
Dus
C#:
1
if (someCollection.FirstOrDefault(x => Predicate(x)) != null)

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Styxxy schreef op zondag 20 november 2011 @ 20:23:
[...]

Erm, lolwut? Moet ik dus nu wel of niet standaard ASCII karakters gebruiken om de "non-critical features" te gebruiken?
Er staat dat je geen niet-standaard (let op de dubbele ontkenning) karakters mag gebruiken. So your good to go, aangezien alle ASCII karakters standaard zijn :+.

Overigens kun je met ASCII karakters daarna niet meer sommige non-critical features gebruiken, dus ik raad aan om alleen niet-ASCII karakters te gebruiken (daar zeiden ze niets over, alleen iets over niet-standaard ASCII karakters) :P

[ Voor 27% gewijzigd door .oisyn op 21-11-2011 11:30 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 22:30
.oisyn schreef op maandag 21 november 2011 @ 11:23:
[...]

Er staat dat je geen niet-standaard (let op de dubbele ontkenning) karakters mag gebruiken. So your good to go, aangezien alle ASCII karakters standaard zijn :+.

Overigens kun je met ASCII karakters daarna niet meer sommige non-critical features gebruiken, dus ik raad aan om alleen niet-ASCII karakters te gebruiken (daar zeiden ze niets over, alleen iets over niet-standaard ASCII karakters) :P
:+ :+

Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 25-09 20:02
Wie weet wat dit doet mag het zeggen

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
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
    this.expandList = function(pathList, user_callback){
        var pathLut = {};
        function check(path, callback){
            pathLut[path] = true;
            
            var found;
            for (var i = 0, l = pathList.length; i < l; i++) {
                var ipath = pathList[i];
                if (ipath) {
                    if (ipath == path)
                        delete pathList[i];
                    
                    var t = ipath.split("/"); t.pop();
                    var parent = t.join("/");
                    if (parent == path) {
                        callback(ipath);
                        found = true;
                    }
                }
            }

            if (!found)
                user_callback();
        };
        
        pathList.sort();
        var cb, root = this.xmlRoot, _self = this;
        check("", 
            cb = function(item){
                var paths = item.split("/");
                var lastNode = root;//root.selectSingleNode(paths.shift());

                //var lastPath = paths.pop();
                apf.asyncForEach(paths, 
                    function(part, next2, index) {
                        apf.queue.empty();
                        //This timeout is here to workaround a bug in chrome7 (and perhaps earlier)
                        $setTimeout(function(){
                            var xmlNode = (lastNode || root).selectSingleNode(part);
                            if (xmlNode) {
                                //if (index == paths.length - 1)
                                    //return _self.select(xmlNode);
                                
                                lastNode = xmlNode;
                                _self.slideToggle(apf.xmldb.getHtmlNode(xmlNode, _self), 1, true, null, function(){
                                    next2();
                                });
                            }
                            else {
                                _self.slideToggle(apf.xmldb.getHtmlNode(lastNode, _self), 1, true, null, function(){
                                    lastNode = lastNode.selectSingleNode(part);
                                    if (!lastNode)
                                        next2(true);
                                    else
                                        next2();
                                });
                            }
                        },100);  
                    }, function(err){
                        //if (!err) {
                            //next();
                        //}
                        check(item, cb);
                    }
                );
            }
        );
    }


Ik heb het vervangen door dit, wat hopelijk hetzelfde doet :')

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
32
33
34
35
36
37
38
39
40
41
42
43
44
    /**
     * Loads a list of folders
     * paths {Array} Array of strings in the form of 'folder[1]/folder[2]'
     * onFinished {function} Callback to be called when finished
     */
    this.expandList = function (paths, onFinished) {
        var _self = this,
            root = this.xmlRoot;
            
        // recursive load function
        function expand(currentSelector, allSelectors) {
            // first expand the item passed in
            _self.slideToggle(apf.xmldb.getHtmlNode(root.selectSingleNode(currentSelector), _self), 1, true, null, function () {
                // notify
                hasExpanded(currentSelector);
                
                // when finished, find all the other selectors that start with the current selector
                // plus a slash to make it really really sure
                var childSelectors = allSelectors.filter(function (s) { return s.indexOf(currentSelector + "/") === 0; });
                
                // then expand each of the child items
                childSelectors.forEach(function (selector) {
                    expand(selector, allSelectors);
                });
            });
        }
        
        // function to be called when an item has expanded, used to determine whether we finished
        var expandCount = 0;
        function hasExpanded(selector) {
            // if we have expanded all items, invoke the callback
            if (++expandCount === paths.length) {
                onFinished();
            }
        }
        
        // find all rootNodes (nodes without a slash in them)
        var rootNodes = paths.filter(function (p) { return p.split("/").length === 1; });
        
        // expand all root nodes, expand will recursively expand all child items
        rootNodes.forEach(function (node) {
            expand(node, paths);
        });
    };

Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 23:10
Ben van het weekend keihard in mijn ******* genomen door de optimalisaties van mijn compiler... code was iets als dit :

code:
1
2
3
4
5
6
while (!klaar){
  klaar = true;
  for(alle elementen blabla){
    klaar=klaar && doeietsfunctie_en_returneenbool(foo,bar);
  }//for
}//while


Koekje voor de eerste die het ziet..

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Optimizer heeft doeietsfunctie_en_returneenbool() eruit geoptimaliseerd?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 22:37

NetForce1

(inspiratie == 0) -> true

WVL_KsZeN schreef op maandag 21 november 2011 @ 16:50:
Ben van het weekend keihard in mijn ******* genomen door de optimalisaties van mijn compiler... code was iets als dit :

code:
1
2
3
4
5
6
while (!klaar){
  klaar = true;
  for(alle elementen blabla){
    klaar=klaar && doeietsfunctie_en_returneenbool(foo,bar);
  }//for
}//while


Koekje voor de eerste die het ziet..
Ook zonder optimalisaties zal doeietsfunctie nooit worden aangeroepen (afhankelijk van de taal uiteraard). Dat is hoe in de meeste talen && is gedefinieerd.

edit:
onee, ik zit te zwetsen, dat is zou zo zijn als klaar = false...

[ Voor 9% gewijzigd door NetForce1 op 21-11-2011 17:00 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Nee, dat is bij || en short-circuiting, hier zal ie wel moeten kijken.

Maar hij voert de for-loop eerst helemaal uit en gaat dan pas weer verder in de while. Dus hij doet altijd alles.

[ Voor 45% gewijzigd door Davio op 21-11-2011 17:00 ]


Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
de short-circuiting zorgt er wel voor dat de functie niet meer word aangeroepen zodra er 1x false uit komt, toch?

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
kaesve schreef op maandag 21 november 2011 @ 17:01:
de short-circuiting zorgt er wel voor dat de functie niet meer word aangeroepen zodra er 1x false uit komt, toch?
De functie niet, maar hij gaat wel alle elementen af, dus de for-loop blijft onnodig lang bestaan.

Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 23:10
Ja, na de eerste keer false werd de functie niet meer uitgevoerd (in die while loop, volgende loop in de while weer wel, want dan was klaar weer true..). Leuke optimalisatie (not).

Dit werkte dan weer wel..

code:
1
2
3
4
5
6
7
while (!klaar){
  klaar = true;
  for(alle elementen blabla){
    tempbool=doeietsfunctie_en_returneenbool(foo,bar);
    klaar=klaar && tempbool;
  }//for
}//while

[ Voor 37% gewijzigd door WVL_KsZeN op 21-11-2011 17:06 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Davio schreef op maandag 21 november 2011 @ 17:04:
[...]

De functie niet, maar hij gaat wel alle elementen af, dus de for-loop blijft onnodig lang bestaan.
Maar dat was de vraag niet. Hij zij dat z'n code niet klopte door optimalisaties van z'n compiler. Ik gooi het ook op short-circuiting van &&
WVL_KsZeN schreef op maandag 21 november 2011 @ 17:05:
Ja, na de eerste keer false werd de functie niet meer uitgevoerd (in die while loop, volgende loop in de while weer wel, want dan was klaar weer true..). Leuke optimalisatie (not).
Heeft geen drol met optimalisaties te maken. Dat is standaard gedrag, zodat je bijv. ook kunt doen:
C++:
1
2
if (ptr && ptr->DoeIets())
    // ...

Dit roept ptr->DoeIets() niet aan als ptr null is (en gelukkig maar).

|| evaluaeert de rhs niet als de lhs al true is, en && evalueert de rhs niet als de lhs false is. Je kunt het simpelweg oplossen door de rhs en lhs om te draaien, of door de binaire variant (| of &) te gebruiken.

[ Voor 82% gewijzigd door .oisyn op 21-11-2011 17:09 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 23:10
Ach so, nou, dan is het een goed voorbeeld voor dit topic :D Heb me rot lopen zoeken...

edit : is het wel goed als ik de boel omdraai?

dus :

code:
1
klaar = functie() && klaar;


zou dit werkten?
code:
1
klaar &= functie();

[ Voor 48% gewijzigd door WVL_KsZeN op 21-11-2011 17:12 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ja, is standaard functionaliteit van veel compilers / talen.

Ik zou geneigd zijn dezelfde fout te maken, omdat sommige talen de operator &= ondersteunen ( klaar &= doeiets(); )

Ik vind de constructie wel wazig met die for-loop in de while, want hij moet dezelfde functie op dezelfde elementen blijven toepassen tot er overal true uit komt? We weten de inhoud van de functie ook niet, dus iets wat de eerste keer true geeft, kan de tweede keer false geven en zo kan de loop lekker oneindig lang doorgaan...

Kun je het niet versimpelen zodat de functie alleen wordt uitgevoerd op de elementen die nog niet true hebben teruggegeven?

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Ah, ik dacht dat die short-circuiting juist een slimmigheid was van je :D

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 26-09 10:03
Die laatste doet exact hetzelfde. Staat bij mijn weten zelfs zo in de spec, dus heeft niets met je compiler te maken. Maar waarom noem je hem klaar? Kennelijk ben je helemaal niet klaar als hij true is, hij moet nog het rijtje aflopen. Noem hem dan 'gevonden' of zoiets.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
WVL_KsZeN schreef op maandag 21 november 2011 @ 17:09:
Ach so, nou, dan is het een goed voorbeeld voor dit topic :D Heb me rot lopen zoeken...

edit : is het wel goed als ik de boel omdraai?

dus :

code:
1
klaar = functie() && klaar;


zou dit werkten?
code:
1
klaar &= functie();
Waarom niet gewoon de niet-shortcircuit variant gebruiken:
code:
1
klaar = klaar & functie();


Neemt trouwens niet weg dat ik je probleem niet helemaal snap. Waarom doe je dit eigenlijk?

[ Voor 9% gewijzigd door Remus op 21-11-2011 17:48 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

a &= b doet ook gewoon a = a & b. Anders had het wel &&= geweest.
Davio schreef op maandag 21 november 2011 @ 17:17:
Ik zou geneigd zijn dezelfde fout te maken, omdat sommige talen de operator &= ondersteunen ( klaar &= doeiets(); )
Met &= maak je dus juist niet dezelfde fout.

[ Voor 67% gewijzigd door .oisyn op 21-11-2011 17:49 ]

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.

Pagina: 1 ... 75 ... 103 Laatste

Dit topic is gesloten.

Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes. :)