[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 ... 38 ... 103 Laatste
Acties:
  • 993.661 views

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:35
functioneel programmeren in Java? WTF?!!! vandaar die banaan zeker :P

Acties:
  • 0 Henk 'm!

Verwijderd

Niks mis met functioneel programmeren in Java. Gewoon heel veel iterators gebruiken. En een mooi typesysteem met hogere-ordefuncties nabouwen.

Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 21:13

Lye

FragFrog schreef op maandag 25 oktober 2010 @ 20:49:
[...]

't wordt continue overhoop gehaald en men loopt elk jaar weer te verschuiven wat het nou moet doen. Nogal logisch dat't een brak vak is wat je snel moet halen en vergeten.

De logica van eerst functioneel programmeren in JAVA en daarna OOP in C++ is me ook nooit helemaal duidelijk geworden, al schijnt dat voor OOP in C++ nu iets van datastructuren in de plaats is gekomen. Ze werken er wel aan.. 't lijkt alleen nooit heel erg te lukken :+
Volgens mij is het dit jaar hetzelfde als vorig jaar en toen was er geen enkel probleem naar mijn weten.. Overigens is OOP tegenwoordig in Java en functioneel al een tijdje in Haskell (Voor zo ver ik weet in ieder geval). Datastructuren is trouwens best grappig.

Acties:
  • 0 Henk 'm!

  • berendhaan
  • Registratie: Oktober 2006
  • Laatst online: 03-10 15:18

Acties:
  • 0 Henk 'm!

Verwijderd

Tinctorius had het helemaal goed ;) Wel grappig dat blijkbaar zelfs bij een willekeurig plaatje nog zoveel associaties tevoorschijn komen.

[ Voor 13% gewijzigd door Verwijderd op 25-10-2010 21:40 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:17

Janoz

Moderator Devschuur®

!litemod

roy-t schreef op maandag 25 oktober 2010 @ 19:47:
Zie hier het vak dat dit jaar zo vreselijk slecht gemaakt wordt dat zelfs onze legendarische Harm Bakker ingehuurd wordt als practicum assistent... :P.
Oeh, Harm Bakker... Met zijn beruchte BakkerSort algorithme.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Enlighten us! :')

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Functioneel programmeren in Java? Hoe moet ik dat voor me zien? :?
.edit: oh, een nieuwe pagina.

[ Voor 19% gewijzigd door .oisyn op 25-10-2010 21:39 ]

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!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 23:15
Lye schreef op maandag 25 oktober 2010 @ 21:01:
Overigens is OOP tegenwoordig in Java en functioneel al een tijdje in Haskell (Voor zo ver ik weet in ieder geval). Datastructuren is trouwens best grappig.
Twee jaar geleden nog niet, in elk geval niet voor de KI'ers aan de RuG, waar dat dictaat vandaan komt (al kan ik me voorstellen dat informatici het ook volgen?). Hmmzja, 't heet officieel imperatief programmeren, maargoed.

Functioneel in JAVA is simpel trouwens. Iets met een main functie en "abracadabra" [sic]. I kid you not.

[ Voor 5% gewijzigd door FragFrog op 25-10-2010 21:43 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Aloys
  • Registratie: Juni 2005
  • Niet online
MBV schreef op maandag 25 oktober 2010 @ 20:53:
functioneel programmeren in Java? WTF?!!! vandaar die banaan zeker :P
En op de voorkant staat nog wel Imperatief programmeren (overigens in C). :P Maar dat het vak zo slecht wordt gemaakt kan ook wel komen omdat ze inderdaad steeds weer van alles omgooien. Overigens was het gemiddelde onder de BMT'ers die dit vak volgen gemiddeld een 3,4 ofzo :+ . De enige echte kritiek die ik kan geven is dat alles zo verschrikkelijk omslachtig en onlogisch wordt uitgelegd, mja IT'ers zijn niet sociaal (generalisatie :> ).

maar om een beetje ontopic te blijven.
C:
1
scanf("%d", &letter); /* lees newline achter alfabet weg */

Dit was nodig om een bepaalde opdracht op te lossen waarbij je gebruik moest maken van getchar/putchar ( ;( ) . Vind je het gek dat 90% van de mensen, die overigens maar 3 weekjes college hebben gehad, dit niet inzien? :P .

Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 21:13

Lye

FragFrog schreef op maandag 25 oktober 2010 @ 21:43:
[...]

Twee jaar geleden nog niet, in elk geval niet voor de KI'ers aan de RuG, waar dat dictaat vandaan komt (al kan ik me voorstellen dat informatici het ook volgen?). Hmmzja, 't heet officieel imperatief programmeren, maargoed.

Functioneel in JAVA is simpel trouwens. Iets met een main functie en "abracadabra" [sic]. I kid you not.
Afgelopen jaar (Van horen zeggen) en dit jaar in ieder geval wel, daarvoor zou ik niet weten, daar ken ik er niet zo veel. Imperatief is overigens in C.

Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Hoe komt iedereen nu eens aan Functioneel programmeren in Java. Het is Imperatief programmeren en dat kan in Java wel een beetje (alleen dingen doen in main methode), nu is het blijkbaar in C (iets logischer).


Alhoewel, basis programmeer vakken in C? Damn, ik ben blij dat ik het gewoon in Java kreeg.


Functioneel programmeren doe je in Haskell of F# en is volgens mij niet mogelijk in Java.

[ Voor 21% gewijzigd door roy-t op 26-10-2010 08:15 ]

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
roy-t schreef op dinsdag 26 oktober 2010 @ 08:13:
Functioneel programmeren doe je in Haskell of F# en is volgens mij niet mogelijk in Java.
Tuurlijk is het mogelijk (iets over Turing completeness, en zo). Het is alleen niet zo'n bijster snugger idee. ;)

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
roy-t schreef op dinsdag 26 oktober 2010 @ 08:13:
Hoe komt iedereen nu eens aan Functioneel programmeren in Java. Het is Imperatief programmeren en dat kan in Java wel een beetje (alleen dingen doen in main methode), nu is het blijkbaar in C (iets logischer).


Alhoewel, basis programmeer vakken in C? Damn, ik ben blij dat ik het gewoon in Java kreeg.


Functioneel programmeren doe je in Haskell of F# en is volgens mij niet mogelijk in Java.
"Imp" kregen wij in Java, moesten we een mooie Mandelbrot-applicatie schrijven die fractalen ging tekenen en een bestaand tekenprogramma uitbreiden zodat er polygonen getekend konden worden. OOMP (Object-geörienteerd modelleren en programmeren met al die design patterns) kregen we ook in Java.

Functioneel kregen we in Helium, een speciaal voor (en door?) de UU ontwikkelde afgeleide van Haskell die iets makkelijker was. Daarmee moesten we dan weer tijdens "Grammatica's en Ontleden" recepten parsen en kon je zien hoeveel eetlepels ergens voor nodig waren enzo. :p Ach, liever dat dan NFA's naar DFA's omschrijven.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:17

Janoz

Moderator Devschuur®

!litemod

code:
1
2
3
4
5
sort(lijst) {
  while (!isSorted(lijst)) {
    shuffle(lijst);
  }
}

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


Acties:
  • 0 Henk 'm!

Verwijderd

@Janoz: bogosort dus. Niet eens zo'n gek algoritme ook, afhankelijk van je architectuur.
@Davio: Helium is inderdaad een masterproject geweest van iemand aan de UU. Bij Imperatief Programmeren werken ze nu kennelijk in C#.
@roy-t: als je een klasse maakt voor hogere-ordefuncties ben je al een heel eind op weg. Misschien ben je er dan zelfs al.

Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
Bogosort is grappig, quantum bogosort is geweldig! werkt ook nog eens in O(n) tijd.
Zie Wikipedia: Bogosort

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 21:13

Lye

roy-t schreef op dinsdag 26 oktober 2010 @ 08:13:
Hoe komt iedereen nu eens aan Functioneel programmeren in Java. Het is Imperatief programmeren en dat kan in Java wel een beetje (alleen dingen doen in main methode), nu is het blijkbaar in C (iets logischer).


Alhoewel, basis programmeer vakken in C? Damn, ik ben blij dat ik het gewoon in Java kreeg.


Functioneel programmeren doe je in Haskell of F# en is volgens mij niet mogelijk in Java.
Overigens hoeft niet alles in de main methode, je kunt ook gewoon andere methodes maken in die class. Enige verschil is dat je er een "public class" wrappertje omheen hebt staan.

Ik ben veel blijer dat ik C kreeg dan Java voor imperatief, ben gek op pointers :)


Eventjes on-topic: schoonheidje wat ik laatst zag op de hanze hogeschool (basisprogrammeren in php):
PHP:
1
2
3
4
5
6
7
8
function OddEven($number) {
    $number = $number - 1; //If number - 1 is even, result is odd
    if ($number % 2 == 0) { //Check if number is even
        return "odd";
    } else {
        return "even";
    }
}


Meneer de medestudent snapte niet dat je direct de modulus kon nemen en had al helemaal nooit gehoord van booleans (want in php hebben variabelen geen types:S)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:17

Janoz

Moderator Devschuur®

!litemod

Lye schreef op dinsdag 26 oktober 2010 @ 13:08:
Overigens hoeft niet alles in de main methode, je kunt ook gewoon andere methodes maken in die class. Enige verschil is dat je er een "public class" wrappertje omheen hebt staan.
Wel even alle methoden static maken he ;).
Ik ben veel blijer dat ik C kreeg dan Java voor imperatief, ben gek op pointers :)
In mijn tijd kregen we dat in pascal (daarna nog een stukje modula en pas bij OO kwam Java). IMHO draagt het zeker bij aan het begrip wanneer de studenten wat mogen doen met pointers. Zeker voor een college over datastructuren is het erg handig. Pointers zitten trouwens ook in pascal.

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


