[alg] Slechtste programmeervoorbeelden deel 4 Vorige deel Overzicht Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 ... 24 ... 103 Laatste
Acties:
  • 993.641 views

Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 18:33

BM

Moderator Spielerij
roy-t schreef op vrijdag 02 april 2010 @ 09:40:
Wat betreft slechte programmeer voorbeelden: ik flik nog wel eens het volgende truukje:

C#:
1
2
3
4
5
6
if(someHardCondition && someOtherLongCondition)
{
     return true;
}

return false;


Dan ben ik zo bezig met die check schrijven dat ik helemaal vergeet dat ik die check meteen kan returnen ala:

C#:
1
return someHardCondition && someOtherLongCondition


Wordt er redelijk vaak op gewezen als ik even snel een voorbeeld stukje code schrijf ofzo. Erg stom, maar gelukkig werkt het programma nog net zo goed.
Vind ik nu niet echt heel slecht. Sure, het 2e is korter, maar zodra die checks iets complexer worden is je 1e voorbeel imho stukken leesbaarder :)

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:43

Haan

dotnetter

Ja, is meer een soort van voorkeur die je kan hebben. En stel dat je bijvoorbeeld een log / trace message wil bijhouden als de uitkomst false is, kan je dat ook beter op de eerste manier doen.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Overigens werkt dat ook met korte simpele condities. ;)

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10 12:59
Sommigen kunnen het if-elsen ook overdrijven, zo kwam ik hier in de frontend het volgende eens tegen:
C#:
1
someButton.Enabled = someBoolean ? true : false;

Dat is dan weer wat overdreven, naar mijn idee. ;)

Overigens zie ik het hier bij return statements ook vaak terugkomen, ook bij korte condities. Zelf heb ik de voorkeur voor de tweede optie zonder if-else, maar dat is persoonlijk.

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Amras schreef op vrijdag 02 april 2010 @ 10:00:
Sommigen kunnen het if-elsen ook overdrijven, zo kwam ik hier in de frontend het volgende eens tegen:
C#:
1
someButton.Enabled = someBoolean ? true : false;

Dat is dan weer wat overdreven, naar mijn idee. ;)

Overigens zie ik het hier bij return statements ook vaak terugkomen, ook bij korte condities. Zelf heb ik de voorkeur voor de tweede optie zonder if-else, maar dat is persoonlijk.
Doet me denken aan mijn eerste stukjes code :P in VB5 (wat ik puur uit hobby en interesse deed).

Visual Basic:
1
2
3
4
5
6
7
8
If ((myVar = 5) = True) Then
    myButton.Visible = True
End If

'Of bijvoorbeeld
If(myButton.Visible = True) Then 'Switch button visibility
    myButton.Visible = False
End If


Toen wist ik dus nog niet wat je met een boolean moest doen. Maar goed toen was ik ook nog jong (eerste klassen van de middelbare school) en was het internet nog niet zo toegankelijk (33k6 d:)b). Gelukkig is het allemaal goed gekomen na een paar jaartjes oefenen en een informatica opleiding :P

Overigens zal ik nooit grote vriendjes worden met VB (ook niet VB.net) ik heb nu een aantal projecten in VB.NET gemaakt, maar zodra het kan probeer ik toch weer C# te gebruiken. De beroerde typesafety op bepaalde plekken in VB heeft me al aardig wat WTF momentjes opgeleverd. En dat terwijl de compiler zo strict mogelijk staat. Vooral met nullables laat VB geregeld steekjes vallen.

Overigens zou jouw voorbeeld wel nuttig zijn bij nullable booleans:
C#:
1
someButton.Enabled = someBoolean ?? false; //If null just use false as value

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • joostvanpinxten
  • Registratie: Maart 2007
  • Laatst online: 03-09 12:50
fleppuhstein schreef op donderdag 01 april 2010 @ 17:33:
[...]


Eigenlijk is
code:
1
% 2
wel een "zwaardere" belasting dan
code:
1
& 1
(Check op first bit, die al gelijk even/oneven aangeeft)
Bij het interpreteren van code dien je inderdaad te weten op welk platform dit gebeurt. Soms kan het een probleem zijn vanwege het verschil tussen Little en Big-Endian.

Ook de interpretatie van floats en (signed) integers worden normaal aangenomen om op één bepaalde manier te worden opgeslagen. In het geval van signed integers vaak Two's Complement, maar dat kan natuurlijk ook Gray Code, waarbij het niet zo is dat i & 1 gelijk is aan het oneven of even zijn van i.

De compiler bemoeit zich daar ook niet mee, maar i % 2 heeft een grote kans om geoptimaliseerd te worden tot i & 1, aangezien de meeste systemen Two's Complement gebruiken.

Zo zou je in principe ook bit-wise operaties uit kunnen voeren op floating point getallen! Bitwise operaties zorgen er eigenlijk in alle gevallen voor dat code platform-afhankelijk wordt. In de meeste script-talen hoef je hier dus compleet geen rekening mee te houden, maar bij talen als C/C++ wel:

C:
1
2
3
4
unsigned int i;
if(i == -1){
 // do something
}

In het geval van Two's Complement wordt de hoogste waarde gepakt (allemaal 1'en), maar in unsigned Gray Code wordt dit iets compleet anders!

Helaas is het inderdaad zo dat modulo dan weer op verschillende systemen anders wordt geinterpreteerd, waardoor het mogelijk is dat je een negatief antwoord krijgt, afhankelijk van de taal/platform combinatie.

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ja, maar dat je met modulo een negatief antwoord krijgt, is toch niet erg?

Oneven is gewoon "n % 2 != 0" ipv "n % 2 == 1".

Of je zet "n % 2 == 0" in een functie IsEven en je implementeert IsOdd als !IsEven.

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 21:41

RayNbow

Kirika <3

BM schreef op vrijdag 02 april 2010 @ 09:44:
[...]

Vind ik nu niet echt heel slecht. Sure, het 2e is korter, maar zodra die checks iets complexer worden is je 1e voorbeel imho stukken leesbaarder :)
Als ik aan complexere expressies denk, denk ik eerder aan Introduce Explaining Variable, niet of ik wel of geen if moet gebruiken.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

RayNbow schreef op vrijdag 02 april 2010 @ 11:57:
[...]

Als ik aan complexere expressies denk, denk ik eerder aan Introduce Explaining Variable, niet of ik wel of geen if moet gebruiken.
Dat is ook wel weer waar. Anders moet je waarschijnlijk een hele lap comments boven je return gooien om uit te leggen wat code doet. Goede code verklaart zichzelf en met een explaining variable kun je het inderdaad duidelijker maken.

Goede tip!
Van die site had ik nog nooit gehoord, eens snuffelen of er meer leuke dingen op staan :)

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • joostvanpinxten
  • Registratie: Maart 2007
  • Laatst online: 03-09 12:50
Davio schreef op vrijdag 02 april 2010 @ 11:54:
Ja, maar dat je met modulo een negatief antwoord krijgt, is toch niet erg?

Oneven is gewoon "n % 2 != 0" ipv "n % 2 == 1".

Of je zet "n % 2 == 0" in een functie IsEven en je implementeert IsOdd als !IsEven.
Klopt, maar dat was niet mijn punt (wat jij zegt stond ook in de wiki-link over modulo). Het gaat er meer over dat je bij bepaalde input en bepaalde structuren, gewoon meteen ziet wat er zou moeten gebeuren maar niet wat er daadwerkelijk gebeurt. Ik houd met dit soort 'afwijkingen' ook geen rekening in mijn code, omdat ik altijd voor maar één platform tegelijk programmeer. Maar dit is meer een waarschuwing dat de context van een systeem grote invloed kan hebben op de uiteindeljike uitvoer!

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 21:41

RayNbow

Kirika <3

.Gertjan. schreef op vrijdag 02 april 2010 @ 12:20:
Van die site had ik nog nooit gehoord, eens snuffelen of er meer leuke dingen op staan :)
De site hoort bij o.a. dit boek. Niet alles wat in het boek staat staat ook op de site. Het boek is prima leesbaar, zelfs al gebruikt het een oude versie Java om voorbeelden te bespreken.
* RayNbow heeft het boek ooit met korting op de kop getikt bij Donner *). :)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

RayNbow schreef op vrijdag 02 april 2010 @ 12:36:
[...]

De site hoort bij o.a. dit boek. Niet alles wat in het boek staat staat ook op de site. Het boek is prima leesbaar, zelfs al gebruikt het een oude versie Java om voorbeelden te bespreken.
* RayNbow heeft het boek ooit met korting op de kop getikt bij Donner *). :)
Kijk zo steek ik nog eens wat op :). Ik heb een vergelijkbaar boek gelezen "Code Complete 2", staan er in dit boek veel vernieuwende dingen of is het zonde van het geld als ik al CC2 in mijn kast heb staan.

Vond Code Complete wel een vrij duidelijk boek met leuke/goede voorbeelden. Niet heel veel van opgestoken, want bij veel dingen had ik vooral: "ja, duh.." en pas ik al toe in mijn dagelijkse development, maar het is altijd handig om voorbeelden te hebben als je bijvoorbeeld met juniors zou werken.

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 21:41

RayNbow

Kirika <3

.Gertjan. schreef op vrijdag 02 april 2010 @ 12:44:
Kijk zo steek ik nog eens wat op :). Ik heb een vergelijkbaar boek gelezen "Code Complete 2", staan er in dit boek veel vernieuwende dingen of is het zonde van het geld als ik al CC2 in mijn kast heb staan.
Ik heb Code Complete 2 niet gelezen, dus ik kan daar helaas geen uitspraak over doen.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-10 23:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mja, niet echt een "slecht" programmeervoorbeeld imho.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
.Gertjan. schreef op vrijdag 02 april 2010 @ 12:44:
[...]


