functioneel programmeren in Java? WTF?!!! vandaar die banaan zeker
Verwijderd
Niks mis met functioneel programmeren in Java. Gewoon heel veel iterators gebruiken. En een mooi typesysteem met hogere-ordefuncties nabouwen.
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.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
Doel je hier op?Verwijderd schreef op zaterdag 23 oktober 2010 @ 06:41:
Ik vind dit wel een bijzonder slecht programmeervoorbeeld:
[afbeelding]
Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire
Verwijderd
Tinctorius had het helemaal goed
[ Voor 13% gewijzigd door Verwijderd op 25-10-2010 21:40 ]
Oeh, Harm Bakker... Met zijn beruchte BakkerSort algorithme.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....
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Functioneel programmeren in Java? Hoe moet ik dat voor me zien? 
.edit: oh, een nieuwe pagina.
.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.
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.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.
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 ]
En op de voorkant staat nog wel Imperatief programmeren (overigens in C).MBV schreef op maandag 25 oktober 2010 @ 20:53:
functioneel programmeren in Java? WTF?!!! vandaar die banaan zeker
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 (
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.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.
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.
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 ]
Tuurlijk is het mogelijk (iets over Turing completeness, en zo). Het is alleen niet zo'n bijster snugger idee.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.
"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.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.
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.
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'
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.
@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.
Bogosort is grappig, quantum bogosort is geweldig! werkt ook nog eens in O(n) tijd.
Zie Wikipedia: Bogosort
Zie Wikipedia: Bogosort
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
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.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.
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)
Wel even alle methoden static maken heLye 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.
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.Ik ben veel blijer dat ik C kreeg dan Java voor imperatief, ben gek op pointers
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
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.
Verwijderd
Dat is niet helemaal waar, alleen worden de types in PHP @ runtime gedefinieerd.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)
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?
"Dit is geen boolean"Verwijderd schreef op dinsdag 26 oktober 2010 @ 15:40:
Wat denk je dat de uitkomst is?
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 ]
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Dat weet ik, dat weet jij, maar vertel dat aan mijn medestudent...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?
Volgens mij is het vetgedrukte een citaat van de klasgenoot, niet iets wat hij zelf wil bewerenVerwijderd schreef op dinsdag 26 oktober 2010 @ 15:40:
[...]
Dat is niet helemaal waar, alleen worden de types in PHP @ runtime gedefinieerd.
Verwijderd
OMG... Ander vak kiezen..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)
"If number - 1 is even, result is odd"...

Verwijderd
Zou nog mooier zijn als ie het had gedaan in een taal waar pass by reference de default isVerwijderd schreef op dinsdag 26 oktober 2010 @ 17:26:
[...]
OMG... Ander vak kiezen..
"If number - 1 is even, result is odd"...
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
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.
code:
1
2
3
| for(;;) { } |
Bam en toen lag tweakers plat
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
En de logica klopt ook gewoon, geen speld tussen te krijgenFreeaqingme schreef op dinsdag 26 oktober 2010 @ 20:51:
Nouja, hij had 't iig gedocumenteerd da's in ieder geval iets.
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
Dit kwam ik laatst tegen: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"; } }
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
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
Bah, ranzig stukje code, derhalve een prachtig voorbeeld
[ 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
In javascript is een return niet verplicht. Daarom wordt er ook geen warning voor gegeven. Standaard wordt een "undefined" teruggegeven.Matis schreef op dinsdag 26 oktober 2010 @ 21:14:
Ik mag aannemen dat de javascript-parser er een waarschuwing over geeft.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
JavaScript:
1
2
3
| function isEven(n) { return n == 0 || !isEven(n - (n/Math.abs(n))); } |
Zoiets?

Ipsa Scientia Potestas Est
NNID: ShinNoNoir
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; } |
Waar ik op mijn werk regelmatig tegenaan loop:
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
Ach, ondanks dat vermaak ik me prima.
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

