Computer Science: describing our world with boxes and arrows.
1
2
| SELECT TOP 100 PERCENT * FROM MYTABLE |
1
| CREATE VIEW foobar AS SELECT TOP 100 PERCENT * FROM foo ORDER BY bar |
Ongedocumenteerd, want het werkt in MSSQL2005 niet meer
Als in: het kan nog wel, maar de returnvolgorde is niet gegarandeerd.
[ Voor 10% gewijzigd door kenneth op 08-03-2007 11:21 ]
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 donderdag 08 maart 2007 @ 11:21:
Zie je in MSSQL-omgevingen wel vaker. In een view kan je (logischerwijs) geen sorteervolgorde opgeven. Er is een workaround (bovenstaande) waar dat wel kan:
SQL:
1 CREATE VIEW foobar AS SELECT TOP 100 PERCENT * FROM foo ORDER BY bar
Ongedocumenteerd, want het werkt in MSSQL2005 niet meer
Als in: het kan nog wel, maar de returnvolgorde is niet gegarandeerd.
1
| CREATE VIEW foobar AS SELECT TOP 100 PERCENT * FROM foo ORDER BY NewID() |
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
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
| //... Example::run($blaat); //... class Example { function run($var) { if (!isset($this)) { $thiss = 'this'; $$thiss = new Example; } $this->doeiets($var); } //... } |
Wat is nu het probleem met de conversie van PHP4 naar PHP5? In PHP5 geeft hij soms een foutmelding, waar komt dat van
Hahaha
Ik heb zelf geen programmeervoorbeeldjes die niet kloppen, aangezien ik uiteraard briljant programmeer
[ Voor 11% gewijzigd door flashin op 13-03-2007 12:40 ]
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
| qryRegels.First; while not qryRegels.EOF do begin DoeIetsMetRegel; if check then begin qryRegels.Next; Continue; end; if check then begin if check then begin qryRegels.Next; Continue; end; end; DoeIetsMetRegel; if check then begin if check then begin qryRegels.Next; Continue; end; end; DoeIetsMetRegel; qryRegels.Delete; end; |
http://hawvie.deviantart.com/
Waar zie jij de sluitende accolade van de functie? Uiteraard heb ik wat namen aangepast en ingekort, maar ik neem aan dat je het idee snapt... we gaan een $this maken terwijl het statisch is aangeroepen, en dat mag niet. Waarom niet? Misschien omdat je dan je design even moet overdenken?flashin schreef op dinsdag 13 maart 2007 @ 12:37:
DUhhh de functie doeiets(); bestaat niet in de class!
Hahaha.. Eerste keer sinds het windowscommentaar dat ik weer eens dubbel lig om code..
Ik heb zelf geen programmeervoorbeeldjes die niet kloppen, aangezien ik uiteraard briljant programmeeren geen fouten maak..

even aangepast. Probleempje: ik ben te erg vim-verslaafd, ik zat na die aanpassing dus vrolijk :wq in te tikken


[ Voor 12% gewijzigd door MBV op 13-03-2007 13:52 ]
Klinkt heel bekend, code die in niet wil compileren omdat je vergeten bent dat je even in een andere editor zit er dus vrolijk vim commando's hebt getypt.MBV schreef op dinsdag 13 maart 2007 @ 13:51:
[...]
edit:
even aangepast. Probleempje: ik ben te erg vim-verslaafd, ik zat na die aanpassing dus vrolijk :wq in te tikkenEn we gaan binnenkort over op .NET met VS 200*, dat wordt lachen...
het is al zelfs zo erg dat ik in bash een alias gemaakt hebt:
1
| alias :wq=exit |

Erkens schreef op dinsdag 13 maart 2007 @ 14:00:
ah, ik ben niet de enige die dat dus doet
het is al zelfs zo erg dat ik in bash een alias gemaakt hebt:
Bash:
1 alias :wq=exit

Kennelijk zijn er toch meer mensen die struikelen over de niet- capabelheid van de rest van je systeem

“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.”
Is die er ook voor Eclipse?rwb schreef op dinsdag 13 maart 2007 @ 15:34:
Een collega van mij hier heeft dan ook een VIM plugin voor zijn visual studio 2005 geinstalleerd
Goeie trouwens, zal de overstap naar visual studio een stuk makkelijker maken
[ Voor 24% gewijzigd door MBV op 13-03-2007 16:07 ]
Deze omslachtige manier van "$this = new Example;" vind ik ook al een behoorlijke WTF.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Waarom denk je dat het nodig is? Ik denk dat PHP gaat flippen als je $this = new Example; neerzet in een klasse. Dat kan namelijk NOOIT! Met $$thiss = new Example omzeil je de check daarop in de compiler, en in 4.x werkt het dus ookIceManX schreef op dinsdag 13 maart 2007 @ 16:11:
[...]
Deze omslachtige manier van "$this = new Example;" vind ik ook al een behoorlijke WTF.

Ja wel mooie manierMBV schreef op dinsdag 13 maart 2007 @ 16:17:
[...]
Waarom denk je dat het nodig is? Ik denk dat PHP gaat flippen als je $this = new Example; neerzet in een klasse. Dat kan namelijk NOOIT! Met $$thiss = new Example omzeil je de check daarop in de compiler, en in 4.x werkt het dus ook
kan je nog beter iets als het volgende doen als je nou perse zoiets wil doen
1
2
3
4
5
| if( isset($this) ) $var = $this; else $var = new Example(); $var->DoeIets(); |
Maar dat neemt nog niet weg dat als iets niet static bedoeld is dat je het ook niet zo moet implementeren
“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.”
Ik weet het niet. Ik heb zelf nooit met VIM gewerkt maar volgens mij is dit hem http://www.viemu.com/MBV schreef op dinsdag 13 maart 2007 @ 16:06:
[...]
Is die er ook voor Eclipse?
Goeie trouwens, zal de overstap naar visual studio een stuk makkelijker makenKan je dan ook net zo irritant met 5 schermen in 1 scherm werken? (:sp, :vsp)
“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.”
Eenvoudige regel: Bij gepruts met $$ gebruik in PHP mag geslagen worden.MBV schreef op dinsdag 13 maart 2007 @ 16:17:
[...]
Waarom denk je dat het nodig is? Ik denk dat PHP gaat flippen als je $this = new Example; neerzet in een klasse. Dat kan namelijk NOOIT! Met $$thiss = new Example omzeil je de check daarop in de compiler, en in 4.x werkt het dus ook
{signature}
Dat was ook precies hoe ik het heb gefixed. Iets minder slecht.rwb schreef op dinsdag 13 maart 2007 @ 16:31:
[...]
Ja wel mooie manier
kan je nog beter iets als het volgende doen als je nou perse zoiets wil doen
PHP:
1 2 3 4 5 if( isset($this) ) $var = $this; else $var = new Example(); $var->DoeIets();
Maar dat neemt nog niet weg dat als iets niet static bedoeld is dat je het ook niet zo moet implementeren
* MBV bedenkt zich ineens dat hij is vergeten dat $var =& $this de oplossing 20x minder smerig maakt

Gelukkig wordt die klasse alleen maar als namespace gebruikt

[quote]Voutloos schreef op dinsdag 13 maart 2007 @ 16:51:
[...]
Eenvoudige regel: Bij gepruts met $$ gebruik in PHP mag geslagen worden.
[/quote]
Dat is heel lastig, ik weet niet waar hij nu woont. Ik zou hem op kunnen wachten bij zijn nieuwe werkgever
Groot nieuws! Dit heeft hij ECHT zelf gedaan, in PHP4 werkte $this = new Object; namelijk nog gewoon, hij heeft de uber-ranzige hack met $$thiss geschreven! Lang leve SVN!
was zijn opmerking erbijFix for handling in php5