Kijk zo steek ik nog eens wat op :). Ik heb een vergelijkbaar boek gelezen "Code Complete 2", staan er in dit boek veel vernieuwende dingen of is het zonde van het geld als ik al CC2 in mijn kast heb staan.

Vond Code Complete wel een vrij duidelijk boek met leuke/goede voorbeelden. Niet heel veel van opgestoken, want bij veel dingen had ik vooral: "ja, duh.." en pas ik al toe in mijn dagelijkse development, maar het is altijd handig om voorbeelden te hebben als je bijvoorbeeld met juniors zou werken.
Beide boeken zijn aanraders, ik heb ze beiden en sluiten elkaar zeker niet uit.

Clean Code is overigens ook een aanrader.

[ Voor 5% gewijzigd door Michali op 02-04-2010 13:43 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
En hierbij nomineer ik mijzelf! \[C#] EWX_FORCEIFHUNG afsluiten ook als programma crashed


Bitwise flags combineren met & ipv | ... What was I thinking!

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

roy-t schreef op vrijdag 09 april 2010 @ 15:00:
En hierbij nomineer ik mijzelf! \[C#] EWX_FORCEIFHUNG afsluiten ook als programma crashed


Bitwise flags combineren met & ipv | ... What was I thinking!
Je bedoelt: What was & thinking!

FORCEIFHUNG klinkt trouwens best wel pr0n. :+

[/vrijdagmiddagflauw]

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:43

Haan

dotnetter

Foutje kan iedereen maken, dat maakt het niet meteen een slecht programmeervoorbeeld :>

Nee, neem dan een koppeling die een kleine vier jaar geleden is gebouwd en waar ik deze week een aanpassing aan moest maken :X

Staat vol met dit soort dingen:
C#:
1
2
3
4
string m_strServerAddress;
string m_strUsername;
string m_strPassword;
string m_strDomain;

:'(

Of een methode met 15 regels waarin allerlei onduidelijke dingen worden gedaan, zonder enig commentaar en dan op het eind dit:
C#:
1
2
// update record
updateRecord();

:')

Of deze:
C#:
1
2
3
4
5
6
7
8
if (value.Equals("false"))
{
    boolean.Value = bool.Parse("false");
}
else
{
    boolean.Value = bool.Parse("true");
}

:X

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 01-10 21:01

Matis

Rubber Rocket

Lol, die laatste is een prachtig voorbeeld van loose-typed C# :P

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Haan schreef op vrijdag 09 april 2010 @ 15:08:
Foutje kan iedereen maken, dat maakt het niet meteen een slecht programmeervoorbeeld :>

Nee, neem dan een koppeling die een kleine vier jaar geleden is gebouwd en waar ik deze week een aanpassing aan moest maken :X

Staat vol met dit soort dingen:
C#:
1
2
3
4
string m_strServerAddress;
string m_strUsername;
string m_strPassword;
string m_strDomain;

:'(

[..]
Ach, zulke naamgeving is niet echt een slecht programmeervoorbeeld. Er worden alleen conventies gebruikt die alweer gedateerd zijn.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
RayNbow schreef op vrijdag 02 april 2010 @ 12:53:
[...]

Ik heb Code Complete 2 niet gelezen, dus ik kan daar helaas geen uitspraak over doen.
Als je op de hoogte bent van de meeste stijl gerelateerde discussies en argumenten kun je het boek wat mij betreft de eerste 400 paginaas gewoon overslaan. De laatste 400 gaan over refactoren, optimizen, project groote, debuggen, testen et cetera. Meestal omschrijf ik het boek als dé samenvatting van alle programming gerelateerde flamewars.

[ Voor 20% gewijzigd door PrisonerOfPain op 09-04-2010 15:34 ]


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Mensen van the daily wtf zullen deze al gezien hebben als ze de comments van het artikel vandaag hebben doorgenomen. Maar zie hier: iemand die daadwerkelijk een serieuze implementatie van het doubleton pattern heeft gemaakt: http://www.codeproject.co...ignpattern_doubleton.aspx

(Waarschijnlijk is er ergens stiekem wel een nut voor iets als een doubleton of een tripleton, maar niet zoals het op deze manier geimplementeerd is, een n-eton lijkt me sowieso nutteloos).

[ Voor 24% gewijzigd door roy-t op 14-04-2010 20:43 ]

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 01-10 21:01

Matis

Rubber Rocket

roy-t schreef op woensdag 14 april 2010 @ 20:37:
Mensen van the daily wtf zullen deze al gezien hebben als ze de comments van het artikel vandaag hebben doorgenomen. Maar zie hier: iemand die daadwerkelijk een serieuze implementatie van het doubleton pattern heeft gemaakt: http://www.codeproject.co...ignpattern_doubleton.aspx
Geniaal, nu de uitwerkingen voor een sixtupliton : _O-

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 16:55
Matis schreef op woensdag 14 april 2010 @ 20:39:
[...]

Geniaal, nu de uitwerkingen voor een sixtupliton : _O-
Losse pols:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Sixuptilon<T> implements Ningleton<T> {
    List<T> instances = new ArrayList<T>(6);
    int currentinstance = 0;
    public T getInstance() {
        if (currentinstance++ > 6) currentinstance = 0;
        T instance = instances.get(currentinstance);
        if (instance == null) {
             instance = new T(); // zal wel niet werken, ben lui.
             instances.put(currentinstance, instance);
        }
        return instance;
      
    }
}


zal wel niet werken. Ga ook een artikel maken over hoe je een Singleton kunt refactoren tot een Infiniton, waarbij je een onbeperkte* hoeveelheid instances van wat eerst een singleton was kunt maken. Ideaal voor als je applicatie ineens meer dan één databaseverbinding tegelijk op moet kunnen zetten. Ik denk zelfs dat dit zo vaak voor gaat komen (nadat ik mijn artikel schrijf, natuurlijk) dat het wel gepromoveerd kan worden tot een language feature. Wat dachten jullie van de 'nu' operator? DatabaseConnection conn = nu DatabaseConnection(params);. Lijkt me helemaal leip.

*: onbeperkt met een limiet van het aantal max object instanties op je systeem.

Acties:
  • 0 Henk 'm!

Verwijderd

Proefwerk java (4 HAVO):
Maak een applet met als doel dat deze de tafels print op het scherm. Wat er door iemand werd ingeleverd, was het volgende:
Java:
1
String uitvoer = "1 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal) + /n +"2 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*2) + /n +"3 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*3) + /n +"4 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*4) + /n +"5 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*5) + /n +"6 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*6) + /n +"7 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*7) + /n +"8 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*8) + /n +"9 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*9) + /n +"10 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*10);

En dit dus in één regel gepropt...

Iets anders, bij mij in de klas (5 VWO), ook bij een proefwerk java. Schrijf in een applet een manier waarbij van een reeks (array) enkel de even getallen zichtbaar zijn:
Java:
1
if (willekeurigeArray[i] == 2 || willekeurigeArray[i] == 4 || willekeurigeArray[i] == 6 || willekeurigeArray[i] == 8 || willekeurigeArray[i] == 10 || willekeurigeArray[i] == 12 || willekeurigeArray[i] == 14 /* enz. tot aan de 150... */)

Volgens mij was daar de modulo functie voor uitgevonden...

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Verwijderd schreef op maandag 19 april 2010 @ 17:36:
Proefwerk java (4 HAVO):
Maak een applet met als doel dat deze de tafels print op het scherm. Wat er door iemand werd ingeleverd, was het volgende:
Java:
1
String uitvoer = "1 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal) + /n +"2 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*2) + /n +"3 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*3) + /n +"4 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*4) + /n +"5 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*5) + /n +"6 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*6) + /n +"7 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*7) + /n +"8 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*8) + /n +"9 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*9) + /n +"10 x "  + String.valueOf(tafelgetal) + " = " + String.valueOf(tafelgetal*10);

En dit dus in één regel gepropt...

Iets anders, bij mij in de klas (5 VWO), ook bij een proefwerk java. Schrijf in een applet een manier waarbij van een reeks (array) enkel de even getallen zichtbaar zijn:
Java:
1
if (willekeurigeArray[i] == 2 || willekeurigeArray[i] == 4 || willekeurigeArray[i] == 6 || willekeurigeArray[i] == 8 || willekeurigeArray[i] == 10 || willekeurigeArray[i] == 12 || willekeurigeArray[i] == 14 /* enz. tot aan de 150... */)

Volgens mij was daar de modulo functie voor uitgevonden...
Dat zo iemand dan ook niet bij zichzelf denkt: "Hmm, als het nu groter is dan 150...? D'r moet een handigere manier zijn dan 100x copy-pasten...."

Een 3 voor nadenken, een 8 voor 75x copy-pasten. 8)7

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-10 23:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Idd, de meer typisch studenten oplossing zou zijn om er een string van te maken en dan te kijken of de achterste digit een 2, 4, 6, 8 of 0 is :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 27-09 13:36
.oisyn schreef op maandag 19 april 2010 @ 18:46:
Idd, de meer typisch studenten oplossing zou zijn om er een string van te maken en dan te kijken of de achterste digit een 2, 4, 6, 8 of 0 is :)
Dat lijkt me al veel te complex als je gewoon geen idee hebt. Zo'n antwoord lijkt me echt een last resort omdat hij het echt niet wist, in de hoop nog wat puntjes bij elkaar te sprokkelen (hopelijk niet gelukt, maar je weet maar nooit...)

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 27-09 13:36
Davio schreef op maandag 19 april 2010 @ 18:25:
[...]

