Article View: nl.comp.programmeren
Article #351Re: Lijnen tellen van een project
From: moi
Date: Wed, 26 Jan 2005 20:22
Date: Wed, 26 Jan 2005 20:22
112 lines
5542 bytes
5542 bytes
Dr.Ruud wrote:
> Toen ik John Bokma kietelde, kwam er dit uit:
>
>>Dr.Ruud:
>
>
>>>Nog zo'n voorbeeld:
>>>
>>> if ((sex == 'F') || ((sex == 'f') && (sex = 'F'))) do_female;
>>> else if ((sex == 'M') || (sex = 'M')) do_male;
>
>
> Je had toch wel gezien dat het de bedoeling was dat deze code hetzelfde
> resultaat oplevert als die switch? (ik heb het niet getest)
>
>
>
>>>Ik hou de literals overigens graag links van de '==', dus zo:
>>>
>>> if (('F' == sex) || (('f' == sex) && (sex = 'F'))) do_female;
>>> else if (('M' == sex) || (sex = 'M')) do_male;
Mijn bezwaar hiertegen is, dat het veel-te-veel tokens zijn.
Het *dwingt* de lezer om op de () te letten, zoals ook sommige
construkties de lezer in de *illusie* brengen dat whitespace/indentering
belangrijk is. Die belachelijke ('f' == gender) is *defensief*.
Het voordeel van de switch is, dat ie makkelijk is, omdat iedereen
hem onmiddelijk herkent. Bovendien *weet* iedereen dat er meer-dan 1
cases kunnen zijn (itt if/else, waarbij er altijd precies twee opties
zijn) Vandaar:
switch(gender) {
case 'm': gender = 'M';
case 'M': do_gozert();
break;
case 'f': gender = 'F';
case 'F': do_wijffie();
break;
default: do_teiltje("illegal gender: %x\n", gender);
}
Iedere "getrainde" lezer zal hier een switch herkennen, zich realiseren
dat fall-tru mogelijk is, en (wellicht bij tweede lezing) constateren
dat dat ook daadwerkelijk (hopelijk) goed gebruikt wordt.
IMHO kost de switch 2* zo weinig tijd *om te lezen* als de geneste
if-construktie. De rest van de tijd kan besteed worden aan begrijpen,
wat 4* zo weinig tijd kost.
> Je bent dan vast e1n van de velen die de "==" en "!=" niet echt als
> symmetrische symbolen lezen. Ik zie veel liever een
> if (NULL != lange-en-complexe-expressie)
> dan andersom (en het liefst dus inclusief de onnodige "NULL !="),
> want je weet meteen waarmee vergeleken wordt.
Nee hoor. Ook hier kan je weer eea *weglaten*, waardoor de leesbaarheid
verhoogd wordt: die "NULL !=" kan worden vervangen door "".
Vergelijk:
while (NULL != (cp = fgets(fp, buff, sizeof buff))) {}
met:
while (cp = fgets(fp, buff, sizeof buff)) {}
Die laaste geeft tegenwoordig een "assignment used as truth value"
warning, maar die cp-assignment is toch zinloos (binnen de {}, iig) :
while (fgets(fp, buff, sizeof buff)) {}
>
> [ zieke humor snipped ]
>
> Ik legde het op aan beginnende C-programmeurs, dat scheelde een hoop
> fouten en verdriet. Maar dan deden ze vervolgens natuurlijk zoiets:
Nee, dat is een illusie. je *kan* ze niks uitleggen.
Ze moeten zelf leren door hun neus te stoten. Leg ze de syntax uit, en
laat ze hun neus stoten.
> unsigned int uiLen;
> int i;
Variabelenamen om te HuiLen ....
> :
> :
> for (i = 0; i++; i < uiLen) ...
>
> en dan wilde dat soms niet stoppen.
>
Dit zijn tikfouten (of denkfouten) die ze moeten
leren herkennen. Als denkfout gaat het vanzelf over
(of niet ...). Als tikfout istie lastig, omdat ie zeerzeerzeldzaam is.
Te zeldzaam om je ertegen te wapenen, IMHO. Hij komt zowiezo tot uiting
bij de 1e run, dus: geen probleem.
>
> Liever niet zeg. Toch zijn "How *NOT* to do it" lijstjes erg leerzaam,
> nog veel meer als er een-verhaal-met-humor in de voorbeelden zit. En
Het probleem is, dat iedereen zijn eigen lijstjes moet ontwikkelen,
omdat je die van een ander pas leert waarderen als ie overeenkomsten
vertoont met je eigen.
"Ervarend leren" heet dat ...
BTW leuk draadje, waar ging het over, eigenlijk ?
AvK
Technical Details
Message-ID:
<hcWdnSBGdt9kZmrcRVnyvA@casema.nl>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!news.glorb.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local1.nntp.dca.giganews.com!nntp.casema.nl!news.casema.nl.POSTED!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>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!news3.google.com!news.glorb.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local1.nntp.dca.giganews.com!nntp.casema.nl!news.casema.nl.POSTED!not-for-mail NNTP-Posting-Date: Wed, 26 Jan 2005 14:22:16 -0600 Date: Wed, 26 Jan 2005 21:22:16 +0100 From: moi <avk@localhost> User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040510 X-Accept-Language: en-us, en MIME-Version: 1.0 Newsgroups: nl.comp.programmeren,be.comp.programming Subject: Re: Lijnen tellen van een project 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> In-Reply-To: <ct818b.198.1@news.isolution.nl> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Message-ID: <hcWdnSBGdt9kZmrcRVnyvA@casema.nl> Lines: 112 NNTP-Posting-Host: 83.83.6.100 X-Trace: sv3-FhkYCoeu2fRskTATJBTAnw7JhmfMy4U/nAGhVYNL0Z1m/NxYVsQuT6cMPn7xap0lHDNlxugIMh2OHTx!gRml2o3axlRGMVPpu4vsncIdSGA1Gme7q10qDMry9iYMAtRj+IDRPphZid+ai94CljY= X-Complaints-To: abuse@casema.nl X-DMCA-Complaints-To: abuse@casema.nl X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.22