[ Voor 16% gewijzigd door MBV op 26-10-2010 22:37 ]
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):
Maar in jouw geval is het juist op geen enkele manier optimaler
Java:
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.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; } } |
Maar in jouw geval is het juist op geen enkele manier optimaler
/zeurmodus
In de echte code staat dan toch wel in de comments uitgelegt waarom je de tekst eerst checked enzo?
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
Ik check gewoon altijd bitwise... Als de least significant bit 1 is dan is het getal oneven en anders oneven.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?
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.
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 ]
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.
Ahh iemand die les heeft gehad van Prof. Drs. Anne KaldewaijBugBoy 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; }
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
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.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.
[ 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.
Volgens mij moet dit ook makkelijker kunnen maarja 
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).
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 ]
waarom zet je er geen array in? Zo kan het voorkomen dat je wel een vraag, maar geen antwoord hebt bijvoorbeeld?
dus
dus
PHP:
1
| $rowdata[] = $Answers[$Question[0]]; |
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
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:
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
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 cijfer | V1 opmerking | V2 cijfer | V2 opmerking | V3 cijfer | V3 opmerking | V4 cijfer | V4 opmerking |
8 | bla | 10 | 2 | bla | 6 | ||
6 | 8 | bla | 10 |
[ Voor 30% gewijzigd door Noxious op 27-10-2010 14:13 ]
Dan voeg je dan toch gewoon een lege rij toe? Of denk ik nu te simpel?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.
https://niels.nu
Niet in Python:.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.
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
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.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?
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.
Ik zat me vooral af te vragen of het anders/overzichtelijker kon maar ik denk dat daar niet veel kansen zitten.
.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.
Het hangt dan ook van de taal af (Lijstje hier). Zo hangt het in Haskell af of je mod of rem gebruikt.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
[ Voor 8% gewijzigd door RayNbow op 27-10-2010 14:42 ]
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
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'
En los of het korter kan... Waarom werken met herinneringen? Mag ie niet vergeten dat het eigenlijk om de remainder gaat?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
Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.
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
JavaScript:
toch?
1
2
3
| isEvenNumber: function (number) { return ((number % 2) == 0) && (number >= 0); } |
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)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
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.
Verwijderd
Zo te zien doen ook alleen ALGOL-68, ISO Pascal en Scheme het goed.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.
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..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)
[ Voor 47% gewijzigd door Verwijderd op 27-10-2010 15:30 ]
-2 is niet even?418O2 schreef op woensdag 27 oktober 2010 @ 15:16:
JavaScript:toch?
1 2 3 isEvenNumber: function (number) { return ((number % 2) == 0) && (number >= 0); }
https://niels.nu
Volgens zijn orginele functie niet... Is wellicht een reden voor.
de functie returned niets als de input kleiner dan 0 is.. Apart
de functie returned niets als de input kleiner dan 0 is.. Apart
[ Voor 34% gewijzigd door 418O2 op 27-10-2010 15:50 ]
De functie geeft dan false terug, dus het is wel wat.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
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); } |
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.
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..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.
edit: compiler staat op -Wall
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.
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
https://niels.nu
Verwijderd
Héé, da's een verrekt goed plan... Ga ik onthouden!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
Verwijderd
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?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.
En daarna een paar weken niet meer op GoT kunnenVerwijderd schreef op woensdag 27 oktober 2010 @ 17:32:
[...]
Héé, da's een verrekt goed plan... Ga ik onthouden!
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.”
Beetje refactormycode idee, maar dan beterder?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
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
Bezoek dit eens met Opera: http://www.linksysbycisco.com/NL/nl/support/WAG354G
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?
[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.
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.
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...

Nu de rest nog...
418O2 schreef op woensdag 27 oktober 2010 @ 15:16:
[...]
JavaScript:toch?
1 2 3 isEvenNumber: function (number) { return ((number % 2) == 0) && (number >= 0); }
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
Verwijderd
En bij negatieve getallen?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.
edit; ah, vandaar de "If number - 1 is even, result is odd " in Lye in "[alg] Slechtste programmeervoorbeelden d..." ?
[ Voor 14% gewijzigd door Verwijderd op 28-10-2010 16:16 ]
Code heb ik al aangepast; zat vol fouten, maar nu werkt-ie eindelijkVerwijderd 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..." ?
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
Verwijderd
De termen 'even' en 'oneven' slaan alleen op gehele getallen en op bepaalde ℝ → ℝ functies.
Het mag als je er haakjes omheen zet.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)
JavaScript:
1
| (5).isEven(); |
Of met een spatie:JanDM schreef op donderdag 28 oktober 2010 @ 20:28:
[...]
Het mag als je er haakjes omheen zet.
JavaScript:
1 (5).isEven();
JavaScript:
1
| 5 .isEven(); |
(Hetzelfde is ook het geval in Python)
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
lol, met spatie mag het wel?RayNbow schreef op donderdag 28 oktober 2010 @ 21:45:
[...]
Of met een spatie:
JavaScript:
1 5 .isEven();
(Hetzelfde is ook het geval in Python)

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
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.
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 ]
Je kan een getal maken zonder een getal achter de komma, maar wel met een komma. (punt, eigenlijk)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?
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
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.
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.Verwijderd schreef op vrijdag 29 oktober 2010 @ 00:52:
Ja, ik had het opgezochtMet 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.
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
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.
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 ]
Je mag btw ook dit schrijven: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.
JavaScript:
1
| 5..isEven() |
(Idem in Python, maar in Python is 5 een int en 5. een float)
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Lekker bezig:
code:
1
2
3
4
| debug('isAuthorized?=" + Manager.instance.authorized); if ( !Manage.instance ) { // code dat niet wordt uitgevoerd } |
Zodat heel veel bestaande code ineens breekt? Ja, dat is handig.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.
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.
Waarom zou die breken? Ik neem aan dat je die stricte modus expliciet aan moet geven..oisyn schreef op vrijdag 29 oktober 2010 @ 12:16:
[...]
Zodat heel veel bestaande code ineens breekt? Ja, dat is handig.
Verwijderd
C++:
Vind het stukje waar mijn teamgenoten verzuimd hebben C++ te leren.
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()); } } |
Oh, dat stukje over strikte mode had ik even gemist. Moet jij trouwens niet wat compile errors fixen?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.
[ 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.
De async-write van een lokale variable die weg wordt gegooid zodra de scope voorbij is? Gaat toch meestal goed?Verwijderd schreef op vrijdag 29 oktober 2010 @ 17:11:
C++:Vind het stukje waar mijn teamgenoten verzuimd hebben C++ te leren.
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()); } }
Oh ja, maak er een switch-case van ipv zulke lange condities

[ Voor 46% gewijzigd door MBV op 29-10-2010 17:22 ]
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.Verwijderd schreef op vrijdag 29 oktober 2010 @ 17:11:
Vind het stukje waar mijn teamgenoten verzuimd hebben C++ te leren.
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 wetenMBV 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?
[ 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.
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 ]
@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?
@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?

[ Voor 21% gewijzigd door MBV op 29-10-2010 17:27 ]
Ja, hoe moeten wij nou gaan raden wat daadwerkelijk de bedoeling is?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.
8 * 2^-(resultaat van aanroep), maar idd.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?
[ 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.
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 ]
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.
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 
En als je geen converter-functie hebt, maar hem wel 3x kan gebruiken, dan schrijf je hem toch? 2x copy-paste = goed, 3x = refactor...

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 ]
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.
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.