Dat zo iemand dan ook niet bij zichzelf denkt: "Hmm, als het nu groter is dan 150...? D'r moet een handigere manier zijn dan 100x copy-pasten...."
Je kunt het toch in een loopje zetten?
code:
1
2
3
4
5
6
for (int n = 0; n < Integer.MaxValue; n += 2)
{
   if (willekeurigeArray[i] == n)
      return "even";
}
return "oneven";
:+

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 30-09 23:08

CoolGamer

What is it? Dragons?

NickThissen schreef op maandag 19 april 2010 @ 19:21:
[...]

Je kunt het toch in een loopje zetten?
code:
1
2
3
4
5
6
for (int n = 0; n < Integer.MaxValue; n += 2)
{
   if (willekeurigeArray[i] == n)
      return "even";
}
return "oneven";
:+
Wie ziet de bug >:) (en dan bedoel ik niet de Integer.MAX_VALUE typefout.)

[ Voor 8% gewijzigd door CoolGamer op 19-04-2010 19:31 ]

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

Verwijderd

opdracht: maak een tabel met de 0 tot en met 9e macht van 2
antwoord dient er als volgt uit te zien:
0 1
1 2
2 4
3 8

was er door iemand ingeleverd:
code:
1
printf("0\t1\n1\t2\n2\t4\n enz enz..");

die gast had de volle mep punten gekregen 8)7
code:
1
2
if (willekeurigearray[i] < 0) 
 crash();

[ Voor 27% gewijzigd door Verwijderd op 19-04-2010 19:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 19 april 2010 @ 19:27:
[...]

code:
1
2
if (willekeurigearray\[i] < 0) 
 crash();
Niet echt... :9 Niet eens een infinite loop. :+

Acties:
  • 0 Henk 'm!

  • bloody
  • Registratie: Juni 1999
  • Laatst online: 17:58

bloody

0.000 KB!!

roy-t schreef op vrijdag 02 april 2010 @ 09:40:
Wat betreft slechte programmeer voorbeelden: ik flik nog wel eens het volgende truukje:

C#:
1
2
3
4
5
6
if(someHardCondition && someOtherLongCondition)
{
     return true;
}

return false;


Dan ben ik zo bezig met die check schrijven dat ik helemaal vergeet dat ik die check meteen kan returnen ala:

C#:
1
return someHardCondition && someOtherLongCondition


Wordt er redelijk vaak op gewezen als ik even snel een voorbeeld stukje code schrijf ofzo. Erg stom, maar gelukkig werkt het programma nog net zo goed.
Het eerste stukje vind ik handiger om debug redenen. Je kunt namelijk er zo met je debugger erdoorheen steppen en dan al zien wat de return waarde gaat zijn.
Bij de onderste oplossing moet je nog maar zien wat de aanroepende methode met de return waarde gaat doen.

nope


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 30-09 23:08

CoolGamer

What is it? Dragons?

Echt wel.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

Verwijderd

Ik ging er even van uit dat Integer.MaxValue een correcte waarde was, maar zo niet dan loopt hij daar gelijk al stuk op? :9 Als het een correcte waarde was, dan was het geen infinite loop, aangezien de "max value" niet infinite is. ;)

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 30-09 23:08

CoolGamer

What is it? Dragons?

Verwijderd schreef op maandag 19 april 2010 @ 19:49:
[...]

Ik ging er even van uit dat Integer.MaxValue een correcte waarde was, maar zo niet dan loopt hij daar gelijk al stuk op? :9 Als het een correcte waarde was, dan was het geen infinite loop, aangezien de "max value" niet infinite is. ;)
Integer.MaxValue is 2147483647, is gewoon een correcte waarde.

Hint:
spoiler:
Overflow

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • fiftyhillswest
  • Registratie: Oktober 2009
  • Laatst online: 14:57
TheCoolGamer schreef op maandag 19 april 2010 @ 19:23:
[...]

Wie ziet de bug >:) (en dan bedoel ik niet de Integer.MAX_VALUE typefout.)
Waar komt die i vandaan :?
moet het dan niet zijn:
Java:
1
2
3
4
5
6
7
8
for (int n = 0; n < Integer.MaxValue; n += 2)
{
    for(int i = 0; i < willekeurigeArray.Length; i++)
    {
        if (willekeurigeArray[i] == n){
            return "even";
}
return "oneven";


overflows daargelaten :P

Acties:
  • 0 Henk 'm!

Verwijderd

fiftyhillswest schreef op maandag 19 april 2010 @ 19:52:
[...]


Waar komt die i vandaan :?
moet het dan niet zijn:
Java:
1
2
3
4
5
6
7
8
for (int n = 0; n < Integer.MaxValue; n += 2)
{
    for(int i = 0; i < willekeurigeArray.Length; i++)
    {
        if (willekeurigeArray[i] == n){
            return "even";
}
return "oneven";


overflows daargelaten :P
Volgens mij moet het nooit iets zijn wat daar op lijkt. :D

Acties:
  • 0 Henk 'm!

  • fiftyhillswest
  • Registratie: Oktober 2009
  • Laatst online: 14:57
Och, laat ook maar.. Nederlands examens breken me op :P

Acties:
  • 0 Henk 'm!

  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 18-05 17:57
Hoe zit het dan met negatieve getallen? :)

Integer.MaxValue is trouwens ook een even getal en die wordt ook niet gecontroleerd.

[ Voor 51% gewijzigd door bobo1on1 op 19-04-2010 21:10 ]

Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 27-09 13:36
Ik schreef Integer.MaxValue in "C# stijl" omdat ik niet zo thuis ben in java, wist niet zeker wat de naam was :p

En de bug is dat de laatste waarde die goed gaat 2147483646 is (== Integer.MaxValue - 1), en omdat die nog kleiner dan Integer.MaxValue is gaat hij nog eens 2 omhoog --> overflow.

Maar goed... Het was maar een grapje natuurlijk, niet serieus nemen ;) en daarbij weet ik ook niet uit m'n hoofd of de maxvalue even of oneven is :p

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-10 23:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

bobo1on1 schreef op maandag 19 april 2010 @ 21:04:
Hoe zit het dan met negatieve getallen? :)

Integer.MaxValue is trouwens ook een even getal en die wordt ook niet gecontroleerd.
Ik hoop maar dat max int een oneven getal is, anders stort het universum in.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 01-10 21:27
Hebben ze dan niet 1 getal gereserveerd om overflows te checken? zal vast wel een taal zijn die dat doet ;)

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 30-09 23:08

CoolGamer

What is it? Dragons?

MBV schreef op maandag 19 april 2010 @ 21:34:
Hebben ze dan niet 1 getal gereserveerd om overflows te checken? zal vast wel een taal zijn die dat doet ;)
Kan zo snel geen taal verzinnen die een overflow waarde heeft voor gehele getallen. Voor floating point getallen doen de talen het standaard wel.
bobo1on1 schreef op maandag 19 april 2010 @ 21:04:
Hoe zit het dan met negatieve getallen? :)
Probeer het eens uit en probeer dan eens het antwoord te verklaren voor jezelf. ;) Zo lang duurt de loop nou ook weer niet.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 16:55
Ter info: Zo moet je niet gaan programmeren.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public void saveAllCommerce(QuizDetails quiz, Connection connection) throws SQLException {
    if (isNotBlank(quiz.getPreloader().getMediaId())) {
        quiz.getPreloader().setQuizId(quiz.getId());
        if (quiz.getPreloader().getId() > 0) {
            CommerceDAO.update(connection, quiz.getPreloader());
        } else {
            CommerceDAO.insert(connection, quiz.getPreloader());
            quiz.getPreloader().setId(CommerceDAO.getLastInsertedId(connection));
        }
    } else {
        CommerceDAO.delete(connection, quiz.getPreloader());
        quiz.setPreloader(new CommerceData(CommerceData.TYPE_PRELOADER));
    }

    if (isNotBlank(quiz.getLargeImage().getMediaId())) {
        quiz.getLargeImage().setQuizId(quiz.getId());
        if (quiz.getLargeImage().getId() > 0) {
            CommerceDAO.update(connection, quiz.getLargeImage());
        } else {
            CommerceDAO.insert(connection, quiz.getLargeImage());
            quiz.getLargeImage().setId(CommerceDAO.getLastInsertedId(connection));
        }
    } else {
        CommerceDAO.delete(connection, quiz.getLargeImage());
        quiz.setLargeImage(new CommerceData(CommerceData.TYPE_LARGEIMAGE));
    }

    if (isNotBlank(quiz.getSmallImage().getMediaId())) {
        quiz.getSmallImage().setQuizId(quiz.getId());
        if (quiz.getSmallImage().getId() > 0) {
            CommerceDAO.update(connection, quiz.getSmallImage());
        } else {
            CommerceDAO.insert(connection, quiz.getSmallImage());
            quiz.getSmallImage().setId(CommerceDAO.getLastInsertedId(connection));
        }
    } else {
        CommerceDAO.delete(connection, quiz.getSmallImage());
        quiz.setSmallImage(new CommerceData(CommerceData.TYPE_SMALLIMAGE));
    }
}