Acties:
  • 0 Henk 'm!

  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 18-05 17:57
Als je vroeg begint met het leren met pointers te werken kun je ook meteen leren hoe een debugger werkt :)

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


Acties:
  • 0 Henk 'm!

Verwijderd

Lye schreef op dinsdag 26 oktober 2010 @ 13:08:
Meneer de medestudent snapte niet dat je direct de modulus kon nemen en had al helemaal nooit gehoord van booleans (want in php hebben variabelen geen types:S)
Dat is niet helemaal waar, alleen worden de types in PHP @ runtime gedefinieerd.


PHP:
1
2
3
4
5
6
7
8
9
10
$var = "Hoi";

if(is_bool($var))
{
   echo("Dit is een boolean");
}
else
{
    echo("Dit is geen boolean");
}


Wat denk je dat de uitkomst is?

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 23:22

CoolGamer

What is it? Dragons?

"Dit is geen boolean"

PHP zet inderdaad de types tijdens runtime, maar cast ze ook automatisch naar een ander type mocht dat nodig zijn.

[ Voor 36% gewijzigd door CoolGamer op 26-10-2010 15:47 ]

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


Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 21:13

Lye

Verwijderd schreef op dinsdag 26 oktober 2010 @ 15:40:
[...]

Dat is niet helemaal waar, alleen worden de types in PHP @ runtime gedefinieerd.


PHP:
1
2
3
4
5
6
7
8
9
10
$var = "Hoi";

if(is_bool($var))
{
   echo("Dit is een boolean");
}
else
{
    echo("Dit is geen boolean");
}


Wat denk je dat de uitkomst is?
Dat weet ik, dat weet jij, maar vertel dat aan mijn medestudent...

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:48

Patriot

Fulltime #whatpulsert

Verwijderd schreef op dinsdag 26 oktober 2010 @ 15:40:
[...]

Dat is niet helemaal waar, alleen worden de types in PHP @ runtime gedefinieerd.
Volgens mij is het vetgedrukte een citaat van de klasgenoot, niet iets wat hij zelf wil beweren :P

Acties:
  • 0 Henk 'm!

Verwijderd

Lye schreef op dinsdag 26 oktober 2010 @ 13:08:
[...]


Overigens hoeft niet alles in de main methode, je kunt ook gewoon andere methodes maken in die class. Enige verschil is dat je er een "public class" wrappertje omheen hebt staan.

Ik ben veel blijer dat ik C kreeg dan Java voor imperatief, ben gek op pointers :)


Eventjes on-topic: schoonheidje wat ik laatst zag op de hanze hogeschool (basisprogrammeren in php):
PHP:
1
2
3
4
5
6
7
8
function OddEven($number) {
    $number = $number - 1; //If number - 1 is even, result is odd
    if ($number % 2 == 0) { //Check if number is even
        return "odd";
    } else {
        return "even";
    }
}


Meneer de medestudent snapte niet dat je direct de modulus kon nemen en had al helemaal nooit gehoord van booleans (want in php hebben variabelen geen types:S)
OMG... Ander vak kiezen.. :')

"If number - 1 is even, result is odd"... _O-

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 26 oktober 2010 @ 17:26:
[...]

