Gathering of Tweakers

Quicksearch
Berichten: 421
Reg. datum: 04 april 2007

Goeie tip! was vergeten dat je ook === kon doen. (ga meteen wat code verzetten)
Human-readable is relatief

quote:
.oisyn schreef op zondag 13 juli 2008 @ 17:18:
[...]

Officiele C regels? Kom op zeg :). Er is K&R style, maar er zijn geen officiele regels voor C.
ok, de benaming "officiele" was misschien ietsje overdreven, maar ik verwees hiermee inderdaad naar K&R. Dit wordt door de meeste programmeurs tochwel als "de standaard" gezien. (ikzelf houd me er ook niet aan :) )

Vind jij dat ook niet ?

quote:
fleppuhstein schreef op zondag 13 juli 2008 @ 13:58:
[...]


In deze lijn kan ook snel de volgende fout gemaakt worden:
PHP:
1
2
3
4
5
6
7
<?php

if (0 == "") {
    echo "This is wrong!";
}

?>

Sterker nog, wat is de uitkomst van deze expressie:
PHP:

1
<?php
in_array("hello"array(0,1,2));
?>

Dit is een (versimpelde) versie van wat wij vandaag tegenkwamen in een stuk code. In PHP gaat dit dus compleet mis:
PHP:

1
2
<?php
0 == "hi";
0 == "test";
?>

Deze code kwam ik herhaaldelijk tegen in het Projectbeheerapp (classic ASP!!!) wat hier draait:
Visual Basic:
1
2
3
4
5
6
7
iAantalArchief = 0
while oRS.Eof=false
   if oRS.EOF=false then
      iAantalArchief=iAantalArchief+1
   end if
   oRs.MoveNext
wend