* YopY is te lui en krijgt niet genoeg tijd om bovenstaande netjes op te lossen.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Implementeren de resulterende objecten van:
quiz.getPreloader()
quiz.getLargeImage()
quiz.getSmallImage()
Niet gewoon eenzelfde interface? Dan is het eenvoudig te refactoren naar
Java:
1
2
3
4
5
6
public void saveAllCommerce(QuizDetails quiz, Connection connection) throws SQLException
{
    doSomeWithSomeObject(quiz, connection, quiz.getPreloader(), CommerceData.TYPE_PRELOADER );
    doSomeWithSomeObject(quiz, connection, quiz.getLargeImage(), CommerceData.TYPE_LARGEIMAGE );
    doSomeWithSomeObject(quiz, connection, quiz.getSmallImage(), CommerceData.TYPE_SMALLIMAGE );
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 02-10 09:47
Net even een WTF-je tegengekomen van m'n voorganger.

PHP:
1
2
3
$ip = $_SERVER['REMOTE_ADDR']; //ip adres van gebruiker
$id = $_COOKIE['PHPSESSID']; //huidige session id
$agent = $_SERVER['HTTP_USER_AGENT'];


Vervolgens werden deze variabelen gewoon gebruikt in query's. ;(

Stom dat ik deze niet eerder gezien heb, want het is een fijn lek zo. :s

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 23:17
dev10 schreef op vrijdag 23 april 2010 @ 14:04:
Net even een WTF-je tegengekomen van m'n voorganger.
[...]
Stom dat ik deze niet eerder gezien heb, want het is een fijn lek zo. :s
En het lek is dan dat die user-agent niet werd escaped? Anders zie ik het probleem niet zo...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • netvor
  • Registratie: September 2000
  • Laatst online: 08-04-2024
T-MOB schreef op vrijdag 23 april 2010 @ 15:29:
[...]

En het lek is dan dat die user-agent en het session-id niet werd escaped? Anders zie ik het probleem niet zo...
FTFY. Ook al worden session-id's door je appserver uitgedeeld, dan nog is het een kleine moeite om ze aan te passen. Cookies zijn cookies.

Computer Science: describing our world with boxes and arrows.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
T-MOB schreef op vrijdag 23 april 2010 @ 15:29:
[...]

En het lek is dan dat die user-agent niet werd escaped? Anders zie ik het probleem niet zo...
Alle drie zijn door de gebruiker van je site aan te passen en moeten dus geescaped worden voor gebruik in een query.

Verder kun je deze:
PHP:
1
$id = $_COOKIE['PHPSESSID'];


Beter vervangen door:
PHP:
1
$id = $_COOKIE[session_name()];


Of nog beter misschien, vervangen door:
PHP:
1
$id = session_id();


Want een session_id hoeft niet per se in een cookie te zitten, je kunt hem ook meegeven als GET parameter (wat realiteit wordt als nieuws: Cookies mogen volgend jaar alleen na toestemming internetter werkelijkheid wordt).

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 02-10 09:47
Het was inderdaad zo dat alle drie niet werden geescaped. Verder is het een systeem dat al wat jaren oud was. Geschreven ten tijde van PHP4. Neemt niet weg dat dit er toen ook niet in mocht zitten.

Verder moet ik nog zien of dat nieuwsbericht er door komt.

Acties:
  • 0 Henk 'm!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 16-07 13:47
De echte WTF is eerder dat er blijkbaar geen geparametriseerde queries worden gebruikt, anders was er geen lek.

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 28-09 19:33

Sebazzz

3dp

C#:
1
2
3
public static object Nothing(this object obj) {
   return obj;
}
Code van klasgenoot. Reden was dat je dan op specifieke plekken met één klik een breakpoint kwijt kan :p
Gebruik dan gewoon de feature van je IDE.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

Verwijderd

Sommige mensen maken hele mooie layouts in tables, da's bagger en dat is inmiddels geen plaatsje meer waard in dit topic.. Maar nu heb je veel mensen die zeggen dat je geen tables moet gebruiken, sommige mensen nemen dit iets te letterlijk en maken dergelijke constructies om alsnog een tabel te weergeven:

HTML:
1
2
3
4
5
6
<ul class="table">
   <li class="header"><span class="colA">A</span> ... enz ... <span class="colZ">Z</span></li>
   <li><span class="colA">A</span> ... enz ... <span class="colZ">Z</span></li>
   <li><span class="colA">A</span> ... enz ... <span class="colZ">Z</span></li>
   <li><span class="colA">A</span> ... enz ... <span class="colZ">Z</span></li>
</ul>

:r

Het gaat in dit geval gewoon om data, dus hier was een table dan weer wél op z'n plaats geweest... En om het nog leuker te maken.... Er zaten streepjes tussen de kolommen, alleen veranderde die niet mee op 't moment dat je de maten aanpast... Guess what,.. een background images met de streepjes! :')

Bleh, ranzig zeg... :+

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 28-09 19:33

Sebazzz

3dp

Net zoals die mensen die div's en spans in elkaar stacken en display: table-cell meegeven :+

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

Verwijderd

Sebazzz schreef op vrijdag 23 april 2010 @ 22:39:
Net zoals die mensen die div's en spans in elkaar stacken en display: table-cell meegeven :+
Haha ja, het viel me nog mee dat dat niet gebruikt werd. :+

Acties:
  • 0 Henk 'm!

Verwijderd

Sebazzz schreef op vrijdag 23 april 2010 @ 22:39:
Net zoals die mensen die div's en spans in elkaar stacken en display: table-cell meegeven :+
Het kan nog erger! In het zelfde project als de vorige post, sterker nog; op dezelfde pagina, wordt er nog iets moois gebruikt... Ik zag het in eerste instantie over het hoofd omdat het er op 't eerste gezicht heel normaal uit ziet ten opzichte van de eerder gepost code... :+

Komt ie dan he:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<table>
    <caption>titeltje</caption>
    <tr>
        <td class="a">a</td>
        <td class="b">b</td>
        <td class="c">c</td>
    </tr>
    <tr>
        <td class="a">a</td>
        <td class="b">b</td>
        <td class="c">c</td>
    </tr>
</table>


Nu zou je denken "Daar is toch niks mis mee!?", aangezien het data is die in een table gegooid wordt.. :Y Dat was ook mijn eerste gedachte, maar niks is in dit project wat het lijkt, ook in dit geval:
Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
tr
{
    display: inline;
    float: left;
    height: 20px;
    width: 200px;
}
td.a
{
    display: inline;
    float: left;
    height: 20px;
    width: 50px;
    background: url('tableRow.jpg');
}
td.b
{
    display: inline;
    float: left;
    height: 20px;
    width: 50px;
    background: url('tableRow.jpg');
}
td.c
{
    display: inline;
    float: left;
    height: 20px;
    width: 100px;
    background: url('tableRow.jpg');
}


.... wat moet ik daar nou nog over zeggen? :+ Ohja, de background is een border, waardoor het aanpassen van de breedtes nóg makkelijker gemaakt wordt... :9

Mis ik iets geniaals? :D

Acties:
  • 0 Henk 'm!

  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 02-10 10:10
ik kom helaas te vaak veels te slechte code tegen,zal dit draadje in het achterhoofd houden..
wel kunne lachen om sommige voorbeelden!

Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

Verwijderd schreef op maandag 26 april 2010 @ 21:54:
[...]
.... wat moet ik daar nou nog over zeggen? :+ Ohja, de background is een border, waardoor het aanpassen van de breedtes nóg makkelijker gemaakt wordt... :9

Mis ik iets geniaals? :D
Ik heb die even zelf snel in html gegoten omdat ik me niet kon voorstellen wat daar visueel uitkwam :'(
Het erge is dat hij geen rekening hield met de dikte van zijn border, anders had het resultaat er als een doodnormale tabel uitgezien...of was dit juist met opzet? God knows... }:O

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


Acties:
  • 0 Henk 'm!

Verwijderd

Boeboe schreef op dinsdag 27 april 2010 @ 00:15:
[...]


Ik heb die even zelf snel in html gegoten omdat ik me niet kon voorstellen wat daar visueel uitkwam :'(
Het erge is dat hij geen rekening hield met de dikte van zijn border, anders had het resultaat er als een doodnormale tabel uitgezien...of was dit juist met opzet? God knows... }:O
Ja, het ziet er gewoon uit als een normale table, zowel op de pagina als in de html... :+ Ik heb al vele "nuttige" smerige oplossingen gezien, maar ik kan me hier gewoon geen enkel nut voor verzinnen, wie wel? :*) Ik hoop nog steeds op een logische verklaring, dat ik iets over het hoofd zie... :9

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 16:55
Woy schreef op woensdag 21 april 2010 @ 16:55:
Implementeren de resulterende objecten van:
quiz.getPreloader()
quiz.getLargeImage()
quiz.getSmallImage()
Niet gewoon eenzelfde interface? Dan is het eenvoudig te refactoren naar
Java:
1
2
3
4
5
6
public void saveAllCommerce(QuizDetails quiz, Connection connection) throws SQLException
{
    doSomeWithSomeObject(quiz, connection, quiz.getPreloader(), CommerceData.TYPE_PRELOADER );
    doSomeWithSomeObject(quiz, connection, quiz.getLargeImage(), CommerceData.TYPE_LARGEIMAGE );
    doSomeWithSomeObject(quiz, connection, quiz.getSmallImage(), CommerceData.TYPE_SMALLIMAGE );
}
Yup, maar ik ben te lui om te gaan refactoren, ;p. Alhoewel ik er vandaag weer even mee bezig ben.