OMG... Ander vak kiezen.. :')

"If number - 1 is even, result is odd"... _O-
Zou nog mooier zijn als ie het had gedaan in een taal waar pass by reference de default is :+

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 05-10 08:57

Matis

Rubber Rocket

Verwijderd schreef op dinsdag 26 oktober 2010 @ 17:26:
"If number - 1 is even, result is odd"... _O-
Altijd nog beter dan even icm uneven :')

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


Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 04-10 21:59
Nouja, hij had 't iig gedocumenteerd da's in ieder geval iets.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 18:17

Ventieldopje

I'm not your pal, mate!

code:
1
2
3
for(;;)
{
}


Bam en toen lag tweakers plat :P

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 05-10 11:49

Haan

dotnetter

Freeaqingme schreef op dinsdag 26 oktober 2010 @ 20:51:
Nouja, hij had 't iig gedocumenteerd da's in ieder geval iets.
En de logica klopt ook gewoon, geen speld tussen te krijgen :7

Ik vind dit wel een van de meer geniale voorbeelden van het 'waarom makkelijk doen als het ook moeilijk kan' principe.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • berendhaan
  • Registratie: Oktober 2006
  • Laatst online: 03-10 15:18
Lye schreef op dinsdag 26 oktober 2010 @ 13:08:
[...]


Eventjes on-topic: schoonheidje wat ik laatst zag op de hanze hogeschool (basisprogrammeren in php):
PHP:
1
2
3
4
5
6
7
8
function OddEven($number) {
    $number = $number - 1; //If number - 1 is even, result is odd
    if ($number % 2 == 0) { //Check if number is even
        return "odd";
    } else {
        return "even";
    }
}
Dit kwam ik laatst tegen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
isEvenNumber: function (number) {
        var reminder = 1;
        if (number >= 0) {
            reminder = number % 2;
            if (reminder == 0) {
                return true;
            }
            else {
                return false;
            }
        }
    }


Dat moet toch korter kunnen :9

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 05-10 08:57

Matis

Rubber Rocket

Wat als het getal kleiner is dan nul :? Ik mag aannemen dat de javascript-parser er een waarschuwing over geeft.
Bah, ranzig stukje code, derhalve een prachtig voorbeeld :Y)

[ Voor 3% gewijzigd door Matis op 26-10-2010 21:15 ]

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


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 23:22

CoolGamer

What is it? Dragons?

Matis schreef op dinsdag 26 oktober 2010 @ 21:14:
Ik mag aannemen dat de javascript-parser er een waarschuwing over geeft.
In javascript is een return niet verplicht. Daarom wordt er ook geen warning voor gegeven. Standaard wordt een "undefined" teruggegeven.

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


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:24

RayNbow

Kirika <3

JavaScript:
1
2
3
function isEven(n) {
    return n == 0 || !isEven(n - (n/Math.abs(n)));
}

Zoiets? O-)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

Verwijderd

Wat een pareltje :D

Acties:
  • 0 Henk 'm!

Verwijderd

Waarschijnlijk leken al die scripts een goed idee toen de ontwikkelaar ze bedacht ;). Zo trof ik onlangs de volgende javascript functie aan in een vrij serieuze webapplicatie.

code:
1
2
3
returnFalse = function(){
  return true;
}

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:35
Waar ik op mijn werk regelmatig tegenaan loop:

C++:
1
2
3
if (GetTheWholeUniverse().getMySetting() != someValue) {
  GetTheWholeUniverse().setMySetting(someValue);
}


Ik heb het nagekeken: de betreffende setters en getters doen niks meer dan een int returnen of een int op een bepaalde waarde instellen. Waarom niet gewoon de setter aanroepen? Zal wel een performance-optimalisatie zijn ;)

Los natuurlijk van dat TheWholeUniverse.cpp 15000+ regels lang is, en daarmee nog niet het record aan aantal regels per file heeft :X Ach, ondanks dat vermaak ik me prima.

[ Voor 16% gewijzigd door MBV op 26-10-2010 22:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb dat patroon heel vaak, maar dan met SWT. Als ik namelijk setText op een control gebruik, wordt er een SWT.Modify event gegenereerd, of de tekst nou daadwerkelijk verandert of niet. Ik heb zelfs het volgende gedrocht moeten creëren om van oneindig rondzingende events af te komen (beginnend als reactie op andere events):
Java:
1
2
3
4
5
6
7
8
9
10
11
protected boolean allowSetText = true; 
protected void _setText(String string) {
    checkWidget();
    if (allowSetText) {
        allowSetText = false;
        if (!text.getText().equals(string)) {
            text.setText(string);
        }
        allowSetText = true;
    }
}
En hoewel checkWidget test of de aanroep vanuit de UI thread komt, heb ik toch het paranoïde idee dat ik hier nog "synchronized" moet toevoegen.

Maar in jouw geval is het juist op geen enkele manier optimaler :P

Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
/zeurmodus
In de echte code staat dan toch wel in de comments uitgelegt waarom je de tekst eerst checked enzo?

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 18:55
Dat lijkt me wel een geval waar wat commentaar gerechtvaardigd is ja.

Acties:
  • 0 Henk 'm!

  • Chip.
  • Registratie: Mei 2006
  • Niet online
RayNbow schreef op dinsdag 26 oktober 2010 @ 21:36:
[...]

JavaScript:
1
2
3
function isEven(n) {
    return n == 0 || !isEven(n - (n/Math.abs(n)));
}

Zoiets? O-)
Ik check gewoon altijd bitwise... Als de least significant bit 1 is dan is het getal oneven en anders oneven.

Acties:
  • 0 Henk 'm!

Verwijderd

Wouser schreef op woensdag 27 oktober 2010 @ 11:04:
[...]

Ik check gewoon altijd bitwise... Als de least significant bit 1 is dan is het getal oneven en anders oneven.
Java:
1
2
3
4
5
6
boolean isEven(int x) {
    if (x & 1 == 1)
        return false;
    else
        return false;
}
:')
offtopic:
Een beetje compiler optimaliseert _%2==_ ook naar _&1==_. Voor leesbaarheid is modulorekenen altijd de beste manier om even/oneven te testen, dus wat dat betreft is die aanpak dubbel fout.

[ Voor 29% gewijzigd door Verwijderd op 27-10-2010 13:01 ]


Acties:
  • 0 Henk 'm!

  • BugBoy
  • Registratie: November 2002
  • Laatst online: 05-10 09:14