En nog mooier: Hij heeft ook de $this = new Object-regel geschreven! Mag ik nu echt gaan slaan? Voorlopig nog geen recommendation voor LinkedIn
[ Voor 36% gewijzigd door MBV op 13-03-2007 17:34 ]
Anoniem: 14829
2 Dingen:rwb schreef op dinsdag 13 maart 2007 @ 16:31:
PHP:
1 2 3 4 5 if( isset($this) ) $var = $this; else $var = new Example(); $var->DoeIets();
Maar dat neemt nog niet weg dat als iets niet static bedoeld is dat je het ook niet zo moet implementeren
- Wie zegt dat 't static bedoeld is? Met m'n beperkte PHP kennis schat ik in dat 't een singleton benadering is.
- Jouw 'oplossing' geeft altijd een nieuwe instance terug wanneer $this niet is geset. Via die $$thiss hack wordt $this eenmalig geset, en is bij iedere volgende aanroep het else-gedeelte niet meer van belang, $this bestaat namelijk al.
Lelijke oplossing, dat wel, maar m.i. ligt dat meer in de beperkingen van de taal dan in het oplossend vermogen van de programmeur...
Dit is geen echte singleton benadering. Een singleton benadering zou zoiets zijn:Anoniem: 14829 schreef op dinsdag 13 maart 2007 @ 22:20:
[...]
2 Dingen:
- Wie zegt dat 't static bedoeld is? Met m'n beperkte PHP kennis schat ik in dat 't een singleton benadering is.
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
| class Example { /***************** *!!!DEZE CONSTRUCTOR NOOIT GEBRUIKEN!!! * (sorry, php4 heeft geen private ;) *****************/ function Example() { //... } function &GetInstance() { static $instance; if (!is_object($instance)) $instance = new Example(); return $instance; } function run($var) { $this->doeIets(); } //... } $l_oExample = Example::GetInstance(); $l_oExample->run('blaat'); |
Dus bij een singleton hoef je niet te kloten met $this iets toewijzen. En er hoeft niet elke keer een nieuw object te worden aangemaakt, en het is een stuk leesbaarder. Enige nadeel is dat je bij de aanroep 2 regels nodig hebt ipv 1.
$$thiss-hack doet precies hetzelfde als wat hij beschrijft. Met $thiss = 'this' wordt een string in $thiss gegooid. $$thiss = new Example() evalueert die string naar een variabelenaam, en gebruikt die vervolgens. Zelfde effect als $this = new Example(), maar dan met truc om PHP5 voor de gek te houden.- Jouw 'oplossing' geeft altijd een nieuwe instance terug wanneer $this niet is geset. Via die $$thiss hack wordt $this eenmalig geset, en is bij iedere volgende aanroep het else-gedeelte niet meer van belang, $this bestaat namelijk al.
De taalbeperkingen zijn hier niet van toepassing: hier is gewoon een verkeerd ontwerp (of gebrek aan ontwerp) de schuldige. In Java zal je net zulke smerige streken moeten uithalen om het te laten werken: het druist namelijk in tegen alle OO principes. Een functie is óf static (je hebt geen members nodig om je taak uit te voeren) óf het is een method die de constructor nodig hebt.Lelijke oplossing, dat wel, maar m.i. ligt dat meer in de beperkingen van de taal dan in het oplossend vermogen van de programmeur...
In dit geval was er eigenlijk een 2e klasse nodig, die door de eerste af en toe gebruikt werd. Zeg maar een speciale string-klasse. Die klasse werd vervolgens samengeschoven met de oorspronkelijke klasse, et voilá, een stukje supersmerige code is ontstaan
Anoniem: 14829
Met "benadering" bedoelde ik "hij probeerde iets in de buurt ... van te bereiken"MBV schreef op dinsdag 13 maart 2007 @ 23:00:
Dit is geen echte singleton benadering. Een singleton benadering zou zoiets zijn:
OK, mijn PHP kennis gaat niet zover dat ik dit kon inschatten (maar dat had ik ook al gezegd). Als jouw uitleg klopt (en daar ga ik voetstoots vanuit) dan is 't een flinke zeperd. Maar wel een zeperd waar je van kunt leren en achteraf om kunt lachen.$$thiss-hack doet precies hetzelfde als wat hij beschrijft. Met $thiss = 'this' wordt een string in $thiss gegooid. $$thiss = new Example() evalueert die string naar een variabelenaam, en gebruikt die vervolgens. Zelfde effect als $this = new Example(), maar dan met truc om PHP5 voor de gek te houden.
Klopt natuurlijk, maar met m'n Delphi achtergrond ben ik gewend aan gewone functies (die niet aan een class gebonden zijn), class functions (vergelijkbaar met static functions in C#) en methods (die een instance van die class nodig hebben).Een functie is óf static (je hebt geen members nodig om je taak uit te voeren) óf het is een method die de constructor nodig hebt.
Maar daar gaat 't niet om, blijkbaar heb ik die PHP code verkeerd geinterpreteerd. Zo leer je elke dag weer wat nieuws...
sorry. Met "De [insert methode] benadering" wordt meestal bedoeld dat je dat gewoon gebruiktAnoniem: 14829 schreef op woensdag 14 maart 2007 @ 00:57:
[...]
Met "benadering" bedoelde ik "hij probeerde iets in de buurt ... van te bereiken"
Dat is precies wat ik bedoelde. Je gaat geen functie doen die allebei kan[...]
Klopt natuurlijk, maar met m'n Delphi achtergrond ben ik gewend aan gewone functies (die niet aan een class gebonden zijn), class functions (vergelijkbaar met static functions in C#) en methods (die een instance van die class nodig hebben).
Maar daar gaat 't niet om, blijkbaar heb ik die PHP code verkeerd geinterpreteerd. Zo leer je elke dag weer wat nieuws...
Bij een singleton implementatie werkt dit ook:MBV schreef op dinsdag 13 maart 2007 @ 23:00:
Dus bij een singleton hoef je niet te kloten met $this iets toewijzen. En er hoeft niet elke keer een nieuw object te worden aangemaakt, en het is een stuk leesbaarder. Enige nadeel is dat je bij de aanroep 2 regels nodig hebt ipv 1.
1
| Object::getInstance()->run(); |
Het probleem met de code is, natuurlijk, dat 't niet forward compatible is omdat PHP5 al een expliciete melding geeft als je rechtstreeks aan $this toewijst terwijl 't in PHP4 nog wel gewoon mogelijk was. Persoonlijk heb ik ook nooit het nut van dit gedoe begrepen, behalve als leuke experimentjes.$$thiss-hack doet precies hetzelfde als wat hij beschrijft. Met $thiss = 'this' wordt een string in $thiss gegooid. $$thiss = new Example() evalueert die string naar een variabelenaam, en gebruikt die vervolgens. Zelfde effect als $this = new Example(), maar dan met truc om PHP5 voor de gek te houden.
Anyway:
1
| ${'this'} = new MyObj(); |
1
2
3
4
5
| private Session Session { get { return _session; } set { _session = value; } } |
En niet een keer, maar meerdere keren. Iemand heeft tijd te veel denk ik...
Wat is hier raar aan? Zo schrijf je getters en setters in c#sig69 schreef op vrijdag 23 maart 2007 @ 18:05:
Ik kwam net dit tegen in een project waar ik nu mee bezig ben:
C#:
1 2 3 4 5 private Session Session { get { return _session; } set { _session = value; } }
En niet een keer, maar meerdere keren. Iemand heeft tijd te veel denk ik...
"The test of a work of art is, in the end, our affection for it, not our ability to explain why it is good." - Stanley Kubrick | Trakt
[ Voor 22% gewijzigd door AtleX op 23-03-2007 18:35 ]
Anoniem: 201130
Zo vreemd is dat op zich nu ook weer niet als je intellisense tools als Resharper gebruikt. Dan is het 2 seconde werk om er een property van te maken.AtleX schreef op vrijdag 23 maart 2007 @ 18:35:
Ja, je mist iets. _session is waarschijnlijk al private, normaal gesproken maak je daar een public getter en setter bij op bovenstaande manier. Nu heeft de schrijver van die code 2x een private variabele die exact hetzelfde doen.
Of je doet het vanuit de coding guidelines, die prefereren meestal ook properties. Ware het niet dat die persoon in kwestie underscores gebruikt en dat is dus net 1 van de veel voorkomende bad practises wanneer de MS C# coding standards gevolgd worden.
Maar ik ben het wel met je eens dat het overdone is, het is alleen geen slecht programmeervoorbeeld
Anoniem: 201130
Ik neem aan dat je fields bedoeld?AtleX schreef op vrijdag 23 maart 2007 @ 20:54:
Ik gebruik ook underscores om mijn private properties aan te duiden, hoe doe jij het dan?
De correcte syntax volgens de C# Coding guidelines voor properties en fields is:
1
2
3
4
5
6
7
| private string voorbeeld; public string Voorbeeld { get { return voorbeeld; } set { voorbeeld = value; } } |
De redenatie hier achter is dat de underscores helemaal niets toevoegen. Overzichtelijker is het ook niet, ookal willen veel mensen je dit doen geloven. Dit zijn vooral mensen die uit "oudere" talen komen, zoals Delphi en C++ waar de underscores, f'jes en m'tjes andere problemen oplosten en dus niet meer dan gewenning zijn. De intellisense en capitalizing die VS standaard biedt, biedt je genoeg onderscheid, tenzij je blind bent, maar dan is programmeren uberhaubt al moeilijk.
Even wat links:
http://blogs.msdn.com/brada/articles/361363.aspx
http://msdn.microsoft.com...cpconnamingguidelines.asp
[ Voor 17% gewijzigd door Anoniem: 201130 op 23-03-2007 21:30 ]
Fields, properties, die namen worden volgens mij overal wel door elkaar gebruikt.
Ik ben ooit begonnen in Pascal, toen doorgegroeid naar Delphi en nu C#, dus ja, bij mij komt het echt uit de 'oude' talen. Ik moet wel zeggen dat jou methode er duidelijker uitziet.De correcte syntax volgens de C# Coding guidelines voor properties en fields is:
C#:
1 2 3 4 5 6 7 private string voorbeeld; public string Voorbeeld { get { return voorbeeld; } set { voorbeeld = value; } }
De redenatie hier achter is dat de underscores helemaal niets toevoegen. Overzichtelijker is het ook niet, ookal willen veel mensen je dit doen geloven. Dit zijn vooral mensen die uit "oudere" talen komen, zoals Delphi en C++ waar de underscores, f'jes en m'tjes andere problemen oplosten en dus niet meer dan gewenning zijn. De intellisense en capitalizing die VS standaard biedt, biedt je genoeg onderscheid, tenzij je blind bent, maar dan is programmeren uberhaubt al moeilijk.
Even wat links:
http://blogs.msdn.com/brada/articles/361363.aspx
http://msdn.microsoft.com...cpconnamingguidelines.asp
Volgens mij is het volgens de MS C# standard wel gewoon toegestaan om underscores te gebruiken. Over private variabelen staan niet zulke strikte regels in de standaard volgens mij. Zelf doe ik het ieder geval ook niet.Anoniem: 201130 schreef op vrijdag 23 maart 2007 @ 20:43:
[...]
Of je doet het vanuit de coding guidelines, die prefereren meestal ook properties. Ware het niet dat die persoon in kwestie underscores gebruikt en dat is dus net 1 van de veel voorkomende bad practises wanneer de MS C# coding standards gevolgd worden.
Aangezien ik eigenlijk nooit public/protected fields heb doe ik alle fields gewoon met kleine letters en properties met hoofdletter.
Als ik iets public of protected wil hebben dan maak ik er idd met resharper een property van. Dan kan je eventueel later de implementatie tenminste nog vervangen.
Edit:
Het staat er blijkbaar wel ergens in
Alleen er is geen apart stukje Field Naming Guidelines, maar het staat bij Field Usage Guidelines.Do not apply a prefix to field names or static field names. Specifically, do not apply a prefix to a field name to distinguish between static and nonstatic fields. For example, applying a g_ or s_ prefix is incorrect.
[ Voor 18% gewijzigd door Woy op 24-03-2007 11:13 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Dat is dan nog redelijk normaal, ik heb er "ciao" van gemaaktErkens schreef op dinsdag 13 maart 2007 @ 14:00:
ah, ik ben niet de enige die dat dus doet
het is al zelfs zo erg dat ik in bash een alias gemaakt hebt:
Bash:
1 alias :wq=exit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?php /////////////////////////////////// //id script made bij Oo_dj_tm_oO/// //www.skateboardmove.nl//////////// /////////////////////////////////// //hoeveel namen wil je invullen?? $hoeveel = 3; //geef hier de namen van de pagina's in, ZONDER extensie $naam = array("naam1", "naam2", "naam3"); //wat is de extensie, zonder punt $ext = "html"; // wat moet de link zijn? id, act??? $l = "id"; //als je alles goed hebt ingevuld doet ie het nu $li = $_GET[$l];//even de get-methode maken for ($a=0; $a<$hoeveel; $a++) {//iedere naam een apart nummer geven if($li==$naam[$a]) {//maak pagina include $naam[$a].".".$ext;//include de pagina } } ?> |
Aangeven hoeveel waardes een array heeft, en in plaats van in_array een for loop gebruiken, waren we dat niet al eerder tegengekomen?
[ Voor 11% gewijzigd door AndriesLouw op 25-03-2007 11:04 ]
De comments, vooral in aantal en het weinig nuttig zijn ervan hier, vind ik hier meer een WTF. Het wel of niet gebruiken van in_array doet er niet zoveel aan toe (computational zal het w.s. toch wel een lineaire search betekenen) als men hier nog een guard had gebruikt om uit de for lus te breken als men het gewenste heeft gevonden, i.e. $li == $naam[$a].AndriesLouw schreef op zondag 25 maart 2007 @ 10:59:
Ok, even een script van phphulp.nl:
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php /////////////////////////////////// //id script made bij Oo_dj_tm_oO/// //www.skateboardmove.nl//////////// /////////////////////////////////// //hoeveel namen wil je invullen?? $hoeveel = 3; //geef hier de namen van de pagina's in, ZONDER extensie $naam = array("naam1", "naam2", "naam3"); //wat is de extensie, zonder punt $ext = "html"; // wat moet de link zijn? id, act??? $l = "id"; //als je alles goed hebt ingevuld doet ie het nu $li = $_GET[$l];//even de get-methode maken for ($a=0; $a<$hoeveel; $a++) {//iedere naam een apart nummer geven if($li==$naam[$a]) {//maak pagina include $naam[$a].".".$ext;//include de pagina } } ?>
edit:
Aangeven hoeveel waardes een array heeft, en in plaats van in_array een for loop gebruiken, waren we dat niet al eerder tegengekomen?
De syntax is in beide gevallen correct.Anoniem: 201130 schreef op vrijdag 23 maart 2007 @ 21:19:
... De correcte syntax ....
Wat maakt het uit of je afspreekt dat je members met een kleine letter gaat schrijven of er een prefix voorzet? Hoe gaat dit verschil betere of slechtere software opleveren?De redenatie hier achter is dat de underscores helemaal niets toevoegen.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Anoniem: 201130
Dat beweer ik toch ook nergens? Theoretisch gezien levert het slechter onderhoudbare code op, omdat het niet de standaard volgt. Maar dat is natuurlijk echter ook onzinnig.farlane schreef op zondag 25 maart 2007 @ 15:04 Hoe gaat dit verschil betere of slechtere software opleveren?
Het is echter niet volgens de standaard en mag dus als een slecht programmeervoorbeeld gezien worden, echter zul je in elke applicatie dingen tegen komen die niet volgens standaard zijn. Is het discutabel: Ja. Is het onzinnig om hierover te discusseren: Ja, immers schrijft de standaard voor geen prefixes te gebruiken en voegen ze ook daadwerkelijk niets meer toe.
De enige goede code, is werkende code naar de maatstaven van de klant.
[ Voor 10% gewijzigd door Anoniem: 201130 op 25-03-2007 16:14 ]
Anoniem: 112721
MS heeft alleen een naming guideline voor de publieke interface neergelegd, dus je mag zelf bepalen of je wel of geen prefix voor private fields gebruikt.
Ik persoonlijk kies wel voor een prefix, omdat zonder prefix IMHO 'buggevoeliger' is: bijv. type je per ongeluk een hoofdletter (o.a. door intellisense) in een property, dan zit je met een oneindige loop.
Anoniem: 201130
Dat betekent dus dat jij geen unit tests uitvoert en bovendien moet je behoorlijk slechte ogen hebben om dankzij de intellisense en hoofdletters niet te zien dat je een fout maakt. Het kan dus onmogelijk buggevoeliger zijn, tenzij je je eigen code niet afdoende test.Anoniem: 112721 schreef op zondag 25 maart 2007 @ 17:39:
[...]
MS heeft alleen een naming guideline voor de publieke interface neergelegd, dus je mag zelf bepalen of je wel of geen prefix voor private fields gebruikt.
Ik persoonlijk kies wel voor een prefix, omdat zonder prefix IMHO 'buggevoeliger' is: bijv. type je per ongeluk een hoofdletter (o.a. door intellisense) in een property, dan zit je met een oneindige loop.
Daarnaast zijn naming conventies bedoeld om ze op te volgen en de code globaal te standariseren waarin uitdrukkelijk wordt aangegeven ze niet te gebruiken.
[ Voor 26% gewijzigd door Anoniem: 201130 op 25-03-2007 17:45 ]
1
2
3
4
5
6
| <?php while (1 == 1) { // haal berichten op.. } ?> |
En die gozert maar afvragen waarom het niet werkte..
don't be afraid of machines, be afraid of the people who build and train them.
als dat alle code is binnen die loop dat is gewoon een bug, niet echt een slecht programmeervoorbeeldk8skaaay schreef op zondag 25 maart 2007 @ 18:08:
Ik kwam laatst deze onzin tegen op een forum :
PHP:
1 2 3 4 5 6 <?php while (1 == 1) { // haal berichten op.. } ?>
En die gozert maar afvragen waarom het niet werkte..
er is opzich niks mis met een endless loop imo
Nee, er is wel degelijk een verschil tussen een field & een property in .NET, en je moet dus opletten dat je ieder beestje met de juiste naam aanspreekt.AtleX schreef op zaterdag 24 maart 2007 @ 11:04:
[...]
Fields, properties, die namen worden volgens mij overal wel door elkaar gebruikt.
Tja, eigenljk is er niets raars aan (doe ik soms ook), maar het is idd nogal omslachtig saai, maar gelukkig is dat in C# 3.0 opgelost metsig69 schreef op vrijdag 23 maart 2007 @ 18:05:
Ik kwam net dit tegen in een project waar ik nu mee bezig ben:
C#:
1 2 3 4 5 private Session Session { get { return _session; } set { _session = value; } }
En niet een keer, maar meerdere keren. Iemand heeft tijd te veel denk ik...
1
2
3
4
5
| public int Blaat { get; set; } |
Ik gebruik ook underscores bij m'n private fields, en FXCop heeft er nog nooit over geklaagd.Volgens mij is het volgens de MS C# standard wel gewoon toegestaan om underscores te gebruiken. Over private variabelen staan niet zulke strikte regels in de standaard volgens mij. Zelf doe ik het ieder geval ook niet.
Welke standaard ? Het is toch niet omdat MS een guideline of standaard vooropstelt, dat je daarom verplicht bent die std te volgen / gebruiken ?Het is echter niet volgens de standaard en mag dus als een slecht programmeervoorbeeld gezien worden,
Bedrijven hebben meestal hun eigen guidelines / standard, en die standaard kan best gebaseerd zijn op de MS guidelines, maar als de Std van dat bedrijf zegt: private fields beginnen met een underscore, dan is het pas fout als jij dat stug niet doet, omdat MS zegt dat het niet 'mag'. Dan pas wordt het voor jouw collega's moeilijker begrijpbaar
[ Voor 86% gewijzigd door whoami op 25-03-2007 19:15 ]
https://fgheysels.github.io/
Anoniem: 201130
Ik heb bedrijfsguidelines inderdaad er buiten gehouden. Eerst idd voldoen aan de standaard van het bedrijf waar je voor werkt, daarna pas aan de algemene guidelines.whoami schreef op zondag 25 maart 2007 @ 19:02:
Welke standaard ? Het is toch niet omdat MS een guideline of standaard vooropstelt, dat je daarom verplicht bent die std te volgen / gebruiken ?
Bedrijven hebben meestal hun eigen guidelines / standard, en die standaard kan best gebaseerd zijn op de MS guidelines, maar als de Std van dat bedrijf zegt: private fields beginnen met een underscore, dan is het pas fout als jij dat stug niet doet, omdat MS zegt dat het niet 'mag'. Dan pas wordt het voor jouw collega's moeilijker begrijpbaar
Dat ligt natuurlijk ook aan je FXCop rulesetwhoami schreef op zondag 25 maart 2007 @ 19:02:
[...]
Ik gebruik ook underscores bij m'n private fields, en FXCop heeft er nog nooit over geklaagd.
[ Voor 17% gewijzigd door Anoniem: 201130 op 25-03-2007 19:27 ]
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Anoniem: 201130
Dat ligt aan de definitie van standaard. Als je beweert dat je aan een guideline voldoet dan is het voor jouw een standaard waaraan je moet voldoen. Als je dus beweert dat je c# op de standaard manier doet en je prefixed dan voldoe je er dus niet aan.farlane schreef op zondag 25 maart 2007 @ 22:51:
Kweenie maar volgens mij haal je standaard en guidelines door elkaar.
Zeg je echter dat je het als een richtlijn gebruikt dan is het inderdaad wat anders. Het klopt dat de .NET coding guidelines niet zoiets als ISO certificeringen zijn om de naam te mogen dragen. Je kunt het echter wel vergelijken met de HTML standaard... Beetje dubieus dus qua gebruik, dat geef ik toe. De echte vraag is echter: "Wanneer is iets een standaard? Wanneer 1 of andere council vind dat het een standaard wordt?".
Alleen roepen vrijwel alle bedrijven die .NET doen, dat ze aan de door MS gestelde richtlijnen/standaarden volgen en dat betekent dus dat ze de guideline verheffen tot standaard. Echter gaan ze vervolgens wel gewoon lekker prefixen en dat kan dus niet als ze het zouden volgen.
[ Voor 5% gewijzigd door Anoniem: 201130 op 25-03-2007 23:31 ]
De guidelines voor C# zeggen niets over het al dan niet prefixen van private fields. Een van de artikelen die jij eerder aanhaalde waar iets stond over de naamgeving van private fields ging om de interne guidelines die de ontwikkelaars van het framework zelf gebruiken. En die kun je nauwelijks als "standaard" aanmerken - niet iedereen is immers .Net standaard framework ontwikkelaar. Als je het over de "standaard" .Net guidelines hebt, dan heb je het over die passages in de MSDN, en daar staat alleen iets in over de publieke interface design van je library.Anoniem: 201130 schreef op zondag 25 maart 2007 @ 23:29:
Als je dus beweert dat je c# op de standaard manier doet en je prefixed dan voldoe je er dus niet aan.
[ Voor 8% gewijzigd door .oisyn op 26-03-2007 00:06 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Het doel van deze code is een 5 cijferige code genereren, en er zeker van zijn dat deze niet al in gebruik is. Het zijn namelijk telefoon betaalcodes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| function generatePhoneCode() { $random = rand(10000, 99999); $sql = "SELECT * FROM tbl_micropayment_code WHERE mpc_code != '$random'"; $result = mysqlx_query($sql); if (mysql_num_rows($result) > 0) { $random = 0; } return $random; } $random = 0; while ($random == 0) { $random = generatePhoneCode(); } |
Toen hij mij in aan het werken was vroeg ik waarom hij dit ooit zo gedaan had. "Niks mis mee toch?" zegt ie vrolijk...
Anyone who gets in between me and my morning coffee should be insecure.
Anoniem: 201130
Wel degelijk: http://msdn.microsoft.com...nfieldusageguidelines.asp.oisyn schreef op maandag 26 maart 2007 @ 00:05:
[...]
De guidelines voor C# zeggen niets over het al dan niet prefixen van private fields. Een van de artikelen die jij eerder aanhaalde waar iets stond over de naamgeving van private fields ging om de interne guidelines die de ontwikkelaars van het framework zelf gebruiken. En die kun je nauwelijks als "standaard" aanmerken - niet iedereen is immers .Net standaard framework ontwikkelaar. Als je het over de "standaard" .Net guidelines hebt, dan heb je het over die passages in de MSDN, en daar staat alleen iets in over de publieke interface design van je library.
Het staat onder Field Usage Guidelines, is overigens een paar posts geleden door iemand anders al opgemerkt dat het daar staat.
- Do not use Hungarian notation for field names. Good names describe semantics, not type.
- Do not apply a prefix to field names or static field names. Specifically, do not apply a prefix to a field name to distinguish between static and nonstatic fields. For example, applying a g_ or s_ prefix is incorrect.
[ Voor 18% gewijzigd door Anoniem: 201130 op 26-03-2007 00:27 ]
Die link die je geeft is voor class library developers. ( zie de post van .oisyn )
Anywayz, het maakt allemaal weinig uit natuurlijk. Het belangrijkste is dat je consistent bent in je coding of je nu wel of niet een prefix gebruikt.
Ik zou je wel willen aanraden om bij alles wat je leest over programmeren en dat soort dingen je telkens goed de vragen te stellen of het je (/jouw klant ) wat oplevert en of het wel pragmatisch ( http://www.pragmaticprogrammer.com/ppbook/index.shtml ) is om het te doen zoals het geschreven staat. Er wordt naast een heleboel bere goeie informatie ook een heleboel geschreven om maar wat op te schrijven.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Anoniem: 201130
Lijkt me ook niet dat je in de web of win project fields en properties gaat introduceren? Je zult er vast wel een paar gebruiken, maar het merendeel zie je toch echt terug in je class libraries. En je gaat niet verschillende coding stijlen gebruiken om je BLL van de DAL te onderscheiden (Dat zou wel goed in dit topic passenfarlane schreef op maandag 26 maart 2007 @ 08:56:
[...]
Die link die je geeft is voor class library developers. ( zie de post van .oisyn )
En de rest had ik zelf ook al eerder aangegeven
[ Voor 10% gewijzigd door Anoniem: 201130 op 26-03-2007 18:36 ]
1
2
3
4
| For i = 1 to 10 Text1(i).text = iets i = i + 1 Next |
En je dan serieus afvragen waarom je waardes zo gek ingevuld worden

[ Voor 0% gewijzigd door LiquidSmoke op 26-03-2007 22:11 . Reden: is al wel een heeeeele tijd geleden hoor :) ]
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Daar zat de fout?LiquidSmoke schreef op maandag 26 maart 2007 @ 22:10:
Ik heb serieus eens mijn hoofd gebroken over het volgende
Visual Basic:
1 2 3 4 For i = 1 to 10 Text[b]1[/b](i).text = iets i = i + 1 Next
En je dan serieus afvragen waarom je waardes zo gek ingevuld worden
Ik zie alleen het nut niet om 10 text veldjes te vullen met "iets".
* NielsNL ziet opmerking hierboven en whacks himself...
[ Voor 5% gewijzigd door NielsNL op 26-03-2007 22:54 ]
M'n Oma is een site aan het haken.
1
2
3
| While not rs.EOF DoSomethingWith rs Wend |
Tight loop ... ohja, de rs.MoveNext


Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Die fout heb ik vaak zat gemaakt. Vooral omdat ik vaker in Java programmeer, en daar is de check + het move next in 1 functie gebouwd. Dus:kenneth schreef op maandag 26 maart 2007 @ 23:01:
Goeie ouwe VB-tijd was dat he ...
Visual Basic:
1 2 3 While not rs.EOF DoSomethingWith rs Wend
Tight loop ... ohja, de rs.MoveNext![]()
1
2
3
| while (rs.next()) { doSomethingWith(rs); } |
En dan ga je in VB/ASP proggen en vergeet je idd de MoveNext. En ik me maar afvragen waarom de ASP pagina's zo traag zijn...
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Run in debugger -> "Hmm, duurt la.. ^%*#%$#$% BlaTable.Next!
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Als rs een iterator is moet je eerst checken uiteraard of er wel een volgende is voordat je refereert naar de volgende, scheelt je een mogelijke exceptie. Gebruik makend van short circuited evaluation van de guard levert het dan zoiets op als:IceManX schreef op dinsdag 27 maart 2007 @ 09:03:
[...]
Die fout heb ik vaak zat gemaakt. Vooral omdat ik vaker in Java programmeer, en daar is de check + het move next in 1 functie gebouwd. Dus:
Java:
1 2 3 while (rs.next()) { doSomethingWith(rs); }
En dan ga je in VB/ASP proggen en vergeet je idd de MoveNext. En ik me maar afvragen waarom de ASP pagina's zo traag zijn...
1
2
3
| while(rs.hasNext() && (toet = rs.next()) { //doe iets met toet } |
Verder heb je sinds java5 gewoon een foreach construct en icm generics die typesafety kunnen garanderen is het een piece of cake om hierdoor te werken:
1
2
3
| for(EenType bla : rs) { //doe je ding } |
Voorwaarde voor rs is dan dat deze Iterable<EenType> (of covariant, i.e. Iterable<? extends EenType>) is, oftewel, een iterator terug kan geven voor de foreach.
Hier hebben ze dan ook debuggers voor uitgevondenLiquidSmoke schreef op dinsdag 27 maart 2007 @ 17:41:
Het ergste is nog dat je vaak in eerste instantie niet ziet wat je nu fout doet, wanneer je een half uur later er achter komt wat er nou misgaat besef je vaak ook dat het 4u snachts is en je moet gaan slapen...
[ Voor 31% gewijzigd door prototype op 27-03-2007 18:02 ]
rs.next() doet dus allebei: als er nog een record is, gaat ie daarnaartoe en returnt ie true. Anders returnt ie false.prototype schreef op dinsdag 27 maart 2007 @ 17:56:
[...]
Als rs een iterator is moet je eerst checken uiteraard of er wel een volgende is voordat je refereert naar de volgende, scheelt je een mogelijke exceptie. Gebruik makend van short circuited evaluation van de guard levert het dan zoiets op als:
Java:
1 2 3 while(rs.hasNext() && (toet = rs.next()) { //doe iets met toet }
Het is niet een gewone java.util.Iterator waarbij dit idd fout gaat.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Anoniem: 142961
Afgezien van het feit dat de uniciteit van de phonecode niet bepaald gewaarborgd wordt (het random getal dat ervoor zorgt dat je uit de while loop komt is precies gelijk aan een al bestaande random getal, of je hangtMueR schreef op maandag 26 maart 2007 @ 00:19:
Ik loop momenteel tegen het volgende stukje code aan op het werk (nog een keer tijd maken om het goed te schrijven). Dit is een baksel van degene die voor mij het programmeerwerk deed.
Het doel van deze code is een 5 cijferige code genereren, en er zeker van zijn dat deze niet al in gebruik is. Het zijn namelijk telefoon betaalcodes.
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function generatePhoneCode() { $random = rand(10000, 99999); $sql = "SELECT * FROM tbl_micropayment_code WHERE mpc_code != '$random'"; $result = mysqlx_query($sql); if (mysql_num_rows($result) > 0) { $random = 0; } return $random; } $random = 0; while ($random == 0) { $random = generatePhoneCode(); }
Toen hij mij in aan het werken was vroeg ik waarom hij dit ooit zo gedaan had. "Niks mis mee toch?" zegt ie vrolijk...
Als je dit m.i. niet in een transactie duwt, kan het voorkomen dat twee (of meerdere) gebruikers tegelijk eenzelfde random getal krijgen. Al is de kans volgens mij klein. Ik heb eens eerder een soortgelijke code gebruikt, maar dan met het bepalen van een maximum en vervolgens verhogen met 1. Ik kreeg het toen niet voor elkaar om in twee verschillende browsers (en dus sessies) hetzeflde getal te krijgen (F5, F5, F5, F5
{signature}
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
| $add = ''; if ($maat_upd == 50) $add .= '<OPTION SELECTED VALUE=50>50</OPTION>'; ELSE $add .= '<OPTION VALUE=50>50</OPTION>'; if ($maat_upd == 62) $add .= '<OPTION SELECTED VALUE=62>62</OPTION>'; ELSE $add .= '<OPTION VALUE=62>62</OPTION>'; if ($maat_upd == 74) $add .= '<OPTION SELECTED VALUE=74>74</OPTION>'; ELSE $add .= '<OPTION VALUE=74>74</OPTION>'; if ($maat_upd == 86) $add .= '<OPTION SELECTED VALUE=86>86</OPTION>'; ELSE $add .= '<OPTION VALUE=86>86</OPTION>'; if ($maat_upd == 98) $add .= '<OPTION SELECTED VALUE=98>98</OPTION>'; ELSE $add .= '<OPTION VALUE=98>98</OPTION>'; if ($maat_upd == 110) $add .= '<OPTION SELECTED VALUE=110>110</OPTION>'; ELSE $add .= '<OPTION VALUE=110>110</OPTION>'; if ($maat_upd == 122) $add .= '<OPTION SELECTED VALUE=122>122</OPTION>'; ELSE $add .= '<OPTION VALUE=122>122</OPTION>'; if ($maat_upd == 134) $add .= '<OPTION SELECTED VALUE=134>134</OPTION>'; ELSE $add .= '<OPTION VALUE=134>134</OPTION>'; if ($maat_upd == 146) $add .= '<OPTION SELECTED VALUE=146>146</OPTION>'; ELSE $add .= '<OPTION VALUE=146>146</OPTION>'; if ($maat_upd == 158) $add .= '<OPTION SELECTED VALUE=158>158</OPTION>'; ELSE $add .= '<OPTION VALUE=158>158</OPTION>'; if ($maat_upd == 170) $add .= '<OPTION SELECTED VALUE=170>170</OPTION>'; ELSE $add .= '<OPTION VALUE=170>170</OPTION>'; echo $add; |

Ach ja, gelukkig is het al prehistorische code inmiddels..
Anoniem: 37526
1
2
3
4
5
6
7
8
9
10
11
12
| <?php $add = ''; $maten = array(50,62,74,86,98,110,122,134,146,158,170); foreach ($maten as $maat){ $add .= '<option value="'.$maat.'"'; if ($maat == $maat_upd) $add .= ' selected="selected"'; $add.= '>'.$maat.'</option>'; } echo $add; ?> |
44 seconden werk
Maar ja, misschien wordt hij per letter code betaald, dan kan ik me er nog iets bij voorstellenAnoniem: 37526 schreef op donderdag 12 april 2007 @ 19:51:
Dat is wel erg eh, appart
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 <?php $add = ''; $maten = array(50,62,74,86,98,110,122,134,146,158,170); foreach ($maten as $maat){ $add .= '<option value="'.$maat.'"'; if ($maat == $maat_upd) $add .= ' selected="selected"'; $add.= '>'.$maat.'</option>'; } echo $add; ?>
44 seconden werk
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
hmm, ik zou persoonlijk liever hier een sprintf gebruiken dan dat aan elkaar prakken van strings, ziet er imo minder "rommelig" uit:Anoniem: 37526 schreef op donderdag 12 april 2007 @ 19:51:
Dat is wel erg eh, appart
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 <?php $add = ''; $maten = array(50,62,74,86,98,110,122,134,146,158,170); foreach ($maten as $maat){ $add .= '<option value="'.$maat.'"'; if ($maat == $maat_upd) $add .= ' selected="selected"'; $add.= '>'.$maat.'</option>'; } echo $add; ?>
44 seconden werk
1
2
3
4
5
6
7
8
9
| $add = ''; $maten = array(50,62,74,86,98,110,122,134,146,158,170); foreach ($maten as $maat){ $selected = ($maat==$maat_upd)?" selected":""; $add .= sprintf('<option value="%s"%s>%s</option>', $maat, $selected, $maat); } echo $add; |
Laatst nog een discussie gehad over C-programmeurs die PHP hadden geleerd, en wat oude technieken in PHP toepasten. Riep er dus een: "Ja, in C is dat natuurlijk heel makkelijk om array in array in array te doen, maar dat moet je dan niet in PHP ook zo doen". Ehm, WTF? Laatst nog 3 uur mee bezig geweest om een simpele 2-dimensionale array in C elkaar te hacken

1
2
3
4
5
6
7
8
9
10
11
| static public string PrependProtocol(string urlString) { string protocolString = "//:ptth"; CharEnumerator charEnumerator = protocolString.GetEnumerator(); while (charEnumerator.MoveNext()) { char padleftChar = charEnumerator.Current; urlString = urlString.PadLeft(urlString.Length + 1, padleftChar); } return urlString; } |
Onvoorstelbaar!
Ik ga dit topic eens helemaal doorlezen, ik leer een hele hoop bij.Erkens schreef op donderdag 12 april 2007 @ 22:52:
hmm, ik zou persoonlijk liever hier een sprintf gebruiken dan dat aan elkaar prakken van strings, ziet er imo minder "rommelig" uit:
1
2
3
4
5
6
| <option value="2007"<?php if($_POST['jaar'] == '2007') { echo 'selected'; } ?>>2007</option> <option value="2008"<?php if($_POST['jaar'] == '2008') { echo 'selected'; } ?>>2008</option> <option value="2009"<?php if($_POST['jaar'] == '2009') { echo 'selected'; } ?>>2009</option> <option value="2010"<?php if($_POST['jaar'] == '2010') { echo 'selected'; } ?>>2010</option> <option value="2011"<?php if($_POST['jaar'] == '2011') { echo 'selected'; } ?>>2011</option> <option value="2012"<?php if($_POST['jaar'] == '2012') { echo 'selected'; } ?>>2012</option> |
Nu heb ik het zo gedaan:
1
2
3
4
5
6
7
| <?php for ($i = 2007; $i <= 2020; $i++) { $selected = ($i==$_POST['jaar'])?" selected":""; $jaar .= sprintf('<option value="%s"%s>%s</option>', $i, $selected, $i); } echo $jaar; ?> |
Dat scheelt eens veel werk! Moet wel zeggen dat ik het als leek wel erg waardeer als jullie ook de "goede/beste" methode erbij posten.
Anoniem: 26306
1
2
3
4
5
6
7
8
| <?php for ($i = 2007; $i <= 2020; $i++) { printf ( '<option value="%1$u"%2$s>%1$u</option>', $i, $i == $_POST [ 'jaar' ] ? ' selected' : '' ); } ?> |
Maar op een gegeven moment is het niet meer "beter" maar gewoon "anders" en dan is het afhankelijk van smaak.
zeg maar "betere" methodeVold schreef op zaterdag 14 april 2007 @ 16:39:
[...]
Dat scheelt eens veel werk! Moet wel zeggen dat ik het als leek wel erg waardeer als jullie ook de "goede/beste" methode erbij posten.
over beste methode zijn er soms discussie's
maar idd dankzij dit topic kunde leren van anderen hun fouten
en met een beschaamd gezicht je oude code zitten bekijken ....
1
| selected="selected" |
[edit]
Of mag alleen "selected" ook in HTML 4.01? Ik weet het eerlijk gezegd niet meer.

[ Voor 72% gewijzigd door AtleX op 14-04-2007 16:51 ]
In HTML mag dit, in XHTML moet het echter met waarde zijn.AtleX schreef op zaterdag 14 april 2007 @ 16:50:
HTML:
1 selected="selected"
[edit]
Of mag alleen "selected" ook in HTML 4.01? Ik weet het eerlijk gezegd niet meer.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
http://www.w3.org/TR/html4/interact/forms.html#adef-selected UTFS!AtleX schreef op zaterdag 14 april 2007 @ 16:50:
HTML:
1 selected="selected"
[edit]
Of mag alleen "selected" ook in HTML 4.01? Ik weet het eerlijk gezegd niet meer.
Ja ik had al moeite met de woordenkeus daarbij, vandaar de aanhalingstekens.Anoniem: 26306 schreef op zaterdag 14 april 2007 @ 16:47:
Zo zou ik het dan doen.
Maar op een gegeven moment is het niet meer "beter" maar gewoon "anders" en dan is het afhankelijk van smaak.
Ik heb net het hele topic doorgelezen en ik kon in bijna alle php gerelateerde voorbeelden de fout(en) vinden!
edit: ik snap nu hoe jou voorbeeld (net) iets efficienter weer is, moet wel zeggen dat het wel wat ten koste gaat van de leesbaarheid. (maar dat komt misschien omdat ik deze manier van outputten nooit eerder heb gebruikt..
[ Voor 17% gewijzigd door Vold op 14-04-2007 17:53 ]
In de meeste gevallen is leesbaarheid belangrijker als pure performance ( in 99,99 % van de gevallen valt er meer te optimaliseren door een beter algroritme te bedenken dan door te muggeziften over een paar simpele instructies ). In dit geval zal het zo goed als niks uithalen op welke manier je het doet. Dus kan je beter voor de manier gaan die jij het best leesbaar vindt.Vold schreef op zaterdag 14 april 2007 @ 17:45:
[...]
offtopic:
edit: ik snap nu hoe jou voorbeeld (net) iets efficienter weer is, moet wel zeggen dat het wel wat ten koste gaat van de leesbaarheid. (maar dat komt misschien omdat ik deze manier van outputten nooit eerder heb gebruikt..)
Welke van de 2 manieren dat is kan natuurlijk per persoon verschillen.
“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.”
De leesbaarheid van zijn code is wat te vergroten door een betere indenting, verder moet worden opgemerkt dat het iets anders doet dan jouw code.Vold schreef op zaterdag 14 april 2007 @ 17:45:
edit: ik snap nu hoe jou voorbeeld (net) iets efficienter weer is, moet wel zeggen dat het wel wat ten koste gaat van de leesbaarheid. (maar dat komt misschien omdat ik deze manier van outputten nooit eerder heb gebruikt..)
Jij slaat alles eerst op een een (al reeds gedefinieerde?) variabele en uiteindelijk "echo" je het, terwijl Cheatah rechtstreeks naar de output print, dus in jouw geval had er nog meer geprint kunnen worden (en zelfs een mooie notice over een undefined var
1
2
3
4
5
6
| For teller As Integer = 0 To 10 Dim waarde As Integer waarde += 1 Debug.Write(waarde) Next |
Ik declareer dus de variabele in de for loop, en ik zou hier als output allemaal enen verwachten, de output is echter "12345678910".
Maak ik er het volgende van, dan geeft hij wel het gewenste (verwachte) resultaat.
1
2
3
4
5
6
| For teller As Integer = 0 To 10 Dim waarde As Integer = 0 waarde += 1 Debug.Write(waarde) Next |
Ik heb echter de variabele buiten de loop gezet en zelf steeds gereset, dit leek me nog wat beter. Maar het blijft vaag.
[ Voor 8% gewijzigd door Serpie op 16-04-2007 14:40 ]
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.
Hmm toch weer wat geleerd, dit is toch niet zo 1-2-3 terug te vinden in de MSDN, en bij klasse variabelen geeft code analysis een melding dat het performanter is om de initializer weg te laten...oisyn schreef op maandag 16 april 2007 @ 14:48:
Het is wel slechte code, je initialiseert je variabele niet waardoor hij in principe elke waarde kan hebben (de compiler genereert code dat ruimte alloceert op de stack, maar initialiseert dat niet, waardoor toevalligerwijs in dit geval de waarde van de vorige iteratie er nog in stond)
Vandaar de verwarring, maar ik vond het volgende nu in de MSDN:
Dit is dus precies deze situatie.Even if the scope of a variable is limited to a block, its lifetime is still that of the entire procedure. If you enter the block more than once during the procedure, each block variable retains its previous value. To avoid unexpected results in such a case, it is wise to initialize block variables at the beginning of the block.
I mentioned it once, but I think I got away with it.
Dat is in Java juist wel zo.brama schreef op maandag 16 april 2007 @ 15:43:
Die variabele is, zonder expliciet te initialiseren, altijd 0? Iets wat in andere talen zoals C of Java zeker niet zo is.
1
2
3
4
5
6
| static int myInt; public class Test { public static void main(String[] args) { System.out.println(myInt); } } |
dit print 0, maar de geposte vb code overzetten naar Java gaat niet werken, dan krijg je een compile error ('The local variable myInt may not have been initialized').
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
In java zijn alleen variabelen die op de stack gezet worden (lokale variabelen) niet voorzien van een default waarde ja.NetForce1 schreef op maandag 16 april 2007 @ 15:53:
[...]
Dat is in Java juist wel zo.
Java:
1 2 3 4 5 6 static int myInt; public class Test { public static void main(String[] args) { System.out.println(myInt); } }
dit print 0, maar de geposte vb code overzetten naar Java gaat niet werken, dan krijg je een compile error ('The local variable myInt may not have been initialized').
I mentioned it once, but I think I got away with it.
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.
Had Alarmnummer hier niet een topic over gemaakt icm concurrency?.oisyn schreef op dinsdag 17 april 2007 @ 00:18:
Ook de stack variabelen zijn voorzien van een default waarde (0 danwel null) hoor. Ook in .Net trouwens. Als dat niet het geval was dan was de veiligheid van de VM in het geding (denk bevoorbeeld aan gevoelige data die uit een functie lekt door ongeinitialiseerde variabelen uit te lezen, of referenties naar objecten die helemaal niet bestaan)
Nu met Land Rover Series 3 en Defender 90
meestal is het een warning en die krijg je alleen bij objecten, niet bij de zgn primitivesMichali schreef op dinsdag 17 april 2007 @ 08:33:
Je krijgt dan ook een compile error als je een lokale variabel niet initialiseert in Java.
Assumptions are the mother of all fuck ups | iRacing Profiel
Misschien eens tijd om het uit te proberen dan? Ik krijg nl toch echt een prachtige error, zoals ik een paar posts hierboven ook al aangaf.Salandur schreef op dinsdag 17 april 2007 @ 09:15:
[...]
meestal is het een warning en die krijg je alleen bij objecten, niet bij de zgn primitives
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
ik krijg in beide gevallen inderdaad een error indien ze binnen een methode (dus op de stack) gecreerd worden. maar het zowiso een goed gebruik om variabelen altijd te initialiseren.NetForce1 schreef op dinsdag 17 april 2007 @ 09:32:
[...]
Misschien eens tijd om het uit te proberen dan? Ik krijg nl toch echt een prachtige error, zoals ik een paar posts hierboven ook al aangaf.
Assumptions are the mother of all fuck ups | iRacing Profiel
Met de standaard Java compiler ja. Dat is natuurlijk niet de enige manier om bytecode te genereren, dus een compiler error zorgt niet dat de boel veilig blijftMichali schreef op dinsdag 17 april 2007 @ 08:33:
Je krijgt dan ook een compile error als je een lokale variabel niet initialiseert in Java.
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.
In de categorie 'jezelf in bochten wringen om je onder een argument uit te lullen'.oisyn schreef op dinsdag 17 april 2007 @ 12:09:
[...]
Met de standaard Java compiler ja. Dat is natuurlijk niet de enige manier om bytecode te genereren, dus een compiler error zorgt niet dat de boel veilig blijft
Stack variabelen worden niet geinitialiseerd, en ze zullen moeten worden geinitialiseerd voor je ze mag gebruiken. Durf zelfs te wedden dat elke compiler hier aan moet voldoen, en anders mag het geen java heten (mag sowieso al niet waarschijnlijk, althans niet certified).
I mentioned it once, but I think I got away with it.
Geenszins, het zat zelfs al in mijn achterhoofd toen ik mijn eerste post tikte, omdat ik wel reacties had verwacht waarin werd verklaard dat de compiler een error zou geven. Mijn post ging over de veiligheid van de VM, de compiler kan dat niet garanderen, ik hoop dat je dat zelf ook wel snapt.brama schreef op dinsdag 17 april 2007 @ 14:44:
In de categorie 'jezelf in bochten wringen om je onder een argument uit te lullen'
Leuk, maar de eindgebruiker heeft geen controle over de gebruikte compiler van een vendor. Als ik jou een applicatie verschaf dan geef ik de bytecode, maar jij weet niet of ik wel een certified JavaTM compiler heb gebruikt om die applicatie mee te compilen. Jij hebt slechts de bytecode, en de vm moet die veilig kunnen executen. De VM zal de variabelen (of iig de stack waar die variabelen op terecht komen) dus zero-initializen om veiligheid te kunnen garanderen. Vziw geeft de JIT compiler niet @ runtime een error als blijkt dat een var niet door de bytecode geinitialiseerd wordt.Stack variabelen worden niet geinitialiseerd, en ze zullen moeten worden geinitialiseerd voor je ze mag gebruiken. Durf zelfs te wedden dat elke compiler hier aan moet voldoen, en anders mag het geen java heten (mag sowieso al niet waarschijnlijk, althans niet certified).
.edit: bliep, dat is niet mogelijk. Als je een local var niet eerst schrijft zegt ie dus wel dat ie nog ongeinitialiseerd is, en krijg je een java.lang.VerifyError
1
2
3
4
5
6
7
8
9
10
11
12
13
| .class public HelloWorld .super java/lang/Object .method public static main([Ljava/lang/String;)V .limit stack 2 .limit locals 2 getstatic java/lang/System/out Ljava/io/PrintStream; iload 1 invokevirtual java/io/PrintStream/println(I)V return .end method |
De lokale variabelen krijgen ook pas type-informatie mee als je ze schrijft. Als ik 'iload 0' had gedaan (dus het String[] argument naar de main() functie), zegt ie dat die var het verkeerde type heeft.Exception in thread "main" java.lang.VerifyError: (class: HelloWorld, method: main signature: ([Ljava/lang/String;)V) Accessing value from uninitialized register 1
[ Voor 28% gewijzigd door .oisyn op 17-04-2007 16:12 ]
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.
Ok, je hebt je eigen argument om zeep geholpen met je test, niet dat ik dat vantevoren wist hoor.oisyn schreef op dinsdag 17 april 2007 @ 14:59:
Leuk, maar de eindgebruiker heeft geen controle over de gebruikte compiler van een vendor. Als ik jou een applicatie verschaf dan geef ik de bytecode, maar jij weet niet of ik wel een certified JavaTM compiler heb gebruikt om die applicatie mee te compilen. Jij hebt slechts de bytecode, en de vm moet die veilig kunnen executen. De VM zal de variabelen (of iig de stack waar die variabelen op terecht komen) dus zero-initializen om veiligheid te kunnen garanderen. Vziw geeft de JIT compiler niet @ runtime een error als blijkt dat een var niet door de bytecode geinitialiseerd wordt.
Ben wel benieuwd of de VM nu toch daadwerkelijk gaat zero-initialisen, lijkt me een overbodige zaak aangezien je er toch niet wegkomt.
I mentioned it once, but I think I got away with it.
Dit topic is gesloten.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.

Het is hier ook niet het "korte vraagjes" topic. Zie deze post