Edit: Of toch niet. Heb van CommerceData.TYPE_ETC maar even een enum gemaakt, en de commerce velden in Quiz maar generiek gemaakt (zodat in de toekomst ook andere vormen van commercie toegevoegd kunnen worden). Veel beter zo.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public void saveAllCommerce(QuizDetails quiz, Connection connection) throws SQLException {
        for (CommerceData data : quiz.getCommerce()) {
            // only save the commerce if a media ID (read: an image) has been uploaded.
            if (isNotBlank(data.getMediaId())) {
                if (data.hasId()) {
                    CommerceDAO.update(connection, data);
                } else {
                    CommerceDAO.insert(connection, data);
                    data.setId(CommerceDAO.getLastInsertedId(connection));
                }
            // delete the commerce if the media ID is missing but it was persisted.
            // Note this is an exceptional case (such as a JCR corruption)
            // and this is only there to fix that corruption.
            } else if (data.getId() > 0) {
                CommerceDAO.delete(connection, data);
            }
        }
    }



Edit #zoveel / subject change: Waarom krijg ik steeds meer een hekel aan defensief programmeren, dwz waarom vindt ik het nog steeds altijd nodig? Zie:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public String getImageUrl(String imageId) {
    if (isBlank(imageId)) {
        LOG.log(Level.FINE, "Returning empty image URL, no image ID passed");
        return StringUtils.EMPTY;
    }

    ImageEntity i = (ImageEntity) entityManager.find(new JcrWmId(imageId));

    if (i == null) {
        LOG.log(Level.WARNING, "No ImageEntity found for ID " + imageId);
        return StringUtils.EMPTY;
    }

    String imageUrl = i.getImage().getURL("");
    if (sessionManager != null && sessionManager.getActiveSession() != null) {
        imageUrl = "http://" + sessionManager.getActiveSession().getContext().getWebsite().getHostName() + imageUrl;
    } else {
        LOG.log(Level.WARNING, "Unable to get full image URL: SessionManager or active session is null");
    }

    return imageUrl;
}


Kent iemand voor bovenstaand misschien alternatieven?

[ Voor 65% gewijzigd door YopY op 27-04-2010 12:51 ]


Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 16:14
YopY schreef op dinsdag 27 april 2010 @ 11:56:
[...]
Edit #zoveel / subject change: Waarom krijg ik steeds meer een hekel aan defensief programmeren, dwz waarom vindt ik het nog steeds altijd nodig? Zie:

[...]

Kent iemand voor bovenstaand misschien alternatieven?
Je kan ook gewoon programmeren volgens contract (je verwacht dus correcte data in een klasse). Het nadeel is dan weer wel dat je je controles van de data ergens anders moet gaan doen. Nu ja, op zich, als het om interne data gaat, dwing je sowieso al een goede vorm af... het probleem zit 'em dan enkel om user input (dus files, GUI input, etc) juist af te handelen.

[ Voor 31% gewijzigd door Styxxy op 27-04-2010 18:06 ]


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 16:55
Styxxy schreef op dinsdag 27 april 2010 @ 18:06:
[...]


Je kan ook gewoon programmeren volgens contract (je verwacht dus correcte data in een klasse). Het nadeel is dan weer wel dat je je controles van de data ergens anders moet gaan doen. Nu ja, op zich, als het om interne data gaat, dwing je sowieso al een goede vorm af... het probleem zit 'em dan enkel om user input (dus files, GUI input, etc) juist af te handelen.
Ja, zo zou het wel in een ideale situatie zijn. Helaas werk ik in dit geval met een library van de ontwikkelaars van het CMS die nogal vaak de neiging hebben om null terug te geven. Die EntityManager.find() zijn implementatie bijvoorbeeld, stukje daaruit (geknipt en wat namen veranderd, ik denk niet dat het officieel toegestaan is om zo gedecompliede code te copy / pasten):

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*     */   public Object find(SomeId primaryKey, SomeObject context)
/*     */   {
/*  98 */     Object entityFromCache = getEntityCache().getEntityFromCache(primaryKey);
/*  99 */     if (entityFromCache != null) { // null check. Niet eens heel erg verkeerd hier, maar zou ook vervangen kunnen worden met een hasKey() oid.
/* 100 */       return entityFromCache;
/*     */     }
/*     */ 
/* 104 */     EntityDomain entityDomain = getEntityDomain(primaryKey.getClass().getName());
/* 105 */     if (entityDomain == null) { // null controle, getEntityDomain geeft dus ook null terug
/* 106 */       LOG.log(Level.WARNING, "No EntityDomain known id class " + primaryKey.getClass().getName());
/* 107 */       return null; // return null -_-
/*     */     }
/*     */ 
/* 111 */     Object entity = entityDomain.find(primaryKey, context);
/*     */ 
/* 114 */     if (entity != null) { // nog een null controle
/* 115 */       getEntityCache().addEntityToCache(entity);
/*     */     }
/*     */ 
/* 120 */     return entity; // entity kan ook null zijn als entityDomain.find null teruggeeft
/*     */   }


Eerder in dit topic had ik het over NullObject, nu zal dat misschien niet echt een goed en bruikbaar design pattern zijn... maar ik wordt toch lichtelijk onpasselijk door al die null controles.

Edit: Bijgewerkt zoals ik het liever zou willen zien.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public Object find(SomeId primaryKey, SomeObject context) {
        // controleer of object in cache staat
        if (getEntityCache().contains(primaryKey)) {
            return getEntityCache.getEntityFromCache(primaryKey);
        }
        EntityDomain entityDomain = getEntityDomain(primaryKey.getClass().getName());
        // neem aan dat getEntityDomain nooit null is. Zo ja, een NullPointerException
        // ipv een WARNING, null terugsturen, en een null controle in de aanroeper.
        Object entity = entityDomain.find(primaryKey, context);
        // addEntityToCache doet niets als entity null is.
        getEntityCache().addEntityToCache(entity);
        // entity kan hier wel null zijn indien er niks gevonden is.
        // Weet nog niet hoe je dat op zou kunnen lossen.
        return entity;
    }


En het overdadige gebruik van Integer ipv gewoon int, aangezien er maar knap weinig gebruik gemaakt wordt van de functies die in het Integer object gebruikt worden, én er overal null-controles zijn op het Integer object gevolgd door een >0 check.

Java:
1
2
Integer ding = doeIets();
if (ding != null && ding > 0) { // doe iets }


-____-

Nu heb ik zelf een class gemaakt waar helemaal geen nulls teruggegeven worden, die effectief 'dichtgetimmerd' is - nulls komen er niet in (en als die opgestuurd worden, worden ze vervangen met een default waarde) en nulls komen er niet uit. Heel defensief, is ook meer een experiment.

Java:
1
2
3
4
5
6
7
8
9
10
    private void setQuestionAmount(int qamount) {
        if (qamount <= 0) {
            this.questionAmount = NO_QUESTION_AMOUNT;
        } else if (qamount > MAX_QUESTION_AMOUNT) {
            LOG.log(Level.WARNING, "Attempted to set question amount > " + qamount + ", defaulted to " + MAX_QUESTION_AMOUNT);
            this.setMaxQuestionAmount();
        } else {
            this.questionAmount = qamount;
        }
    }


...en ik praat te veel, ik hou me weer even stil. Of moet ik over dit soort dingen gaan bloggen?

[ Voor 12% gewijzigd door YopY op 28-04-2010 09:47 ]


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:43

Haan

dotnetter

Het bedrijf waar ik werk heeft een paar jaar geleden een portal laten ontwikkelen in India, gebaseerd op SharePoint. Het hele project dat uiteindelijk is opgeleverd is eigenlijk een grote WTF, maar dat terzijde :P

Mijn WTF moment had ik toen mij gevraagd werd om een bug op te sporen. Er moeten bestanden geüpload kunnen worden, maar ze kwamen niet meer aan. Nergens een logmelding oid te vinden natuurlijk :') De eerste WTF was dat foutmeldingen naar een label op het scherm van de gebruiker werden weggeschreven. De tweede WTF was dat alle schermen automatisch gesloten worden na submitten, dus je hebt nooit de kans om überhaupt een foutmelding te lezen |:( |:(
In het hele project wordt verder nergens iets gelogd, en try/catch blokken met lege catch zijn ook niet zeldzaam aanwezig, dus je bent gewoon vreselijk aan de beurt als er iets aan de hand is zoals nu.
Ik vraag me serieus af hoe het kan dat dit project ooit is geaccepteerd.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 23:46
Als het maar goedkoop is he :|

Acties:
  • 0 Henk 'm!

  • Tubby
  • Registratie: Juni 2001
  • Laatst online: 18:37

Tubby

or not to be

YopY schreef op woensdag 28 april 2010 @ 09:41:
[...]
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public Object find(SomeId primaryKey, SomeObject context) {
        // controleer of object in cache staat
        if (getEntityCache().contains(primaryKey)) {
            return getEntityCache.getEntityFromCache(primaryKey);
        }
        EntityDomain entityDomain = getEntityDomain(primaryKey.getClass().getName());
        // neem aan dat getEntityDomain nooit null is. Zo ja, een NullPointerException
        // ipv een WARNING, null terugsturen, en een null controle in de aanroeper.
        Object entity = entityDomain.find(primaryKey, context);
        // addEntityToCache doet niets als entity null is.
        getEntityCache().addEntityToCache(entity);
        // entity kan hier wel null zijn indien er niks gevonden is.
        // Weet nog niet hoe je dat op zou kunnen lossen.
        return entity;
    }


En het overdadige gebruik van Integer ipv gewoon int, aangezien er maar knap weinig gebruik gemaakt wordt van de functies die in het Integer object gebruikt worden, én er overal null-controles zijn op het Integer object gevolgd door een >0 check.

Java:
1
2
Integer ding = doeIets();
if (ding != null && ding > 0) { // doe iets }


-____-

Nu heb ik zelf een class gemaakt waar helemaal geen nulls teruggegeven worden, die effectief 'dichtgetimmerd' is - nulls komen er niet in (en als die opgestuurd worden, worden ze vervangen met een default waarde) en nulls komen er niet uit. Heel defensief, is ook meer een experiment.

Java:
1
2
3
4
5
6
7
8
9
10
    private void setQuestionAmount(int qamount) {
        if (qamount <= 0) {
            this.questionAmount = NO_QUESTION_AMOUNT;
        } else if (qamount > MAX_QUESTION_AMOUNT) {
            LOG.log(Level.WARNING, "Attempted to set question amount > " + qamount + ", defaulted to " + MAX_QUESTION_AMOUNT);
            this.setMaxQuestionAmount();
        } else {
            this.questionAmount = qamount;
        }
    }


...en ik praat te veel, ik hou me weer even stil. Of moet ik over dit soort dingen gaan bloggen?
Ik vind de volgende constructie altijd wat netter met zelf beheerde caches:
Java:
1
2
3
4
5
6
7
8
9
10
    // controleer of object in cache staat, zo niet adden
        if (!getEntityCache().contains(primaryKey)) 
        {
            EntityDomain entityDomain = getEntityDomain(primaryKey.getClass().getName());
            Object entity = entityDomain.find(primaryKey, context);
            getEntityCache().addEntityToCache(entity);
        }
        // return object in cache
        return getEntityCache.getEntityFromCache(primaryKey);
    }

Altijd eerst even checken of de key in de cache zit en added als dit dit niet zo is, om vervolgens daarna altijd de waarde uit de cache te returnen. Verder ben ik het wel met je eens dat in sommige gevallen je juist zou willen dat er een npe komt bij null waarden. Dat is wel zo duidelijk als je een stacktrace leest :)