Dit zag ik een keer bij een stagair, die iets teveel was opgegaan in de schoonhueid van recursie. Gewoon een lekkere efficiente manier om de lengte van een string te testen in C/C++:
code:
1
int strlen(const char* str) { return *str ? (strlen(str+1)+1) : 0; }

The miracle isn't that I finished. The miracle is that I had the courage to start.


Acties:
  • 0 Henk 'm!

  • stappel_
  • Registratie: Augustus 2000
  • Laatst online: 01-10 14:37
BugBoy schreef op woensdag 27 oktober 2010 @ 13:21:
Dit zag ik een keer bij een stagair, die iets teveel was opgegaan in de schoonhueid van recursie. Gewoon een lekkere efficiente manier om de lengte van een string te testen in C/C++:
code:
1
int strlen(const char* str) { return *str ? (strlen(str+1)+1) : 0; }
Ahh iemand die les heeft gehad van Prof. Drs. Anne Kaldewaij

Ubero: #2, Euler: #1, GOT: #1, Des: #1, Zeta: #1, Eon: #3, OGR-24: #3, OGR-25: #7,
LM: #7, AP: #5, DF: #19, D2OL: #37, SOB: #50, TSC: #63, RC5: #96


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op woensdag 27 oktober 2010 @ 12:57:
[...]
offtopic:
Een beetje compiler optimaliseert _%2==_ ook naar _&1==_. Voor leesbaarheid is modulorekenen altijd de beste manier om even/oneven te testen, dus wat dat betreft is die aanpak dubbel fout.
Dat kan niet, een oneven negatief getal mod 2 geeft -1. Die vlieger gaat dus alleen op voor unsigned integers, die je niet hebt in Java.

[ Voor 9% gewijzigd door .oisyn op 27-10-2010 14:02 ]

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!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 01-10 23:03
Volgens mij moet dit ook makkelijker kunnen maarja :P

Ik heb dus een array met vragen, en een array met antwoorden.
Waar ik moet checken of de vraag wel is ingevuld (niet ingevuld = niet in array).
Deze worden weer geexporteert naar een excelsheet die ik rij voor rij opbouw (een rij per ingevulde vragenlijst dus).

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
foreach($Questions as $Question){
    if(isset($Answers[$Question[0]][0])){
        $rowdata[] = $Answers[$Question[0]][0];
        $rowdata[] = $Answers[$Question[0]][1];
    }else{
        $rowdata[] = "";
        $rowdata[] = "";
    }
}
?>

[ Voor 5% gewijzigd door Noxious op 27-10-2010 14:05 ]


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 00:25
waarom zet je er geen array in? Zo kan het voorkomen dat je wel een vraag, maar geen antwoord hebt bijvoorbeeld?

dus

PHP:
1
$rowdata[] = $Answers[$Question[0]];

Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 01-10 23:03
Mja het probleem is, je maakt die excel sheet rij voor rij.
Als mensen sommige vragen niet in (hoeven) te vullen (sommige zijn ook verborgen op basis van geleverde producten) staan die dus niet in de array met antwoorden.
Als ik dus bijv. vraag 1, 2, 3, 4 heb en vraag 3 is op gebruiker A wel van toepassing maar bij B niet (en dus verborgen) dan zou op die manier het antwoord van gebruiker B op vraag 4 in de kolom van vraag 3 komen :P
Ik moet dus vanuit de lijst met vragen checken of er een antwoord is (en die invullen) of een leeg velt teruggeven.

Edit: de layout van de uitkomende excel sheet is dus:
V1 cijferV1 opmerkingV2 cijferV2 opmerkingV3 cijferV3 opmerkingV4 cijferV4 opmerking
8bla102bla6
68bla10

