Article View: nl.comp.programmeren
Article #253Re: Lijnen tellen van een project
From: Dr.Ruud
Date: Thu, 27 Jan 2005 02:19
Date: Thu, 27 Jan 2005 02:19
79 lines
4329 bytes
4329 bytes
Toen ik John Bokma kietelde, kwam er dit uit:
> Dr.Ruud:
>> Het blijft altijd verstandig om zo te coderen dat 'M' niet aan
>> sex wordt toegekend als sex al 'M' is; je weet immers niet of
>> dat extra acties tot gevolg heeft,
> Natuurlijk *weet* je dat wel.
Dat ligt eraan hoe je zo'n stuk code opvat. "sex = 'M'"
is een toekenning, wat meestal simpelweg betekent dat een
geheugenplaats een andere waarde krijgt. Maar er zijn
talloze omstandigheden waarin op 'schrijven' een dusdanige
'straf' staat, dat je het met alle macht probeert te
vermijden.
>> zoals een refresh van een
>> window, of een update in een wereldwijd gerepliceerde database.
>
> Ik vind het altijd een zeer kwalijke zaak als men programmeerd op
> "het zou wel eens kunnen".
Als het niet meer moeite kost om er wel rekening mee te houden,
dan doe ik dat toch graag. Het gaat dan om vrij algemene code
die in meerdere omgevingen onaangepast bruikbaar is. En met die
switch{} lukt dat heel aardig.
> Een ander voorbeeld:
>
> i = 1;
> while (1) {
>
> ... code die i *niet* aanpast;
> i++;
> if ( i > 10 ) break;
> }
>
> i kan niet groter dan 10 worden, dus waarom in hemelsnaam daar op
> testen? Ik zou dus i == 10 er van maken, want.. i > 10 zet mij aan het
> denken, waar wordt i nog meer aangepast.
Dat wordt inderdaad vaak zo wordt gecodeerd. Een for-loop is daar
natuurlijk meer op zijn plaats, maar dat is niet wat je aan wilt
geven. Eigenlijk zou je een 'assert(i<10)' voor de i++ moeten
zetten, en dan daarna inderdaad 'if (i == 10)' gebruiken.
Tout-le-monde codeert: for (i=0; i < 10; i++)
en bijna niemand: for (i=0; i != 10; assert(i<10), i++)
(of een betere versie daarvan, ik heb er niet echt over nagedacht)
en dat is inderdaad best wel vreemd.
> Dus iets a la:
> if ( var != 'M' ) var = 'M';
> als gewoon
> var = 'M';
> volstaat, zou ik zeer zeker aanraden. (Is wellicht zelfs sneller,
> en bovenal minder ruis).
Als het volstaat, dan OK. Maar als er side-effects zijn, dan wordt
het anders. Dat er bijvoorbeeld een dirty-flag wordt gezet, of een
oldvalue-property aangepast wordt, etc.
In C zou je daar een define van kunnen maken, met in de ene
omgeving dit:
#define SET( var, value ) (if ((var) != (value)) {(var) = (value);})
en in de andere dit:
#define SET( var, value ) ((var) = (value))
al zijn die niet echt evenwaardig, denk aan "if (SET(a,10))".
En in C++ heb je ook nog operator-overloading.
--
Affijn, Ruud ` - ?
+ ` ? *
? ` Jvr qvg yrrfg,
? = ` fgresg wbatre.
Technical Details
Message-ID:
<ct9mmu.4jo.1@news.isolution.nl>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!213.200.89.82.MISMATCH!tiscali!newsfeed1.ip.tiscali.net!border2.nntp.ams.giganews.com!nntp.giganews.com!newsfeeder.wxs.nl!transit.news.xs4all.nl!post.news.xs4all.nl!not-for-mailReferences:
<%XJId.2415$OZ2.252982@phobos.telenet-ops.be> <41f37378$0$140$e4fe514c@news.xs4all.nl> <ct2bdl$2p5$1@news1.zwoll1.ov.home.nl> <Xns95E88B1A63743castleamber@130.133.1.4> <41f55352$0$26219$18b6e80@news.wanadoo.nl> <Xns95E89B5FAF7C6castleamber@130.133.1.4> <41f587d8$0$11854$e4fe514c@news.xs4all.nl> <Xns95E8CE2C13FCcastleamber@130.133.1.4> <41f60627$0$11906$e4fe514c@news.xs4all.nl> <ct5e5s.104.1@news.isolution.nl> <Xns95E982F869770castleamber@130.133.1.4> <ct6veq.4f8.1@news.isolution.nl> <Xns95EA98A5B4Dcastleamber@130.133.1.4> <ct818b.198.1@news.isolution.nl> <hcWdnSBGdt9kZmrcRVnyvA@casema.nl> <ct967g.4hc.1@news.isolution.nl> <Xns95EAAC00E2238castleamber@130.133.1.4>Show Full Headers
Complete Article Headers
X-Google-Thread: 107324,ab34a8b99e320381
X-Google-Thread: fcea4,ab34a8b99e320381
X-Google-Attributes: gid107324,gidfcea4,public
X-Google-Language: DUTCH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!213.200.89.82.MISMATCH!tiscali!newsfeed1.ip.tiscali.net!border2.nntp.ams.giganews.com!nntp.giganews.com!newsfeeder.wxs.nl!transit.news.xs4all.nl!post.news.xs4all.nl!not-for-mail
Message-ID: <ct9mmu.4jo.1@news.isolution.nl>
From: "Dr.Ruud" <rvtol+news@isolution.nl>
Newsgroups: nl.comp.programmeren,be.comp.programming
References: <%XJId.2415$OZ2.252982@phobos.telenet-ops.be> <41f37378$0$140$e4fe514c@news.xs4all.nl> <ct2bdl$2p5$1@news1.zwoll1.ov.home.nl> <Xns95E88B1A63743castleamber@130.133.1.4> <41f55352$0$26219$18b6e80@news.wanadoo.nl> <Xns95E89B5FAF7C6castleamber@130.133.1.4> <41f587d8$0$11854$e4fe514c@news.xs4all.nl> <Xns95E8CE2C13FCcastleamber@130.133.1.4> <41f60627$0$11906$e4fe514c@news.xs4all.nl> <ct5e5s.104.1@news.isolution.nl> <Xns95E982F869770castleamber@130.133.1.4> <ct6veq.4f8.1@news.isolution.nl> <Xns95EA98A5B4Dcastleamber@130.133.1.4> <ct818b.198.1@news.isolution.nl> <hcWdnSBGdt9kZmrcRVnyvA@casema.nl> <ct967g.4hc.1@news.isolution.nl> <Xns95EAAC00E2238castleamber@130.133.1.4>
Subject: Re: Lijnen tellen van een project
Date: Thu, 27 Jan 2005 03:19:57 +0100
Organization: Chaos rules.
X-Newsreader: WMDIYB
X-Archive-Me: please
Approved: yesterday
X-Face: &CQ$FIr!=+=w,8`0Q^Ug"1>F[(/op8->E;NQet`5fe$;=e*!Z5&REvp<~Tj|"Y[|8OcJ{w#z&mB7B:I)XO*%_|\]|YW$C>>$Q[9-#K~c$tQ^Mf0,wMo?h\C)TE>f
Lines: 81
NNTP-Posting-Host: 194.109.164.102
X-Trace: 1106793606 news.xs4all.nl 18852 [::ffff:194.109.164.102]:33280
X-Complaints-To: abuse@xs4all.nl