Verder leent de setQuestionAmount zich uitstekend voor Math.min en Math.max :) (los van de (waarschijnlijk) wenselijke log warning)

tubby.nl - Artes Moriendi - q1 - bf1942 - WoT - pubg - LinkedIN


Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 16:14
YopY schreef op woensdag 28 april 2010 @ 09:41:
[...]
Ja, zo zou het wel in een ideale situatie zijn. Helaas werk ik in dit geval met een library van de ontwikkelaars van het CMS die nogal vaak de neiging hebben om null terug te geven.

[...]

Edit: Bijgewerkt zoals ik het liever zou willen zien.

[...]
Ai, dat is krap lastig met zo'n library.

Persoonlijk ben ik eerder van van (pseudo-code):
code:
1
public boolean find(SomeId primaryKey, SomeObject context, out SomeObjectToReturn returnObjct)

Ik vind dat eigenlijk nog een properdere oplossing dan een null te gaan returnen (uiteraard als find() false geeft, dan is returnObjct ook null).

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 16:55
[b][message=33907563,noline]Ik vraag me serieus af hoe het kan dat dit project ooit is geaccepteerd.
Gebrekkige kwaliteitscontrole, slechts gebruikers die het geheel aan de voorkant 'testen' door er even doorheen te klikken... d'r zijn genoeg redenen te bedenken. Meestal is het gewoon luiheid of gierigheid.

Als ik ooit (mede) verantwoordelijk wordt voor het outsourcen van een project ga ik flink de code nazi uithangen.
quote: Tubby
Ik vind de volgende constructie altijd wat netter met zelf beheerde caches:
Eensch, alhoewel je hierbij wel altijd die cache aanroept (als je echt kritisch op performance bent, alhoewel dit bij een map eigenlijk marginaal is).
quote: Tubby
Verder leent de setQuestionAmount zich uitstekend voor Math.min en Math.max (los van de (waarschijnlijk) wenselijke log warning)
Ik haat wiskunde, maar je hebt gelijk :+.

Java:
1
this.questionAmount = Math.max(Math.min(qamount, MAX_QUESTION_AMOUNT), NO_QUESTION_AMOUNT);


Mogelijk is dit fout, het ontbreekt me nog aan rekenkundig inzicht.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Styxxy schreef op woensdag 28 april 2010 @ 13:14:
[...]

Ai, dat is krap lastig met zo'n library.

Persoonlijk ben ik eerder van van (pseudo-code):
code:
1
public boolean find(SomeId primaryKey, SomeObject context, out SomeObjectToReturn returnObjct)

Ik vind dat eigenlijk nog een properdere oplossing dan een null te gaan returnen (uiteraard als find() false geeft, dan is returnObjct ook null).
Waarom eigelijk?

Wat is er mis met null returnen als er niets is gevonden, en iets in een out parameter steken als er iets gevonden?

Qua code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
out SomeObjectToReturn result = null;
if(find(..., ..., out result))
{
   // doe iets met result
}
else
{
   // niets gevonden
}

// of

SomeObjectToReturn result = find(..., ...);

if(null != result)
{
   // doe iets met result
}
else
{
   // niets gevonden
}


Dan toch liever de 2de :9

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 16:14
Snake schreef op woensdag 28 april 2010 @ 13:20:
[...]

Waarom eigelijk?

Wat is er mis met null returnen als er niets is gevonden, en iets in een out parameter steken als er iets gevonden?
Er is niets mis mee :), kwestie van voorkeur. Beiden zijn uiteraard even goed.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:43

Haan

dotnetter

Microsoft hanteert als vuistregel dat er null wordt gereturned in situaties waar het te verwachten is dat er weleens iets niet gevonden kan worden. Bijv. een XPATH query op een stukje XML. Als je niet verwacht dat iets null gaat zijn, bijv. bij int.Parse, wordt een exception gegooid, of gebruik je de constructie met out parameter (int.TryParse).

Die vuistregel zou je in je eigen code ook kunnen hanteren. Zolang maar goed gedocumenteerd is wat het gedrag is :)

[ Voor 6% gewijzigd door Haan op 29-04-2010 08:44 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Ik kwam gisteren deze (nieuwe) code tegen:
PHP:
1
2
3
4
5
$aProducts = array_keys($aBasket);
foreach ($aProducts as &$sKey) { 
    $sKey = (int)$sKey; // haal alle extra info uit de key 
} 
unset($sKey);


Na enig zoekwerk kwam ik erachter dat die keys (ongeveer) zo opgebouwd zijn: productid{num}anderid
En hier was alleen het productid noodzakelijk (deze lijst komt bij de browser vandaan) voor verdere verwerking. Dus werd er gecast naar een int zodat de rest weg viel.

Aangezien ik ook code zoveel mogelijk probeer te checken voordat het livegezet/getest wordt las ik hier eerst een stuk code wat niks deed, maar na goed kijken zag ik dat de $sKey een reference was en dat ik tevens het stukje commentaar verkeerd las :P

Uiteraard direct de betreffende devver gebeld en gevraagd hoe dit nu werkte (wist eerst ook niet dat die keys zo opgebouwd waren) en vervolgens heeft hij het prima verbeterd (vooral een beter stuk commentaar), maar ik wilde het jullie niet onthouden :)

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 16:55
Styxxy schreef op woensdag 28 april 2010 @ 13:14:
Persoonlijk ben ik eerder van van (pseudo-code):
code:
1
public boolean find(SomeId primaryKey, SomeObject context, out SomeObjectToReturn returnObjct)

Ik vind dat eigenlijk nog een properdere oplossing dan een null te gaan returnen (uiteraard als find() false geeft, dan is returnObjct ook null).
Maar krijg je dan niet dat je in je returnObject (indien die 'gevuld' moet worden met gegevens zoals ik denk dat je bedoelt) ook logica in moet vullen dat aangeeft dat hij 'leeg' is? (dwz nullobject of een variant daarop)
quote: Snake
Wat is er mis met null returnen als er niets is gevonden, en iets in een out parameter steken als er iets gevonden?
De null controle, :+. Op laatst ga je ook echt alles op null controleren, en dat wordt oplaatst nogal storend - vindt ik tenminste. Als je ervanuit kunt gaan dat een methode nooit null teruggeeft, maar bijvoorbeeld een lege lijst, kun je minder defensief programmeren en met minder code toe. Zie ook:

Java:
1
2
3
4
5
6
List<SomeObject> result = getSomeObject(param);
if (result != null) {
  for (SomeObject o : result) {
    // iets
  }
}


versus