Het RecordSet hierboven wordt gevuld door deze SQL:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (@iTabsel=1)
begin
select MeldingIDDatumOmschrijvingNotitietblMeldingType.TypeAntwoordOpMeldingtblGebruikers.VolledigeNaamObjectTypeObjectIDtblMelding.Datum_ingevoerd
from ((tblMelding left join tblMeldingType on tblMelding.MeldingType = tblMeldingType.MeldingTypeIDleft join tblGebruikers on tblMelding.Gebruiker_Ingevoerd=tblGebruikers.GebruikerIDjoin tblMeldingOntvanger on tblMelding.MeldingID=tblMeldingOntvanger.Melding
where tblMelding.AntwoordOpMelding is null and tblMelding.Datum_Verwijderd is null and tblMelding.KlantID=@iKlantID
and tblMeldingOntvanger.Gebruiker=@iGebruikerID and not (tblMeldingOntvanger.Gelezen is null)
and getdate()>=tblMelding.Datum 
order by tblMelding.Datum_ingevoerd DESComschrijving
end
else
begin
SELECT     tblMelding.MeldingIDtblMelding.DatumtblMelding.OmschrijvingtblMelding.NotitietblMeldingType.TypetblMelding.AntwoordOpMelding
                      tblGebruikers.VolledigeNaamtblMelding.ObjectTypetblMelding.ObjectIDtblMelding.Datum_Ingevoerd
FROM         tblMelding LEFT OUTER JOIN
                      tblGebruikers ON tblMelding.Gebruiker_Ingevoerd = tblGebruikers.GebruikerID LEFT OUTER JOIN
                      tblMeldingType ON tblMelding.MeldingType = tblMeldingType.MeldingTypeID
WHERE     (tblMelding.Gebruiker_Ingevoerd = @iGebruikerIDAND (tblMelding.KlantID = @iKlantIDAND (tblMelding.AntwoordOpMelding IS NULLand (getdate()>=tblMelding.Datum)
order by tblMelding.Datum_ingevoerd DESComschrijving
end

Heeft blijkbaar nog nooit van een COUNT gehoord :S...

En ook deze (Kon 'm zo snel niet meer vinden, maar het kwam hierop neer):
Visual Basic:
1
2
3
4
5
while (conditie<10)
   if (conditie<10then
      'code hier
   end if
wend

|:(
 
FZR 600R

Double check to be double sure :)?

Liberate tutame ex inferis.
"De programma’s die we gebruiken zijn eigenlijk zo ontworpen dat ze allemaal onze aandacht opeisen als een stel dreinende peuters."

Code Complete (2nd edition) is ook een heerlijk boek vol met allerlei "coding horror" maar, belangrijker, hoe je het dan wel moet doen.

"Military intelligence is a contradiction in terms." - Groucho Marx, American Comedian, Actor and Singer, 1890-1977

Berichten: 3767
Reg. datum: 28 april 2000

quote:
Yeroon1986 schreef op dinsdag 15 juli 2008 @ 15:00:
Visual Basic:
1
2
3
4
5
while (conditie<10)
   if (conditie<10then
      'code hier
   end if
wend

|:(
Tja mischie heeft na de controle in de while een andere thread conditie wel veranderd ;)

To be, or not to be, those are the parameters

Berichten: 467
Reg. datum: 13 december 2005

quote:
rwb schreef op dinsdag 15 juli 2008 @ 16:22:
[...]

Tja mischie heeft na de controle in de while een andere thread conditie wel veranderd ;)
Dan zou die thread dat ook na de if controle kunnen doen ;) Het is sowieso good practice om blokken code met variables die door meerdere threads te benaderen zijn, synchronized uit te laten voeren (als zoiets bestaat in VB).

Zyppora wijzigde dit bericht 15-07-2008 16:44 (6%)

Zyppora - 80 Warlock

quote:
slindenau schreef op dinsdag 15 juli 2008 @ 15:18:
Double check to be double sure :)?
Als er verder niets meer met condition gebeurt, heb je ook een mooie endless loop :P

specs | Kater? Eerst water, de rest komt later

quote:
Haan schreef op dinsdag 15 juli 2008 @ 17:04:
[...]

Als er verder niets meer met condition gebeurt, heb je ook een mooie endless loop :P
Niet al binnen die loop wordt gewacht op input of als de loop wordt gebroken op een bepaalde value van de conditie of wat dan ook. Hoe vaak ik al niet
code:
1
2
3
4
5
while True:
  if condition == 0:
    break
  if condition == 1:
    continue

Heb meegemaakt ;) Daarbij kan de loop gebroken worden met een exception of andersoortige interventie. Als dit binnen een thread draait kan de thread gewoon gesloten worden etc etc etc.

-- edit
goedemorgen, als er inderdaad niks mee gebeurd is ie endless :+

simonkey wijzigde dit bericht 15-07-2008 17:11 (20%)

 
haha, er worden geen threads gebruikt. Bestaat ook niet in ASP (VBscript dus) voor zover ik weet! In de while-loop wordt wel wat met die conditite gedaan, Ik liet het voorbeeld zien om dat er een dubbele check werd gedaan die volstrekt overbodig is.
 
quote:
simonkey schreef op dinsdag 15 juli 2008 @ 17:08:
[...]

Niet al binnen die loop wordt gewacht op input of als de loop wordt gebroken op een bepaalde value van de conditie of wat dan ook. Hoe vaak ik al niet
code:
1
2
3
4
5
while True:
  if condition == 0:
    break
  if condition == 1:
    continue

Heb meegemaakt ;) Daarbij kan de loop gebroken worden met een exception of andersoortige interventie. Als dit binnen een thread draait kan de thread gewoon gesloten worden etc etc etc.
Dat voorbeeld is imho ook vrij ranzige code :P

specs | Kater? Eerst water, de rest komt later

Berichten: 3767
Reg. datum: 28 april 2000

quote:
Yeroon1986 schreef op woensdag 16 juli 2008 @ 09:07:
haha, er worden geen threads gebruikt. Bestaat ook niet in ASP (VBscript dus) voor zover ik weet! In de while-loop wordt wel wat met die conditite gedaan, Ik liet het voorbeeld zien om dat er een dubbele check werd gedaan die volstrekt overbodig is.
Ach als er wel thread gebruikt werden zou het nog net zo fout zijn.

To be, or not to be, those are the parameters

quote:
chris schreef op maandag 14 juli 2008 @ 15:32:
[...]


Sterker nog, wat is de uitkomst van deze expressie:
PHP:

1
<?php
in_array("hello"array(0,1,2));
?>

Dit is een (versimpelde) versie van wat wij vandaag tegenkwamen in een stuk code. In PHP gaat dit dus compleet mis:
PHP:

1
2
<?php
0 == "hi";
0 == "test";
?>

Wat denk je dat hier uit komt?
PHP:

1
<?php
in_array("hello"array(0,1,2), true);
?>

:)

13" MacBook black / 20" Cinema Display / 3.5" iPhone 3G Wit / last.fm

GameFriends.nl

Kwam ik tegen in een van onze projecten, het is niet echt fout, maar wel een beetje omslachtig :).
code:
1
2
3
4
5
6
7
8
if (tblZoek.Visible == false)
{
  // Doe iets
}
else if (tblZoek.Visible == true) 
{
  // Doe iets anders 
}

Heeft nu een APNG icon

Het is omslachtig maar wel duidelijk. Niet per definitie slecht.
C#:
1
2
3
4
5
if (!tblZoek.Visible){
  // Doe iets
else {
  // Doe iets anders 
}

Heb nu een Animated PNG icon. Werkt in alle moderne browsers (Firefox en Opera).

Of deze
code:
1
2
3
4
5
6
7
if (expression)
{
    
} else
{
    doeIets();
}

En dan ook geen stukje commentaar of iets. :)

13" MacBook black / 20" Cinema Display / 3.5" iPhone 3G Wit / last.fm


Acties: [view][quote]


Door: Janoz Moderator PRG/SEA/DTE
!litemod
Berichten: 14.728
Reg. datum: 19 oktober 2000

@Sebazzz:
Dan zou ik er eerder
C#:
1
2
3
4
5
if (tblZoek.Visible){
  // Doe iets anders
else {
  // Doe iets 
}

van maken. De negatie zie je snel over het hoofd.

@super-muffin:
Soms wordt in de code-guidelines opgegeven dat je niet met een negatie mag werken om de reden die ik hierboven noem. Dan krijg je inderdaad dergelijke constructies. Echt fout zou ik ze niet willen noemen (tenzij het een gevolg is van een ontwikkelaar die helemaal geen negatie kent)

Ik zou echter wel een stukje commentaar in het lege blok opnemen. Iets als '\\do nothing'.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Berichten: 1830
Reg. datum: 22 januari 2004

quote:
super-muffin schreef op woensdag 16 juli 2008 @ 10:21:
Of deze
code:
1
2
3
4
5
6
7
if (expression)
{
    
} else
{
    doeIets();
}

En dan ook geen stukje commentaar of iets. :)
Gereserveerd voor toekomstige uitbreidingen ;)