[ Voor 30% gewijzigd door Noxious op 27-10-2010 14:13 ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Noxious schreef op woensdag 27 oktober 2010 @ 14:10:
Mja het probleem is, je maakt die excel sheet rij voor rij.
Als mensen sommige vragen niet in (hoeven) te vullen (sommige zijn ook verborgen op basis van geleverde producten) staan die dus niet in de array met antwoorden.
Dan voeg je dan toch gewoon een lege rij toe? Of denk ik nu te simpel?

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 21:13

Lye

.oisyn schreef op woensdag 27 oktober 2010 @ 14:01:
[...]

Dat kan niet, een oneven negatief getal mod 2 geeft -1. Die vlieger gaat dus alleen op voor unsigned integers, die je niet hebt in Java.
Niet in Python:
Python:
1
2
3
4
5
6
7
8
>>> print -2 % 2
0
>>> print -3 % 2
1
>>> print -2 & 1
0
>>> print -3 & 1
1


Maar Python is dan ook af en toe een beetje vaag :P

Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 01-10 23:03
Hydra schreef op woensdag 27 oktober 2010 @ 14:29:
[...]


Dan voeg je dan toch gewoon een lege rij toe? Of denk ik nu te simpel?
Nee en ja, als je m'n voorbeeldje bekijkt zie je dat vraag 3 dus niet is ingevuld in dit geval, en daar dus een leeg veld zit.
Ik voeg aan de $rowdata per keer een enkele cell toe, als ik dan een complete rij heb doe ik een $xls->addRow($rowdata); en gooi ik de $rowdata weer leeg.
Dan ga ik op naar de volgende klant. :P

Ik zat me vooral af te vragen of het anders/overzichtelijker kon maar ik denk dat daar niet veel kansen zitten.

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:24

RayNbow

Kirika <3

.oisyn schreef op woensdag 27 oktober 2010 @ 14:01:
[...]

Dat kan niet, een oneven negatief getal mod 2 geeft -1. Die vlieger gaat dus alleen op voor unsigned integers, die je niet hebt in Java.
Lye schreef op woensdag 27 oktober 2010 @ 14:36:
[...]


Niet in Python:
Python:
1
2
3
4
5
6
7
8
>>> print -2 % 2
0
>>> print -3 % 2
1
>>> print -2 & 1
0
>>> print -3 & 1
1


Maar Python is dan ook af en toe een beetje vaag :P
Het hangt dan ook van de taal af (Lijstje hier). Zo hangt het in Haskell af of je mod of rem gebruikt.

[ Voor 8% gewijzigd door RayNbow op 27-10-2010 14:42 ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:17

Janoz

Moderator Devschuur®

!litemod

De real WTF is natuurlijk weer het overmatige array fetisjisme van de gemiddelde php-er :+..

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


Acties:
  • 0 Henk 'm!

  • elTigro
  • Registratie: November 2000
  • Laatst online: 04-05 13:01

elTigro

Es un Gringo!

berendhaan schreef op dinsdag 26 oktober 2010 @ 21:12:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
isEvenNumber: function (number) {
        var reminder = 1;
        if (number >= 0) {
            reminder = number % 2;
            if (reminder == 0) {
                return true;
            }
            else {
                return false;
            }
        }
    }


Dat moet toch korter kunnen :9
En los of het korter kan... Waarom werken met herinneringen? Mag ie niet vergeten dat het eigenlijk om de remainder gaat? :P

Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 00:25
berendhaan schreef op dinsdag 26 oktober 2010 @ 21:12:
[...]

Dit kwam ik laatst tegen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
isEvenNumber: function (number) {
        var reminder = 1;
        if (number >= 0) {
            reminder = number % 2;
            if (reminder == 0) {
                return true;
            }
            else {
                return false;
            }
        }
    }


Dat moet toch korter kunnen :9
JavaScript:
1
2
3
isEvenNumber: function (number) {
        return ((number % 2) == 0) && (number >= 0);       
    }
toch?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Lye schreef op woensdag 27 oktober 2010 @ 14:36:
[...]


Niet in Python:
Python:
1
2
3
4
5
6
7
8
>>> print -2 % 2
0
>>> print -3 % 2
1
>>> print -2 & 1
0
>>> print -3 & 1
1


Maar Python is dan ook af en toe een beetje vaag :P
Daar is niets vaags aan, -1 of 1 is beide een correct antwoord. In C is het niet eens gedefiniëerd en hant het dus van je implementatie/platform af (hoewel negatieve resultaten wel de consensus 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!

Verwijderd

RayNbow schreef op woensdag 27 oktober 2010 @ 14:42:
Het hangt dan ook van de taal af (Lijstje hier). Zo hangt het in Haskell af of je mod of rem gebruikt.
Zo te zien doen ook alleen ALGOL-68, ISO Pascal en Scheme het goed.
.oisyn schreef op woensdag 27 oktober 2010 @ 15:17:
Daar is niets vaags aan, -1 of 1 is beide een correct antwoord. In C is het niet eens gedefiniëerd en hant het dus van je implementatie/platform af (hoewel negatieve resultaten wel de consensus is)
Je kunt ook zeggen dat andere elementen van de restklasse goed zijn, maar daarom is het nog niet handig. Als je er maar één operator voor hebt, vind ik dat alleen het kleinste positieve element van de restklasse als waarde gebruikt mag worden. Aangezien er meerdere definities van de modulo-operator bestaan, zou ik echter ook meerdere operatoren in een taal zetten.

[ Voor 47% gewijzigd door Verwijderd op 27-10-2010 15:30 ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
418O2 schreef op woensdag 27 oktober 2010 @ 15:16:
JavaScript:
1
2
3
isEvenNumber: function (number) {
        return ((number % 2) == 0) && (number >= 0);       
    }
toch?
-2 is niet even?

https://niels.nu


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 00:25
Volgens zijn orginele functie niet... Is wellicht een reden voor.

de functie returned niets als de input kleiner dan 0 is.. Apart

[ Voor 34% gewijzigd door 418O2 op 27-10-2010 15:50 ]


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 04-10 10:42
418O2 schreef op woensdag 27 oktober 2010 @ 15:50:
Volgens zijn orginele functie niet... Is wellicht een reden voor.

de functie returned niets als de input kleiner dan 0 is.. Apart
De functie geeft dan false terug, dus het is wel wat. :)

Acties:
  • 0 Henk 'm!

  • Bob
  • Registratie: Mei 2005
  • Laatst online: 22:29

Bob

C++:
1
2
3
4
5
// method wordt vanuit meerdere threads aangeroepen
void CoolStuff::uberImportantMethod(){
  boost::mutex::scoped_lock(this->mutex);
  this->object.manipulate();
}


(eigen code)
Geweldige tijdverspilling. Ik begon er al van overtuigd te geraken dat de boost threading toestanden broken waren op mijn laptop. Met die underscore leek het al die tijd alsof ik echt wel een lock instantieerde, maar niet dus ...

Is er een manier waarop boost een warning kan genereren voor deze situatie? Op het eerste zicht zou ik zeggen van niet, boost code kan niet zien dat die lock niet wordt geassigned aan een variable imo. Handig zou het wel zijn, want een scoped_lock constructen en dan niet in een var steken is compleet nutteloos en kan wel voorkomen zoals je ziet :)

Voor de volledigheid, een scoped lock gebruik je zo:
C++:
1
2
3
{
  boost::mutex::scoped_lock instance(mutex);
}

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mja, ik zie niet echt het nut van een warning in. Wat jij daar doet heeft gewoon te maken met gebrek aan ervaring met C++. Misschien dat je denkt dat het een functie-aanroep is, maar dat kan nooit scoped zijn. Het RAII concept is juist dat je een object instantieert binnen de scope. Wellicht wil je een compiler die een warning geeft bij het aanmaken van een wellicht nutteloze temporary (zoals in je voorbeeld), en wellicht heeft de compiler die jij gebruikt dat zelfs wel.

[ Voor 23% gewijzigd door .oisyn op 27-10-2010 16:26 ]

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!

  • Bob
  • Registratie: Mei 2005
  • Laatst online: 22:29

Bob

.oisyn schreef op woensdag 27 oktober 2010 @ 16:24:
Mja, ik zie niet echt het nut van een warning in. Wat jij daar doet heeft gewoon te maken met gebrek aan ervaring met C++. Misschien dat je denkt dat het een functie-aanroep is, maar dat kan nooit scoped zijn. Het RAII concept is juist dat je een object instantieert binnen de scope.
Kan nuttig zijn voor mensen als ik die echt wel weten hoe het werkt, maar een gewoon een stomme typo maken. Misschien was het niet duidelijk dat een typo de oorzaak van de zaak was. Een collega hier die ik net het probleem liet zien had het ook al voorgehad, hoewel die ook goed genoeg weet hoe het werkt.

edit: compiler staat op -Wall

Acties:
  • 0 Henk 'm!

Verwijderd

Warnings zijn er om mensen te waarschuwen, hoop ik. Als een programmeur een regel schrijft (en dus waarschijnlijk ook aanneemt dat het iets betekent) die vervolgens semantisch gezien niks doet, denk ik dat een waarschuwing best op z'n plaats is.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Op zich wel een leuk idee: snippets van je eigen code hier dumpen, mensen hierop er laten klussen, en een dag later heb je iets wat waarschijnlijk compleet uitgeoptimaliseerd is en je weer kan verwerken in je eigen project :P

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Hydra schreef op woensdag 27 oktober 2010 @ 16:39:
Op zich wel een leuk idee: snippets van je eigen code hier dumpen, mensen hierop er laten klussen, en een dag later heb je iets wat waarschijnlijk compleet uitgeoptimaliseerd is en je weer kan verwerken in je eigen project :P
Héé, da's een verrekt goed plan... Ga ik onthouden! >:)

Acties:
  • 0 Henk 'm!

Verwijderd

Bob schreef op woensdag 27 oktober 2010 @ 16:28:
[...]
edit: compiler staat op -Wall
Gebruik -Wall -Wextra...volgens mij (in ieder geval bij GCC) geeft 'ie dan een warning als je nutteloze dingen doet :).

Acties:
  • 0 Henk 'm!

  • Bob
  • Registratie: Mei 2005
  • Laatst online: 22:29

Bob

Verwijderd schreef op woensdag 27 oktober 2010 @ 18:06:
[...]


Gebruik -Wall -Wextra...volgens mij (in ieder geval bij GCC) geeft 'ie dan een warning als je nutteloze dingen doet :).
Net getest, doet niks. Misschien denkt GCC dat die constructie-destructie 'nuttig' is vanwege de side effects?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op woensdag 27 oktober 2010 @ 17:32:
[...]

Héé, da's een verrekt goed plan... Ga ik onthouden! >:)
En daarna een paar weken niet meer op GoT kunnen >:)

Maar laten we weer on-topic gaan, en niet alle taal/compiler features gaan bespreken. Niet elke type-fout is meteen een "Slechtste programmeervoorbeeld". Discussies over taal/compiler features kunnen in een los topic.

[ Voor 7% gewijzigd door Woy op 28-10-2010 10:25 ]

“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!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Hydra schreef op woensdag 27 oktober 2010 @ 16:39:
Op zich wel een leuk idee: snippets van je eigen code hier dumpen, mensen hierop er laten klussen, en een dag later heb je iets wat waarschijnlijk compleet uitgeoptimaliseerd is en je weer kan verwerken in je eigen project :P
Beetje refactormycode idee, maar dan beterder? :+ ik zie het wel vaker 'natuurlijk' gebeuren, dus waarom niet? Is weer eens wat anders dan een programmeerwedstrijd eens per (half) jaar.

Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 01-10 23:03
Ook wel een die hier past, die viespeuken bij Linksys hebben lekker example javascriptjes zitten copy/pasten :+

Bezoek dit eens met Opera: http://www.linksysbycisco.com/NL/nl/support/WAG354G :D

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Ik heb geen Opera, dus vertel me maar gewoon wat er fout gaat.

[edit]
Bedoel je die antieke ToolTip library met een miljoen tt_* functies?

[ Voor 39% gewijzigd door AtleX op 28-10-2010 13:10 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

Voor de mensen die geen Opera willen gebruiken:
spoiler:
Er komt meteen een popup tevoorschijn met de tekst "this example does not work in opera". Iets te fanatiek code gecopieerd van een voorbeeldsite.

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


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Zit de code van een stagair te refactoren, die had een loopje van het aantal dagen met per dag 4 queries. Dat werd wat traag natuurlijk :{ Nu ben ik alles aan het reverse-engineeren en heb ik t al teruggebracht naar 5 queries totaal :)

Nu de rest nog...

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
418O2 schreef op woensdag 27 oktober 2010 @ 15:16:
[...]

JavaScript:
1
2
3
isEvenNumber: function (number) {
        return ((number % 2) == 0) && (number >= 0);       
    }
toch?
JavaScript:
1
2
3
4
5
6
7
8
9
10
Number.prototype.isEven = function()
{return (this%2) == 0;}

Number.prototype.isOdd = function()
{return (this%2) != 0;}
// Niet "... == 1", want rest kan ook -1 zijn bij negatieve getallen.

// Gebruik:
var getal = 3;
alert(getal + " is " + (getal.isEven()?"even":"oneven"));


Javascript prototyping FTW.

Niet te gebruiken bij komma-getallen, NaN of INF; moet je nog een nette fix voor schrijven.
Verder mag je blijkbaar geen directe "call" uitvoeren op getallen. (3.isEven() mag helaas niet)

[ Voor 28% gewijzigd door Gamebuster op 28-10-2010 16:16 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

Verwijderd

Gamebuster schreef op donderdag 28 oktober 2010 @ 16:07:
[...]


JavaScript:
1
2
3
4
5
6
7
8
Number.prototype.isEven()
{return (this%2) == 0;}

Number.prototype.isOdd()
{return (this%2) == 1;} // Kan dit eigenlijk ook -1 zijn voor negatieve getallen?

// Gebruik:
alert(3.isEven()?"3 is even":"3 is oneven");


Javascript prototyping FTW.
En bij negatieve getallen? :+

edit; ah, vandaar de "If number - 1 is even, result is odd " in Lye in "[alg] Slechtste programmeervoorbeelden d..." ? :P

[ Voor 14% gewijzigd door Verwijderd op 28-10-2010 16:16 ]


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Verwijderd schreef op donderdag 28 oktober 2010 @ 16:10:
[...]

En bij negatieve getallen? :+

edit; ah, vandaar de "If number - 1 is even, result is odd " in Lye in "[alg] Slechtste programmeervoorbeelden d..." ? :P
Code heb ik al aangepast; zat vol fouten, maar nu werkt-ie eindelijk :P

Blijkbaar kan je ook geen getal aanmaken en daar direct een methode op roepen (3.isEven() werkt dus niet) en mijn functie-declaraties waren geen functie-declaraties. (moest = function() zijn)

Komma-getallen, NaN en INF zijn altijd oneven volgens deze 2 functies; klopt natuurlijk ook niet. (kan je een komma-getal als even- of oneven beschouwen?)

[ Voor 40% gewijzigd door Gamebuster op 28-10-2010 16:23 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

Verwijderd

De termen 'even' en 'oneven' slaan alleen op gehele getallen en op bepaalde ℝ → ℝ functies.

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Gamebuster schreef op donderdag 28 oktober 2010 @ 16:07:
Niet te gebruiken bij komma-getallen, NaN of INF; moet je nog een nette fix voor schrijven.
Verder mag je blijkbaar geen directe "call" uitvoeren op getallen. (3.isEven() mag helaas niet)
Het mag als je er haakjes omheen zet.
JavaScript:
1
(5).isEven();

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:24

RayNbow

Kirika <3

JanDM schreef op donderdag 28 oktober 2010 @ 20:28:
[...]

Het mag als je er haakjes omheen zet.
JavaScript:
1
(5).isEven();
Of met een spatie:
JavaScript:
1
5 .isEven();

(Hetzelfde is ook het geval in Python)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
RayNbow schreef op donderdag 28 oktober 2010 @ 21:45:
[...]

Of met een spatie:
JavaScript:
1
5 .isEven();

(Hetzelfde is ook het geval in Python)
lol, met spatie mag het wel? 8)7

Lekkere compilers/interpreters weer. Zal het te maken hebben met het feit dat die punt normaal als "komma" gezien wordt?

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

Verwijderd

Dat lijkt me de enige aannemelijke verklaring. Hoewel het eigenlijk compleet onnodig is, aangezien de naam van een attribuut nooit met een cijfer kan beginnen.

Heeft iemand zin om het na te zoeken in de grammatica's of het ook zonder zo'n hack had moet kunnen? ;)

-edit- Nou, dat was makkelijk. In hoofdstuk 7 van ECMA-262 wordt al duidelijk aangegeven hoe de lexer onderscheid moet maken tussen een punt in een NumericLiteral en een punt als Punctuator.

[ Voor 53% gewijzigd door Verwijderd op 29-10-2010 00:45 . Reden: tokenizer-regels opgezocht ]


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Verwijderd schreef op vrijdag 29 oktober 2010 @ 00:35:
Dat lijkt me de enige aannemelijke verklaring. Hoewel het eigenlijk compleet onnodig is, aangezien de naam van een attribuut nooit met een cijfer kan beginnen.

Heeft iemand zin om het na te zoeken in de grammatica's of het ook zonder zo'n hack had moet kunnen? ;)
Je kan een getal maken zonder een getal achter de komma, maar wel met een komma. (punt, eigenlijk)

Zoiets bijv.:
JavaScript:
1
var a = 5.;


Vervolgens, als je 5.property gebruikt, denk ik dat-ie "5." als getal ziet, in plaats van enkel "5". Vervolgen staat daar "property" achter, wat, door het ontbreken van de punt, gezien wordt als "verdwaalde" variable-name en dat wordt gegeven als syntax error.

... tenminste, dat is mijn theorie. Hier een voorbeeldje die laat zien dat mijn theorie kan kloppen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
> 5
5
> 5.
5
> 5.property
SyntaxError: Parse error
> 5. property
SyntaxError: Parse error
> 5 .property
undefined

bron: Safari Javascript console

Bij de 5 [spatie] .property staat de punt los van het getal en wordt die punt dus niet gezien als "komma" voor het getal "5". Tevens zie je hier dat een punt achter een getal, zonder een getal achter de punt, gezien wordt als "komma 0"; "5." is dus gelijk aan "5.0".

Vermoedelijk, in C-gebaseerde talen, zal "5." het type "double" zijn en "5" van het type "int". Om makkelijk een double aan te maken zonder helemaal ".0" erachter te moeten typen, kan je dus ook enkel een punt erachter zetten om er een komma-getal van te maken, wat het automatisch van het type "double" maakt ipv "int", wat weer handig is bij bepaalde sommetjes, zoals dit:

C++:
1
2
3
int getal = 5;
std::cout << (getal / 2) << "\n";
std::cout << (getal / 2.) << "\n";


Output:
code:
1
2
2
2.5

[ Voor 15% gewijzigd door Gamebuster op 29-10-2010 00:49 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

Verwijderd

Ja, ik had het opgezocht :) Met heel wat geknoei had het nog opgelost kunnen worden, maar dan wordt het weer ambigu bij members die bijvoorbeeld 'e4' heten. Jammer dat de decimalen achter de komma optioneel zijn. Ik zie niet helemaal in waarom je "5." zou willen schrijven in plaats van "5.0", zeker als het dit soort lelijke gevolgen heeft.

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Verwijderd schreef op vrijdag 29 oktober 2010 @ 00:52:
Ja, ik had het opgezocht :) Met heel wat geknoei had het nog opgelost kunnen worden, maar dan wordt het weer ambigu bij members die bijvoorbeeld 'e4' heten. Jammer dat de decimalen achter de komma optioneel zijn. Ik zie niet helemaal in waarom je "5." zou willen schrijven in plaats van "5.0", zeker als het dit soort lelijke gevolgen heeft.
Een design-keuze die ze gemaakt hadden in C waarschijnlijk. In C kon je geen methods/properties toevoegen aan een getal, dus de dot-operator zou nooit direct gebruikt worden op getallen. Daarom hebben ze waarschijnlijk maar een optie erin gebakken om "5." te kunnen schrijven i.p.v. "5.0", net zoals je ook ".5" kunt schrijven i.p.v. "0.5". Niet omdat het zo handig is, maar gewoon... waarom niet? Behalve dat het niet netjes staat maakt het voor de functionaliteit in C niet uit.