Java:
1
2
3
for (SomeObject o : getSomeObject(param) {
  // iets
}


Daarom probeer ik methodes die een List terugsturen ook altijd als zodanig te implementeren:

Java:
1
2
3
4
5
6
7
function List<SomeObject> getSomeObject(int param) {
  List<SomeObject> result = Collections.<SomeObject>emptyList();
  if (param > 0) {
    result = someDao.findById(param);
  }
  return result;
}


bijvoorbeeld. En natuurlijk in de documentatie aangeven dat 'ie nooit null teruggeeft.

Acties:
  • 0 Henk 'm!

  • d4nn7
  • Registratie: Mei 2009
  • Laatst online: 15-07 21:37
Een tijdje terug kwam ik dit tegen:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
void Color::colortransform(int colorcode,float shade)
{
  float redc,greenc,bluec;
    if(colorcode == 0)
    {
      redc = colorcodered[0];
      greenc = colorcodegreen[0];
      bluec = colorcodeblue[0];
    }
    else if(colorcode == 1)
      {
        redc = colorcodered[1];
        greenc = colorcodegreen[1];
        bluec = colorcodeblue[1];
      }
    else if(colorcode == 2)
      {
        redc = colorcodered[2];
        greenc =  colorcodegreen[2];
        bluec = colorcodeblue[2];
      }
    else if(colorcode == 3)
      {
        redc = colorcodered[3];
        greenc = colorcodegreen[3];
        bluec = colorcodeblue[3];
      }
    else if(colorcode == 4)
      {
        redc = colorcodered[4];
        greenc = colorcodegreen[4];
        bluec = colorcodeblue[4];
      }
    else if(colorcode == 5)
      {
        redc = colorcodered[5];
        greenc = colorcodegreen[5];
        bluec =  colorcodeblue[5];
      }
    else if(colorcode == 6)
      {
        redc = colorcodered[6];
        greenc = colorcodegreen[6];
        bluec =  colorcodeblue[6];
      }
    else if(colorcode == 7)
      {
        redc = colorcodered[7];
        greenc = colorcodegreen[7];
        bluec = colorcodeblue[7];
      }
      
    else if(colorcode == 8)
      {
        redc =  colorcodered[8];
        greenc = colorcodegreen[8];
        bluec = colorcodeblue[8];
      }
           
    if ((redc+shade) > 1.0f)
    {
      float scalecolor = (redc+shade) - 1.0f;
      redc-=scalecolor;
    }
    if ((greenc+shade) > 1.0f)
    {
      float scalecolor = (greenc+shade) - 1.0f;
      greenc-=scalecolor;
    }
    if ((bluec+shade) > 1.0f)
    {
      float scalecolor = (bluec+shade) - 1.0f;
      bluec-=scalecolor;
    }
    glColor3f(redc+shade,greenc+shade,bluec+shade);
}

Het ergste is nog wel dat in dezelfde source file nog 5 kopieën van deze functie staan, waarbij alleen de laatste paar regels iets anders zijn...

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-10 23:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Tjezus dat gaat echt nergens over. If I may...
C++:
1
2
3
4
5
6
7
void Color::colortransform(int colorcode,float shade) 
{ 
    glColor3f(
        std::min(colorcodered[colorcode]+shade, 1.f),
        std::min(colorcodegreen[colorcode]+shade, 1.f),
        std::min(colorcodeblue[colorcode]+shade, 1.f));
}


Ik bedoel, hoe ingewikkeld ook
C++:
1
2
3
4
5
    if ((redc+shade) > 1.0f) 
    { 
      float scalecolor = (redc+shade) - 1.0f; 
      redc-=scalecolor; 
    } 

Als hij groter is dan 1, dan reken we uit hoeveel hij erover is gegaan, en dat trekken we er vanaf. Ja, drol, zet 'm dan gewoon op 1! En dan hebben we het nog niet eens over de compleet foute benaming van "scalecolor" (da's een bias, geen scale)

