🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: nl.comp.programmeren
Article #351

Re: Lijnen tellen van een project

#351
From: moi
Date: Wed, 26 Jan 2005 20:22
112 lines
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-mail
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>

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