Aangezien Javascript's syntax op C gebaseerd is, hebben ze waarschijnlijk die eigenschap overgenomen.

[ Voor 7% gewijzigd door Gamebuster op 29-10-2010 00:58 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

Verwijderd

Tja, wat ze ook hadden kunnen doen is het verbieden van "5." en ".5" in de strikte modus van ECMAScript 5. Octale getallen mogen daar ook al niet, dus als ze toch bezig zijn kunnen ze deze notatie ook verbieden.

Ik ga morgen trouwens even rondneuzen in een SVN-dump van een programmeerproject. Ik meen me te herinneren dat daar ook oenige fouten in zaten.

[ Voor 36% gewijzigd door Verwijderd op 29-10-2010 01:17 ]


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:24

RayNbow

Kirika <3

Verwijderd schreef op vrijdag 29 oktober 2010 @ 00:52:
Ik zie niet helemaal in waarom je "5." zou willen schrijven in plaats van "5.0", zeker als het dit soort lelijke gevolgen heeft.
Je mag btw ook dit schrijven:
JavaScript:
1
5..isEven()

:+

(Idem in Python, maar in Python is 5 een int en 5. een float)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 00:07

alienfruit

the alien you never expected

Lekker bezig:

code:
1
2
3
4
debug('isAuthorized?=" + Manager.instance.authorized);
if ( !Manage.instance ) {
   // code dat niet wordt uitgevoerd
}

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op vrijdag 29 oktober 2010 @ 01:15:
Tja, wat ze ook hadden kunnen doen is het verbieden van "5." en ".5" in de strikte modus van ECMAScript 5. Octale getallen mogen daar ook al niet, dus als ze toch bezig zijn kunnen ze deze notatie ook verbieden.
Zodat heel veel bestaande code ineens breekt? Ja, dat is handig.

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!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
.oisyn schreef op vrijdag 29 oktober 2010 @ 12:16:
[...]

Zodat heel veel bestaande code ineens breekt? Ja, dat is handig.
Waarom zou die breken? Ik neem aan dat je die stricte modus expliciet aan moet geven.

Acties:
  • 0 Henk 'm!

Verwijderd

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
    void Player::initActuators()
    {
        for(std::map<int, std::map<int, int> >::iterator fIt = mConfiguration.mPositionMap.begin(); fIt!=mConfiguration.mPositionMap.end();fIt++)
        {
            CANDFrame fRame;
            fRame.setBMI(can::bmi::NodeInit);
            fRame.setEMI((*fIt).first);
            if((*(*fIt).second.begin()).first==1)
            {
                fRame.setLength(2);
                fRame.body()[1] = 8 >> (*(*fIt).second.begin()).second;
                fRame.body()[0] = (*(*fIt).second.begin()).second;
            }else if((*(*fIt).second.begin()).first==2)
            {
                fRame.setLength(4);
                fRame.body()[0] = 24 >> (*(*fIt).second.begin()).second;
                fRame.body()[1] = 16 >> (*(*fIt).second.begin()).second;
                fRame.body()[2] = 8 >> (*(*fIt).second.begin()).second;
                fRame.body()[3] = (*(*fIt).second.begin()).second;
            }else if((*(*fIt).second.begin()).first==3)
            {
                fRame.setLength(2);
                fRame.body()[0] = 8 >> (*(*fIt).second.begin()).second;
                fRame.body()[1] = (*(*fIt).second.begin()).second;
            }
            
            mResources.getResource(mConfiguration.mCanId)->getConnection()->async_write(fRame.getLength(),fRame.data());

        }

    }
Vind het stukje waar mijn teamgenoten verzuimd hebben C++ te leren.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

PrisonerOfPain schreef op vrijdag 29 oktober 2010 @ 12:29:
[...]


Waarom zou die breken? Ik neem aan dat je die stricte modus expliciet aan moet geven.
Oh, dat stukje over strikte mode had ik even gemist. Moet jij trouwens niet wat compile errors fixen? :P

[ Voor 74% gewijzigd door .oisyn op 29-10-2010 17:20 ]

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: 17:35
Verwijderd schreef op vrijdag 29 oktober 2010 @ 17:11:
C++:
1
2
3
4
5
6
7
8
9
10
11
    void Player::initActuators()
    {
        for(std::map<int, std::map<int, int> >::iterator fIt = mConfiguration.mPositionMap.begin(); fIt!=mConfiguration.mPositionMap.end();fIt++)
        {
            CANDFrame fRame;
//snip
            mResources.getResource(mConfiguration.mCanId)->getConnection()->async_write(fRame.getLength(),fRame.data());

        }

    }
Vind het stukje waar mijn teamgenoten verzuimd hebben C++ te leren.
De async-write van een lokale variable die weg wordt gegooid zodra de scope voorbij is? Gaat toch meestal goed? ;)

Oh ja, maak er een switch-case van ipv zulke lange condities :X

[ Voor 46% gewijzigd door MBV op 29-10-2010 17:22 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op vrijdag 29 oktober 2010 @ 17:11:
Vind het stukje waar mijn teamgenoten verzuimd hebben C++ te leren.
Afgezien van wat overgespecificeerde code (zoals (*bla).bla ipv bla->bla en alsmaar herhalen van common expressions ipv die op te slaan in een variabele) zie ik niet direct de fout.
MBV schreef op vrijdag 29 oktober 2010 @ 17:17:
[...]


De async-write van een lokale variable die weg wordt gegooid zodra de scope voorbij is? Gaat toch meestal goed? ;)
Dan ga je er vanuit dat die functie de data niet eerst kopiëert, wat we zonder de definitie van de betreffende functie eigenlijk helemaal niet weten :)

