🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: nl.comp.programmeren
Article #344

Re: Lijnen tellen van een project

#344
From: John Bokma
Date: Wed, 26 Jan 2005 19:13
144 lines
5557 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 ook niet, maar ik snap de bedoeling van de shortcuts. 

>>> 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;
> 
>> Wat ik vreselijk onlogisch vind,
> 
> 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.

Laatste eens, tenminste heb dat veel gedaan in C, expliciet aangeven 
waarmee vergeleken werd.

In Perl gebruikt men vaak de volgende grap:

$variable ||= 3;

Wat gelijk is aan:

$variabele = 3 unless $variabele;

Wordt vaak gebruikt om in een functie een niet meegegeven parameter een 
waarde toe te kennen.

Dit kan erg mis gaan, voorbeeld:

sub create_file {

    	my ( $filename ) = @_;

    	$filename ||= 'default.txt';
}

Probeer nu maar eens het bestand 0 aan te maken (nul).

Mijn C kennis is outdated, maar als een pointer naar geheugenadres 0 kan 
wijzen, en null kan zijn, dan geeft:

if ( ptr ) {

} else {

    	printf("ptr is een NULL pointer!");
}

Toch die melding?

> Heheh, dat kun je zelfs gebruiken om vreemde toekenningen
> mee te "documenteren":
> 
>      if (('F' == sex) || (('f' == sex) && (NULL != (sex = 'F'))))
> do_female;
>      else if (('M' == sex) || (NULL != (sex = 'M'))) do_male;
> 
> of zo:
> 
>      if (('F' == sex) || (('f' == sex) && ('F' == (sex = 'F'))))
> do_female;
>      else if (('M' == sex) || ('M' == (sex = 'M'))) do_male;
> 
> Als motivatie voor het gebruiken van dit soort code stel ik me voor:
> Scheelt warnings, en de compiler optimaliseert het wel schoon.

Laatste eens. Maar zie mijn reaktie op Johan m.b.t. warnings.

>> en volgens mij ooit verzonnen om assignments in een if te ontdekken.
> 
> Ik legde het op aan beginnende C-programmeurs, dat scheelde een hoop
> fouten en verdriet. Maar dan deden ze vervolgens natuurlijk zoiets:
> 
>   unsigned int uiLen;
>   int i;
>     :
>     :
>   for (i = 0; i++; i < uiLen) ...
> 
> en dan wilde dat soms niet stoppen.

Probleem is: het is inderdaad een beginnersvalkuil, maar beter om ze 
daar in te laten vallen dan krom codeergedrag aan te leren, vind ik.

Ik ben een groot voorstander van programmeren in pseudo Engels, dus

if ( sex == 'F' ) { .... }

Als geslacht is vrouwelijk ....

Vandaar ook mijn plezier in Perl:

open .... or die ....

next if $line eq '';    	# volgende als de regel leeg is
$a == 3 and print "yes";    	# $a moet 3 zijn om print yes te zijn

defined $a or die    	    	# $a moet gedefinieerd zijn of anders

unless ( $a == 4 ) {    	# tenzij $a gelijk aan 4 is ...
...
}

Vooral unless maakt Perl stukken leesbaarder vind ik. Leesbaarder dan

if (! ... )    	    	    	 

>> Ik meen mij te herinneren dat een
>> beetje compiler daar een waarschuwing op geeft ( op: if ( sex = 'F' )
>> that is ).
> 
> Als je het warning-level hoog genoeg zet, wel. En anders was er nog
> lint.

Ik zet dat altijd maximaal :-D.

>> En zoniet, ik ga niet krom programmeren :-D.
> 
> 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.

Oh, zeker. Maar ik wil graag mijn code leesbaar houden :-D Zie boven.

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Technical Details
Message-ID: <Xns95EA868DF1188castleamber@130.133.1.4>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!fu-berlin.de!uni-berlin.de!individual.net!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!news1.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: John Bokma <postmaster@castleamber.com>
Newsgroups: nl.comp.programmeren,be.comp.programming
Subject: Re: Lijnen tellen van een project
Date: 26 Jan 2005 19:13:38 GMT
Organization: Castle Amber - software development
Lines: 144
Message-ID: <Xns95EA868DF1188castleamber@130.133.1.4>
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>
X-Trace: individual.net UXFmhR7ZdbaWMuINlYku9ArTz/OF8/k0e+yI44UIaqB4to2neT
User-Agent: Xnews/5.04.25
X-Face: $7h&5K*ZL9*ZQ\6Hco2"V?1dD*C<ab^>zlws[S%i0b,@gKk|[,)Y-<hk143{.Ov"x{({zo( l,N\m`-_^nJfVQdEyt+-uAP^7WG]5mHj9&::7X-qK;Yv;xmRvNWQR"_igw+cr5WMj;6:zlj<R80Ei@ $gGWq&*{FL*kC*a