[ Voor 41% gewijzigd door .oisyn op 29-04-2010 11:57 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

.oisyn schreef op donderdag 29 april 2010 @ 11:54:
Tjezus dat gaat echt nergens over. If I may...
C++:
1
2
3
4
5
6
7
void Color::colortransform(int colorcode,float shade) 
{ 
    glColor3f(
        std::min(colorcodered[colorcode]+shade, 1.f),
        std::min(colorcodegreen[colorcode]+shade, 1.f),
        std::min(colorcodeblue[colorcode]+shade, 1.f));
}
Alleen nog even de check toevoegen dat colorcode tussen 0 en 8 moet zijn :P

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-10 23:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

En in dat geval dan zeker ook nog ongeinitaliseerde floats naar glColor() sturen, zoals de originele code ook doet? Ergo, m'n code is gewoon correct - zijn code heeft UB (undefined behaviour) als colorcode niet tussen 0 en 8 zit, en de mijne ook :). In beide gevallen kan je drive geformatteerd worden ;). De code doet dan ook vermoeden dat colorcode altijd tussen 0 en 8 ligt.

[ Voor 22% gewijzigd door .oisyn op 29-04-2010 12:25 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • d4nn7
  • Registratie: Mei 2009
  • Laatst online: 15-07 21:37
Inderdaad, ik zou zeggen, gebruik een assert() voor die colorcode, ware het niet dat degene die deze code heeft geschreven nooit een debug build maakt

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

.oisyn schreef op donderdag 29 april 2010 @ 12:23:
De code doet dan ook vermoeden dat colorcode altijd tussen 0 en 8 ligt.
Dat mag ik hopen :+ :P

Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 19:12

Salandur

Software Engineer

d4nn7 schreef op donderdag 29 april 2010 @ 11:46:
Een tijdje terug kwam ik dit tegen:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
void Color::colortransform(int colorcode,float shade)
{
  float redc,greenc,bluec;
    if(colorcode == 0)
    {
      redc = colorcodered[0];
      greenc = colorcodegreen[0];
      bluec = colorcodeblue[0];
    }
    else if(colorcode == 1)
      {
        redc = colorcodered[1];
        greenc = colorcodegreen[1];
        bluec = colorcodeblue[1];
      }
    else if(colorcode == 2)
      {
        redc = colorcodered[2];
        greenc =  colorcodegreen[2];
        bluec = colorcodeblue[2];
      }
    else if(colorcode == 3)
      {
        redc = colorcodered[3];
        greenc = colorcodegreen[3];
        bluec = colorcodeblue[3];
      }
    else if(colorcode == 4)
      {
        redc = colorcodered[4];
        greenc = colorcodegreen[4];
        bluec = colorcodeblue[4];
      }
    else if(colorcode == 5)
      {
        redc = colorcodered[5];
        greenc = colorcodegreen[5];
        bluec =  colorcodeblue[5];
      }
    else if(colorcode == 6)
      {
        redc = colorcodered[6];
        greenc = colorcodegreen[6];
        bluec =  colorcodeblue[6];
      }
    else if(colorcode == 7)
      {
        redc = colorcodered[7];
        greenc = colorcodegreen[7];
        bluec = colorcodeblue[7];
      }
      
    else if(colorcode == 8)
      {
        redc =  colorcodered[8];
        greenc = colorcodegreen[8];
        bluec = colorcodeblue[8];
      }
           
    if ((redc+shade) > 1.0f)
    {
      float scalecolor = (redc+shade) - 1.0f;
      redc-=scalecolor;
    }
    if ((greenc+shade) > 1.0f)
    {
      float scalecolor = (greenc+shade) - 1.0f;
      greenc-=scalecolor;
    }
    if ((bluec+shade) > 1.0f)
    {
      float scalecolor = (bluec+shade) - 1.0f;
      bluec-=scalecolor;
    }
    glColor3f(redc+shade,greenc+shade,bluec+shade);
}

Het ergste is nog wel dat in dezelfde source file nog 5 kopieën van deze functie staan, waarbij alleen de laatste paar regels iets anders zijn...
Wellicht compileert dit tot iets wat sneller draait? Behalve het eind misschien. Ik kan me zo voorstellen dat dit compileert naat iets van constanten, aangezien er geen lookup in de array's gedaan wordt.

blijft een beetje een vreemd gezicht en premature optimalisatie

Assumptions are the mother of all fuck ups | iRacing Profiel


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-10 23:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Salandur schreef op donderdag 29 april 2010 @ 12:53:
aangezien er geen lookup in de array's gedaan wordt.
Jij zier hier geen lookup in arrays?
C++:
1
2
3
4
5
6
    if(colorcode == 0) 
    { 
      redc = colorcodered[0]; 
      greenc = colorcodegreen[0]; 
      bluec = colorcodeblue[0]; 
    } 

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 19:12

Salandur

Software Engineer

.oisyn schreef op donderdag 29 april 2010 @ 12:59:
[...]

Jij zier hier geen lookup in arrays?
C++:
1
2
3
4
5
6
    if(colorcode == 0) 
    { 
      redc = colorcodered[0]; 
      greenc = colorcodegreen[0]; 
      bluec = colorcodeblue[0]; 
    } 
Een goede compiler vervangt de lookup misschien door een constante.
De zin had moeten zijn: 'dan worden er geen array lookups meer uitgevoerd'. Maar goed, ben niet zo heel erg thuis in C++ en compilers.

Assumptions are the mother of all fuck ups | iRacing Profiel


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-10 23:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

En waarom zou die compiler dat dan niet kunnen met een index? En vergeet daarnaast niet de hele if-boom die hij door moet lopen om die index te checken. Nee, het is niet echt bepaald een optimalisatie :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Zucht......het vakkundig 'verhelpen' van een 'invalid conversion from char * to const char* .....' warning

C:
1
2
3
4
5
6
char *texts[NUM_TEXT] =
{
  (char*)"constant blabla",
  (char*)"blabla",
  (char*)"blabla,
}

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
.oisyn schreef op donderdag 29 april 2010 @ 11:54:
En dan hebben we het nog niet eens over de compleet foute benaming van "scalecolor" (da's een bias, geen scale)
Inderdaad doe het dan zo
C++:
1
2
3
4
5
    if ((redc+shade) > 1.0f) 
    { 
      float scalecolor = 1.0f/(redc+shade); 
      redc*=scalecolor; 
    } 

Dan klopt de naamgeving wel :+

edit:

Al heeft de code dan niet hetzelfde resultaat :$

Ik bedoelde meer zoiets ;)
C++:
1
2
3
4
5
6
7
bluec += shade;
if (bluec > 1.0f) 
    { 
      float scalecolor = 1.0f / bluec; 
      bluec*=scalecolor; 
    } 
    glColor3f(redc,greenc,bluec);

[ Voor 25% gewijzigd door Woy op 06-05-2010 15:04 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-10 23:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

EddoH schreef op donderdag 06 mei 2010 @ 14:50:
Zucht......het vakkundig 'verhelpen' van een 'invalid conversion from char * to const char* .....' warning

C:
1
2
3
4
5
6
char *texts[NUM_TEXT] =
{
  (char*)"constant blabla",
  (char*)"blabla",
  (char*)"blabla,
}
Tja, een string literal is nou eenmaal impliciet converteerbaar naar char*, die warning is dus stuk :+

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 01-10 21:01

Matis

Rubber Rocket

Ik weet niet of het onder slechte programmeervoorbeelden valt, maar wat een slechte site: http://lijst17.nl/

Dat moet dan ons land gaan besturen. Een WiP welke al publiekelijk is en nog net niet met Lorem Ipsum gevuld staat.

Kansloos!

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • korgakos
  • Registratie: April 2008
  • Laatst online: 12-06 19:59
Matis schreef op vrijdag 07 mei 2010 @ 12:17:
Ik weet niet of het onder slechte programmeervoorbeelden valt, maar wat een slechte site: http://lijst17.nl/.....
staat ook nog mooi in hun verkiezingsprogramma:
7 mei 2010.
Voorlopige versie: Opmaak en voorblad worden nog binnen 48 uur onder
handen genomen...................
Het is ons een eer en genoegen om na ampel beraad
:+

edit:
@hieronder over ampel, ai big failure van mijn kant uit, weer iets geleerd...

[ Voor 32% gewijzigd door korgakos op 07-05-2010 13:23 ]


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 23:13

Acties:
  • 0 Henk 'm!

Verwijderd

Tsja. Het past wel bij studenten: dingen opleveren die eigenlijk nog helemaal niet af zijn :P

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op vrijdag 07 mei 2010 @ 12:43:
Tsja. Het past wel bij studenten: dingen opleveren die eigenlijk nog helemaal niet af zijn :P
Een beetje student had het pas 8 Juni 23:59 opgeleverd :+ ( Of liever nog later )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Kwam deze laatst tegen toen ik een site van asp.net 1.1 naar asp.net 3.5 aan het omzetten was. Ik had toen volgens mij nog nooit gehoord van dingen als datetime formats.


Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Shared Function ReturnDagText(ByVal Datum As Date) As String
        Dim Maand As String
        Dim Result As String

        Select Case Datum.Month
            Case 1
                Maand = "Januari"
            Case 2
                Maand = "Februari"
            Case 3
                Maand = "Maart"
            Case 4
                Maand = "April"
            Case 5
                Maand = "Mei"
            Case 6
                Maand = "Juni"
            Case 7
                Maand = "Juli"
            Case 8
                Maand = "Augustus"
            Case 9
                Maand = "September"
            Case 10
                Maand = "Oktober"
            Case 11
                Maand = "November"
            Case 12
                Maand = "December"
        End Select

        Dim Dag As String
        Select Case Datum.DayOfWeek
            Case DayOfWeek.Monday
                Dag = "Maandag"
            Case DayOfWeek.Tuesday
                Dag = "Dinsdag"
            Case DayOfWeek.Wednesday
                Dag = "Woensdag"
            Case DayOfWeek.Thursday
                Dag = "Donderdag"
            Case DayOfWeek.Friday
                Dag = "Vrijdag"
            Case DayOfWeek.Saturday
                Dag = "Zaterdag"
            Case DayOfWeek.Sunday
                Dag = "Zondag"
        End Select
        
        Result = Dag & " " & Datum.Day & " " & Maand & " " & Datum.Year

        Return Result
    End Function


De code werd verder nergens meer gebruikt, maar altijd mooi om te zien hoe dom ik toen bezig was.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zolang het maar minimaal een 5,6 oplevert ja :X
offtopic:
Ik ben nooit geen studiepikkie geweest ofzo, maar alles <6.5 voelde voor mij altijd al als een onvoldoende :X Niet dat ik daarom minder onvoldoendes haalde dan anderen hoor :P

[ Voor 37% gewijzigd door RobIII op 07-05-2010 13:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Matis schreef op vrijdag 07 mei 2010 @ 12:17:
Ik weet niet of het onder slechte programmeervoorbeelden valt, maar wat een slechte site: http://lijst17.nl/

Dat moet dan ons land gaan besturen. Een WiP welke al publiekelijk is en nog net niet met Lorem Ipsum gevuld staat.

Kansloos!
Leuk plaatje ook bij Legaal maken van Softdrugs:

Afbeeldingslocatie: http://www.lijst17.nl/images/thumbs/softdrugs.jpg

Ziet er vooral positief uit, doen!

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

Verwijderd

Woy schreef op vrijdag 07 mei 2010 @ 12:48:
[...]

Een beetje student had het pas 8 Juni 23:59 opgeleverd :+ ( Of liever nog later )
Er is inderdaad altijd nog de herkansing! :z

Goed, voorzover mijn OT-bijdrage.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op vrijdag 07 mei 2010 @ 13:18:
Kwam deze laatst tegen toen ik een site van asp.net 1.1 naar asp.net 3.5 aan het omzetten was. Ik had toen volgens mij nog nooit gehoord van dingen als datetime formats.


Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Shared Function ReturnDagText(ByVal Datum As Date) As String
        Dim Maand As String
        Dim Result As String

        Select Case Datum.Month
            Case 1
                Maand = "Januari"
            Case 2
                Maand = "Februari"
            Case 3
                Maand = "Maart"
            Case 4
                Maand = "April"
            Case 5
                Maand = "Mei"
            Case 6
                Maand = "Juni"
            Case 7
                Maand = "Juli"
            Case 8
                Maand = "Augustus"
            Case 9
                Maand = "September"
            Case 10
                Maand = "Oktober"
            Case 11
                Maand = "November"
            Case 12
                Maand = "December"
        End Select

        Dim Dag As String
        Select Case Datum.DayOfWeek
            Case DayOfWeek.Monday
                Dag = "Maandag"
            Case DayOfWeek.Tuesday
                Dag = "Dinsdag"
            Case DayOfWeek.Wednesday
                Dag = "Woensdag"
            Case DayOfWeek.Thursday
                Dag = "Donderdag"
            Case DayOfWeek.Friday
                Dag = "Vrijdag"
            Case DayOfWeek.Saturday
                Dag = "Zaterdag"
            Case DayOfWeek.Sunday
                Dag = "Zondag"
        End Select
        
        Result = Dag & " " & Datum.Day & " " & Maand & " " & Datum.Year

        Return Result
    End Function


De code werd verder nergens meer gebruikt, maar altijd mooi om te zien hoe dom ik toen bezig was.
Kan volgens mij wel handig zijn als je dag- en maandnamen onafhankelijk van locale-settings wilt gebruiken. Ik heb althans nog nooit een mogelijkheid gevonden om in VBA in de formattering te specificeren dat het resultaat altijd in een specifieke taal (NL) moet zijn. Weet niet of dat in VB.Net wel wordt ondersteund?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 07 mei 2010 @ 14:07:
Weet niet of dat in VB.Net wel wordt ondersteund?
Dat wordt ondersteund ja ;) En volgens mij kan 't in VBA ook door de juiste lokale te setten "ergens" als ik me niet vergis.

[ Voor 20% gewijzigd door RobIII op 07-05-2010 14:12 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

CyCloneNL schreef op vrijdag 07 mei 2010 @ 13:36:
[...]


Leuk plaatje ook bij Legaal maken van Softdrugs:

[afbeelding]

Ziet er vooral positief uit, doen!
Ze staat gewoon een sigaret of joint te roken...

Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 13-09 16:51
Verwijderd schreef op vrijdag 07 mei 2010 @ 13:18:
Kwam deze laatst tegen toen ik een site van asp.net 1.1 naar asp.net 3.5 aan het omzetten was. Ik had toen volgens mij nog nooit gehoord van dingen als datetime formats.


Visual Basic .NET:
1
.....


De code werd verder nergens meer gebruikt, maar altijd mooi om te zien hoe dom ik toen bezig was.
Ach, zo erg is dat nog niet. Het doet tenminste zijn werk goed. De kans dat we op termijn de dagen een andere naam gaan geven is zo groot nog niet. Hier zit ik met een stuk code waar men van allerlei datatypes door elkaar gebruikt, met een boel errors als gevolg. Veel smeriger.

http://hawvie.deviantart.com/


Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
HawVer schreef op vrijdag 07 mei 2010 @ 15:06:
[...]

Ach, zo erg is dat nog niet. Het doet tenminste zijn werk goed. De kans dat we op termijn de dagen een andere naam gaan geven is zo groot nog niet. Hier zit ik met een stuk code waar men van allerlei datatypes door elkaar gebruikt, met een boel errors als gevolg. Veel smeriger.
Datatypes datatypes.. Je moet niet zo in hokjes denken joh!

:+

(volgens mij denken heel veel PHPers wel op die manier helaas.. En veel C#-ers denken alsnog zo, maar dan wanneer het aankomt op de semantiek van een datatype)

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;

Pagina: 1 ... 24 ... 103 Laatste

Dit topic is gesloten.

Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes. :)