[ Voor 38% gewijzigd door .oisyn op 29-10-2010 17:21 ]

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!

Verwijderd

Die dingen had ik ook gerefactored, maar dat was niet het grootste probleem. Kijk eens naar de shifts.

[ Voor 40% gewijzigd door Verwijderd op 29-10-2010 17:26 ]


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:35
@iosyn: Ik neem aan van niet, anders zou er namelijk niet zo'n schokkend verschil zijn tussen bijv Java en C++. Verder zou aardig wat duplicate code en functieaanroepen kunnen worden weggehaald door een aantal strategisch gekozen lokale variabelen, maar dat is nou niet zo'n WTF.

@tinctorius: die leveren (hoop ik, C++ expert ben ik niet) 8 * 2^(resultaat van aanroep) op, toch? In welke taal is dat dan niet zo? :X

[ Voor 21% gewijzigd door MBV op 29-10-2010 17:27 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op vrijdag 29 oktober 2010 @ 17:24:
Die dingen had ik ook gerefactored, maar dat was niet het grootste probleem. Kijk eens naar de shifts.
Ja, hoe moeten wij nou gaan raden wat daadwerkelijk de bedoeling is? :)
MBV schreef op vrijdag 29 oktober 2010 @ 17:25:
@tinctorius: die leveren (hoop ik, C++ expert ben ik niet) 8 * 2^(resultaat van aanroep) op, toch? In welke taal is dat dan niet zo? :X
8 * 2^-(resultaat van aanroep), maar idd.

[ Voor 33% gewijzigd door .oisyn op 29-10-2010 17:28 ]

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!

Verwijderd

Sorry, ik nam aan dat het nogal vanzelf sprekend is als je 8, 16, en 24 ziet. De bedoeling was dat de 'second'-waarde in de iterator in Big Endian naar de body van het frame werd geschreven. Maar kennelijk begrepen mijn teamgenoten niet wat links en rechts van de shift-operator hoort te staan.

[ Voor 32% gewijzigd door Verwijderd op 29-10-2010 17:32 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Oftewel, de echte WTF is dat er geen functie wordt gebruikt om de endianness van de host om te zetten naar big-endian? :)

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: 17:35
Zo zie je maar wat voor nut het refactoren van een functie kan hebben: misschien had ik het patroon niet over het hoofd gezien als er niet zo'n belachelijk lange aanroep steeds tussen stond O-)

En als je geen converter-functie hebt, maar hem wel 3x kan gebruiken, dan schrijf je hem toch? 2x copy-paste = goed, 3x = refactor...

[ Voor 26% gewijzigd door MBV op 29-10-2010 17:51 ]

Pagina: 1 ... 38 ... 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. :)