Ook leuk:
PHP:

1
2
3
4
5
<?php
$x = 0100;

if ( $x == 100 ) {
  // Code die nooit uitgevoerd wordt.
}
?>

Whereas Europeans generally pronounce my name the right way ('Nick-louse Veert'), Americans invariably mangle it into 'Nickel's Worth.' This is to say that Europeans call me by name, but Americans call me by value - Niklaus Wirth

Human-readable is relatief

Stond daar letterlijk "code die nooit uitgevoerd wordt" of wat moet ik me er van voorstellen ? :)

Vind jij dat ook niet ?

quote:
Mozin schreef op woensdag 16 juli 2008 @ 10:06:
Kwam ik tegen in een van onze projecten, het is niet echt fout, maar wel een beetje omslachtig :).
code:
1
2
3
4
5
6
7
8
if (tblZoek.Visible == false)
{
  // Doe iets
}
else if (tblZoek.Visible == true) 
{
  // Doe iets anders 
}

En wat als tblZoek.Visible Null is?

Currently Reading | Ik los geen problemen op, ik maak ze alleen...

Berichten: 1830
Reg. datum: 22 januari 2004

quote:
Niekk schreef op woensdag 16 juli 2008 @ 10:29:
Stond daar letterlijk "code die nooit uitgevoerd wordt" of wat moet ik me er van voorstellen ? :)
Nee, dit is een voorbeeld ;) (De code wordt ook niet uitgevoerd).

Icelus wijzigde dit bericht 16-07-2008 10:37 (7%)

Whereas Europeans generally pronounce my name the right way ('Nick-louse Veert'), Americans invariably mangle it into 'Nickel's Worth.' This is to say that Europeans call me by name, but Americans call me by value - Niklaus Wirth

Ik kwam zojuist een mooie tegen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
        private static bool IsBoolstring arg )
        {
            try
            {
                Convert.ToBoolean(arg);
                return true;
            }
            catch
            {
                return false;
            }
        }

Dat moet toch eenvoudiger kunnen :P
 
FUD Führer.
Berichten: 7199
Reg. datum: 12 oktober 2001

quote:
Tedkees schreef op woensdag 16 juli 2008 @ 11:32:
Ik kwam zojuist een mooie tegen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
        private static bool IsBoolstring arg )
        {
            try
            {
                Convert.ToBoolean(arg);
                return true;
            }
            catch
            {
                return false;
            }
        }

Dat moet toch eenvoudiger kunnen :P
Is op zich wel slim. De method ToBoolean geeft een boolean, die je in principe direct kan returnen, maar vergeet de ConversionException niet.

2*2Ghz, 2GB, 20 centimeter.

quote:
Geqxon schreef op woensdag 16 juli 2008 @ 11:41:
[...]


Is op zich wel slim. De method ToBoolean geeft een boolean, die je in principe direct kan returnen, maar vergeet de ConversionException niet.
Nope. de functie is IsBool. Er word dus alleen gecontrolleerd of the waarde een boolean of waarde die geconverteerd kan worden naar boolen bevat.

Als bedoeling zou zijn om waarde van de boolean terug te geven, dan is de functie fout en werkt hij niet correct.

Currently Reading | Ik los geen problemen op, ik maak ze alleen...



© 1998-2008 Tweakers.net BV - Based on React - Hosted by True - Served by Aphaea

© 1998-2008 Tweakers.net BV - Based on React - Hosted by True - Served by Aphaea

[RSS][XML]

Update Tracker

Active Topics
Active Topics
Frontpage Nieuws
Frontpage Nieuws