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

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

MBV schreef op zaterdag 04 april 2009 @ 22:46:
de PHP compiler is dat ding wat je van Zend.com gratis kan downloaden, dat lijkt me duidelijk.
Er is anders ook de Zend Optimizer die ik bij veel hosters geinstalleerd heb zien staan. Geen idee of die er wat mee doet (maar Zend kennende niet ;))

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!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Sebazzz schreef op zaterdag 04 april 2009 @ 18:06:
[...]

Hoeveel mensen compileren nou een PHP script in plaats van deze gewoon direct te laten uitvoeren als plain text bestand?
Iedereen, want PHP doet dat vanaf versie 4 sowieso. ;)

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16:29

Sebazzz

3dp

AtleX schreef op zondag 05 april 2009 @ 11:19:
[...]

Iedereen, want PHP doet dat vanaf versie 4 sowieso. ;)
Dan zet je hem alsnog al plain text bestand op de server, niet als half voorverteerd gevaL

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


Acties:
  • 0 Henk 'm!

Verwijderd

Sebazzz schreef op zondag 05 april 2009 @ 18:23:
[...]

Dan zet je hem alsnog al plain text bestand op de server, niet als half voorverteerd gevaL
Dat hoeft helemaal niet hoor. Het is veel efficienter om 1x te compileren en daarna direct het resultaat vanuit storage de engine in te gooien. Hiervoor zijn genoeg mogelijkheden.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

Sebazzz schreef op zondag 05 april 2009 @ 18:23:
[...]

Dan zet je hem alsnog al plain text bestand op de server, niet als half voorverteerd gevaL
Negeer je nou expres al mijn posts?

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!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Dat gezeur over die snelheid van een php script dat in 99% van de gevallen totaal niets uitmaakt... waarschijnlijk duurt de disk seek langer dan het hele script.

Acties:
  • 0 Henk 'm!

Verwijderd

Tuurlijk, er is een verschil tussen het werkelijk nut bespreken (wat in dit voorbeeld geen zin heeft), of een algemene discussie over wat de compiler er mee zou doen/doet :).

Verder was het totaal niet mijn bedoeling om weer een hetze rond PHP te beginnen, die hebben we hier al genoeg...mijn excuses.

Acties:
  • 0 Henk 'm!

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 02-09 21:51
Tijdje terug ook een mooi grapje tegen gekomen. Moest echt 2x kijken wat er gebeurde (Overigens, met LoadXml kun je hele handige dingen doen m.n. i.c.m. namespaces, maar hier was dat niet het geval).

C#:
1
2
3
4
5
6
7
8
9
10
11
12
private XmlDocument getData(){
  XmlDocument result = new XmlDocument();
  //plaats een boel dingen in result xml
  return result;
}


private void foo(){
  XmlDocument xml = new XmlDocument();
  xml.LoadXml(this.getData().InnerXml);
  //ga weer vrolijk iets doen met je xml document
}


:|

Lets remove all security labels and let the problem of stupidity solve itself


Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

2 verschillende functies toch? De ene geeft iets terug, de andere niets O-)

Kan het niet zijn dat hij zijn xml gewoon saved in de foo functie? Zou nog ietwat steek houden.

[ Voor 41% gewijzigd door boe2 op 06-04-2009 09:56 ]

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


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Volgens mij gaat het erom dat hij een XMLDocument convert naar een XMLDocument met die LoadXML functie; die natuurlijk compleet overbodig is.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 10-09 11:15
Boeboe schreef op maandag 06 april 2009 @ 09:53:
2 verschillende functies toch? De ene geeft iets terug, de andere niets O-)

Kan het niet zijn dat hij zijn xml gewoon saved in de foo functie? Zou nog ietwat steek houden.
Het had zo gemoeten:
C#:
1
2
3
4
5
6
7
8
9
10
11
private XmlDocument getData(){
  XmlDocument result = new XmlDocument();
  //plaats een boel dingen in result xml
  return result;
}


private void foo(){
  XmlDocument xml = this.getData();
  //ga weer vrolijk iets doen met je xml document
}

Denk ik.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

ikke007 schreef op maandag 06 april 2009 @ 08:49:
Tijdje terug ook een mooi grapje tegen gekomen. Moest echt 2x kijken wat er gebeurde (Overigens, met LoadXml kun je hele handige dingen doen m.n. i.c.m. namespaces, maar hier was dat niet het geval).

C#:
1
2
3
4
5
6
7
8
9
10
11
12
private XmlDocument getData(){
  XmlDocument result = new XmlDocument();
  //plaats een boel dingen in result xml
  return result;
}


private void foo(){
  XmlDocument xml = new XmlDocument();
  xml.LoadXml(this.getData().InnerXml);
  //ga weer vrolijk iets doen met je xml document
}


:|
Vind dat niet echt een slecht programmeervoorbeeld, Dit soort constructies zijn vaak het gevolg van 23 keer refactoren, aanpassen, method extracten etc, etc. Dan ben je het overzicht ff kwijt wat die methode nou ook al weer precies deed, en dan sluipen zulke onlogische dingen er in.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Wijnbo schreef op maandag 06 april 2009 @ 11:28:
[...]


Vind dat niet echt een slecht programmeervoorbeeld, Dit soort constructies zijn vaak het gevolg van 23 keer refactoren, aanpassen, method extracten etc, etc. Dan ben je het overzicht ff kwijt wat die methode nou ook al weer precies deed, en dan sluipen zulke onlogische dingen er in.
Net zoiets wat ik tegen kwam laatst:

PHP:
1
2
3
4
5
6
7
$Array = Array();

$Result = $this->Query->fetch_object;
foreach($Result as $Key => $Value)
{
  $Array[$Key] = $Value;
}

Even uit het hoofd, toch maar even aangepast naar fetch_assoc :P

Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ik bedacht me laatst nog een leuke, was iemand die een select deed op een table van 800 items, vervolgens ging hij de results in een array stoppen, en daar de laatste 10 van displayen :+

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
.oisyn schreef op zondag 05 april 2009 @ 01:18:
[...]

Er is anders ook de Zend Optimizer die ik bij veel hosters geinstalleerd heb zien staan. Geen idee of die er wat mee doet (maar Zend kennende niet ;))
Om die nog even te beantwoorden: Zend Optimizer heb je nodig als je werkt met php files die zijn gecompiled door Zend Guard. Als je bijv. Myreact download zijn alle files al gecompiled (en encrypted?) en die kun je enkel draaien als je Zend Optimizer hebt. Verder doet t niks zover ik kon vinden. Meeste hosters hebben dit inderdaad wel geinstalleerd staan (is gratis ook).

Acties:
  • 0 Henk 'm!

  • RetroTycoon
  • Registratie: Juli 2008
  • Laatst online: 18:24
raptorix schreef op woensdag 08 april 2009 @ 17:16:
Ik bedacht me laatst nog een leuke, was iemand die een select deed op een table van 800 items, vervolgens ging hij de results in een array stoppen, en daar de laatste 10 van displayen :+
Wat natuurlijk erg efficiënt is :P

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
raptorix schreef op woensdag 08 april 2009 @ 17:16:
Ik bedacht me laatst nog een leuke, was iemand die een select deed op een table van 800 items, vervolgens ging hij de results in een array stoppen, en daar de laatste 10 van displayen :+
RetroTycoon schreef op vrijdag 10 april 2009 @ 20:03:
[...]

Wat natuurlijk erg efficiënt is :P
Schrijf dit soort dingen niet te snel af als inefficient. soms kan er een bedoeling achterzitten...

Ben wel eens in omgevingen terechtgekomen waarbij een sql verbinding opbouwen zo duur was dat het lonender was om het kleine resultaat ( 800 resultaten ) te cachen op de webserver dan om elke keer weer een roundtrip naar de db-server te maken om een net iets andere weergave van die 800 resultaten te tonen.

Als het enkel en alleen maar om de laatste 10 resultaten ging dan is het nutteloos ( want om te controleren of het echt de laatste 10 zijn moet je toch een roundtrip naar de db doen ), als er meer vanuit die 800 resultaten gewerkt werd kan het zin hebben...

Acties:
  • 0 Henk 'm!

Verwijderd

Ik kwam van de week nog een leuke tegen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function foo($bar) {
 // heel erg niet zo boeiende zaken
 unset($bar);
}

unset($bar);
while (/* voorwaarde */) {
 if (/* een andere voorwaarde */) {
  $bar = 'b';
 }
 foo($bar);
}
?>


De progger in kwestie kon niet begrijpen waarom z'n $bar alsmaar 'b' bleef... 8)7

Acties:
  • 0 Henk 'm!

Verwijderd

Hij zal de eerste niet zijn die een & voor z'n parameters vergeet, ik heb ook wel eens een flink kwartier lopen zoeken de oplossing van zo'n bug. :X

Acties:
  • 0 Henk 'm!

Verwijderd

Noujah dat is tot daar aan toe, maar deze persoon snapte het hele concept scope niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Hier had een heel PHP-bash-verhaal kunnen staan

Daarom zet ik het het liefste ook in zn 'strictste' modus. Dan word je vanzelf in de goede richting gedwongen.

Ik heb na een paar avonden zuipen ook nog wel eens van die grappen als eh:

PHP:
1
if($variabele='waarde')


en dan nog een uur lopen zoeken ook 8)7. Dan weet je ook vanzelf dat je beter een dagje kan gaan slapen

[ Voor 14% gewijzigd door Verwijderd op 11-04-2009 16:39 ]


Acties:
  • 0 Henk 'm!

  • RetroTycoon
  • Registratie: Juli 2008
  • Laatst online: 18:24
Verwijderd schreef op vrijdag 10 april 2009 @ 21:31:
Noujah dat is tot daar aan toe, maar deze persoon snapte het hele concept scope niet.
Ik snap het ook pas sinds kort hoor ;) (niet eerder nodig), maar classes is nog echt onbekend spul voor mij.

Acties:
  • 0 Henk 'm!

Verwijderd

Nofi, maar scope is een belangrijk concept in alle aspecten van een programmeertaal, niet alleen het OO aspect.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op vrijdag 10 april 2009 @ 21:26:
Hij zal de eerste niet zijn die een & voor z'n parameters vergeet, ik heb ook wel eens een flink kwartier lopen zoeken de oplossing van zo'n bug. :X
Die & gaat niet eens werken. Unset doet namelijk een unlink op de identifier zelf, niet op de daadwerkelijke waarde. De $bar in de functie is niet dezelfde als de $bar buiten de functie. Ze verwijzen slechts naar dezelfde waarde, maar het zijn verschillende variabelen. Dat is niet alleen een scope iets, dit werkt ook niet:

PHP:
1
2
3
4
$a = 4;
$b = &$a;
unset($b);
echo $a;

De output is gewoon 4.

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!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Verwijderd schreef op zaterdag 11 april 2009 @ 16:38:
Hier had een heel PHP-bash-verhaal kunnen staan

Daarom zet ik het het liefste ook in zn 'strictste' modus. Dan word je vanzelf in de goede richting gedwongen.

Ik heb na een paar avonden zuipen ook nog wel eens van die grappen als eh:

PHP:
1
if($variabele='waarde')


en dan nog een uur lopen zoeken ook 8)7. Dan weet je ook vanzelf dat je beter een dagje kan gaan slapen
Ik laat overal een spatie tussen, dan zie je fouten veel vlugger.

PHP:
1
if ( $variabele = 'waarde' )

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Dat is zeker waar!

Mijn forum-programmeren is ook een stuk minder secuur dan wat ik normaal gesproken doe :P. Maar inderdaad, ik vergeet dat nog wel eens als ik snel iets wil maken, waardoor ik onnodig zoek

Acties:
  • 0 Henk 'm!

  • DJ-Visto
  • Registratie: Maart 2009
  • Laatst online: 27-08 10:26

DJ-Visto

Aye aye, sir!

Dit vindt ik ook vrij dom (van mij zelf)

PHP:
1
$variable = "1";

inplaats van
PHP:
1
$variable = 1;


Vrij dom

Acties:
  • 0 Henk 'm!

  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 15:52

ThunderNet

Flits!

DJ-Visto schreef op zondag 12 april 2009 @ 14:39:
Dit vindt ik ook vrij dom (van mij zelf)

PHP:
1
$variable = "1";

inplaats van
PHP:
1
$variable = 1;


Vrij dom
Hangt er helemaal vanaf natuurlijk. Aangezien php niet aan typechecking doet, ondesteun ik mezelf op deze manier.
Als ik in een variabele een string heb, en ik wil dat het zich gedraagd als een string etc. Dan gebruik ik gerust "1". Wil ik dat het een int is, gebruik ik gerust 1.
Op die manier kun je zelf makkelijk zien in de code wat voor type je verwacht/gebruikt :)

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


Acties:
  • 0 Henk 'm!

Verwijderd

@hierboven, hoeft inderdaad niet dom te zijn, als de variable ook een andere waarde dan een nummer aan kan nemen.
PHP:
1
2
3
<?php
$variable = "banaan";
?>

Dit hier is wel vrij dom. Niet zo'n helder idee van mij :+
Proberen een pagina te refreshen via asp.
ASP.NET Visual Basic:
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
dim connSleep, sleep, sql, q
q=1
do until q = 5
q=q+1
    Set connSleep = CreateObject("ADODB.Connection") 
   
   connSleep.Open Application("Connection")

    sleep = 3
    
    connSleep.commandTimeout = sleep + 5 
    
    sql = "WAITFOR DELAY '00:00:" & right(clng(sleep),2) & "'" 
 
    connSleep.Execute sql,,129 
 
    connSleep.close
    Set connSleep = Nothing 

Helaas dat ASP server side is. 7(8)7

[ Voor 44% gewijzigd door Verwijderd op 12-04-2009 16:28 ]


Acties:
  • 0 Henk 'm!

  • DJ-Visto
  • Registratie: Maart 2009
  • Laatst online: 27-08 10:26

DJ-Visto

Aye aye, sir!

ThunderNet schreef op zondag 12 april 2009 @ 14:58:
[...]


Hangt er helemaal vanaf natuurlijk. Aangezien php niet aan typechecking doet, ondesteun ik mezelf op deze manier.
Als ik in een variabele een string heb, en ik wil dat het zich gedraagd als een string etc. Dan gebruik ik gerust "1". Wil ik dat het een int is, gebruik ik gerust 1.
Op die manier kun je zelf makkelijk zien in de code wat voor type je verwacht/gebruikt :)
Ik had het laatst nodig gewoon om alles op 1 te zetten weet niet meer precies, maar zo is het makkelijk

Acties:
  • 0 Henk 'm!

  • netvor
  • Registratie: September 2000
  • Laatst online: 08-04-2024
Verwijderd schreef op zondag 12 april 2009 @ 15:24:
Dit hier is wel vrij dom. Niet zo'n helder idee van mij :+
Proberen een pagina te refreshen via asp.
Laat je nu je applicatie een tijdje slapen door middel van een blocking call naar de DBMS, met nog eens een prachtig stukje non-standard SQL als klap op de vuurpijl? Dat vind ik persoonlijk een grotere WTF dan het verwarren van de serverside en de clientside.

Computer Science: describing our world with boxes and arrows.


Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

netvor schreef op dinsdag 14 april 2009 @ 09:35:
[...]


Laat je nu je applicatie een tijdje slapen door middel van een blocking call naar de DBMS, met nog eens een prachtig stukje non-standard SQL als klap op de vuurpijl? Dat vind ik persoonlijk een grotere WTF dan het verwarren van de serverside en de clientside.
Lijkt me dat je op een drukke site op die manier ook je connection pool binnen no time leeg hebt en de boel volledig inzakt...

Maar voor sleep heb ik ook wel spannende dingen gezien hoor (zo uit mijn hoofd):
C#:
1
2
3
4
5
6
DateTime before = new DateTime();
TimeSpan ts;
while(true) {
 ts = new DateTime().Substract(before);
 if(ts.Seconds > 10) { break; }
}


En dan afvragen waarom de performance zo slecht is :X

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


Acties:
  • 0 Henk 'm!

  • !null
  • Registratie: Maart 2008
  • Laatst online: 11-09 14:00
Haha beide creatief hoor. Kent ASP geen sleep functie?

Ampera-e (60kWh) -> (66kWh)


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Zoijar schreef op zondag 05 april 2009 @ 23:58:
Dat gezeur over die snelheid van een php script dat in 99% van de gevallen totaal niets uitmaakt... waarschijnlijk duurt de disk seek langer dan het hele script.
Ik hoop toch van harte dat op een beetje productie site je niet elke request dat script van disk zit te laden :)
Grijze Vos schreef op maandag 06 april 2009 @ 10:09:
Volgens mij gaat het erom dat hij een XMLDocument convert naar een XMLDocument met die LoadXML functie; die natuurlijk compleet overbodig is.
Vermoed dat ze een clone willen hebben.
Gomez12 schreef op vrijdag 10 april 2009 @ 20:16:
Ben wel eens in omgevingen terechtgekomen waarbij een sql verbinding opbouwen zo duur was dat het lonender was om het kleine resultaat ( 800 resultaten ) te cachen op de webserver dan om elke keer weer een roundtrip naar de db-server te maken om een net iets andere weergave van die 800 resultaten te tonen.
Sowieso wordt er tegenwoordig veel meer naar "chunky" inplaats van "chatty" communicatie gegaan. Het idee is dat geheugen dirt cheap is, en je door zaken in chunks op te halen en deze data te cachen je SQL servers (die toch vaak een bottleneck zijn) onlasten. Niet dat dat in het beschreven voorbeeld het geval was, dat klonk meer als iemand die LIMIT nog niet ontdekt had :)

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Modbreak:We hebben inderdaad liever geen voorbeelden hier van het forum.

[ Voor 99% gewijzigd door Woy op 16-04-2009 14:53 ]

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

NMe schreef op woensdag 01 oktober 2008 @ 13:31:

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. :)
:*

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Ypho
  • Registratie: April 2008
  • Laatst online: 15:40

Ypho

Allround Nerd

!null schreef op dinsdag 14 april 2009 @ 10:36:
Haha beide creatief hoor. Kent ASP geen sleep functie?
Jawel, zie hier

🃏 TCG Codex - Je volledige TCG verzameling in je broekzak ::: 🍏 TCG Codex for iOS ::: 🤖 TCG Codex for Android


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Tsja, het blijft lastig om na te denken voordat je code schrijft.

Sowieso, op het moment dat je een stuk code kopieert om ergens anders te plakken (al dan niet met kleine aanpassingen) moet je je even goed achter de oren krabben.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
CodeCaster schreef op donderdag 16 april 2009 @ 14:37:
Tsja, het blijft lastig om na te denken voordat je code schrijft.

Sowieso, op het moment dat je een stuk code kopieert om ergens anders te plakken (al dan niet met kleine aanpassingen) moet je je even goed achter de oren krabben.
Ligt eraan hoe je je code opgebouwd hebt, vindt ik. Ik kan zo complete packages copypasta-en in andere projecten in veel gevallen (Java btw), en ze in de bestaande code aanroepen zonder problemen.

Maar dat zijn dan ook vaak applicaties, ipv PHP scripts die vaak meer 'snel even' in elkaar gezet zijn.
Verwijderd schreef op zaterdag 11 april 2009 @ 16:38:
Ik heb na een paar avonden zuipen ook nog wel eens van die grappen als eh:

PHP:
1
if($variabele='waarde')


en dan nog een uur lopen zoeken ook 8)7. Dan weet je ook vanzelf dat je beter een dagje kan gaan slapen
Zou het - als dit probleempje vaker voorkomt overigens - niet handig zijn om een gewoonte van de 'omgekeerde' vergelijking te maken?

PHP:
1
2
if ('waarde' = $variabele) // geeft een fout
if ('waarde' == $variabele) // werkt

[ Voor 30% gewijzigd door YopY op 16-04-2009 15:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Die omgekeerde vergelijking werkt inderdaad goed om dat probleem te voorkomen, maar is voor ons westerse (van links naar rechts lezende) mensen niet logisch.

Je wilt immers '$variabele' vergelijken met een vooraf vastgezette waarde, en niet andersom.
Nu komt het programmeertechnisch op precies hetzelfde neer (bij == of ===), maar het oogt onlogisch ;).

Acties:
  • 0 Henk 'm!

  • netvor
  • Registratie: September 2000
  • Laatst online: 08-04-2024
Hetzelfde geldt voor if("literal".equals(myString)) in Java, dat wordt ook vaak genoemd als veilige vervanger voor myString.equals("literal") ivm NPE's. Helemaal mee eens, maar voor mensen die gewoonlijk van links naar rechts lezen is het inderdaad niet logisch. Maar ach, het past wel bij de taal: package names zijn immers ook omgedraaide FQDN's. ;)

Computer Science: describing our world with boxes and arrows.


Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 14-09 22:49

bomberboy

BOEM!

netvor schreef op donderdag 16 april 2009 @ 15:48:
Hetzelfde geldt voor if("literal".equals(myString)) in Java, dat wordt ook vaak genoemd als veilige vervanger voor myString.equals("literal") ivm NPE's. Helemaal mee eens, maar voor mensen die gewoonlijk van links naar rechts lezen is het inderdaad niet logisch.
Een goede editor IDE kan je meestal wel een waarschuwing laten geven indien je de = ipv == fout zou maken. Dat lijkt mij op zich handiger.

Het voorbeeldje dat je hier aanhaalt met de .equals vind ik persoonlijk eigenlijk net niet goed. Indien het een probleem vormt betekent dit meestal dat de String waarmee je vergelijkt niet null mag zijn. Dan moet je garanderen dat dat niet kan. Of indien die wel null mag zijn dan moet je daar rekening mee houden.
Door het zo omgekeerd te doen zorg je ervoor dat een probleem minder snel gedetecteerd wordt en dat het ook moeilijker wordt om het probleem te vinden.

Een NullPointerException is veel meer een wake-up call dan een if die af en toe eens onverwacht fout gaat.
my 0.02c.

Zelf onlangs nog tegen volgende beginnersfout aangelopen:
Java:
1
2
3
4
5
6
7
//before if
if (condition)
  invokeMethod();
else
  System.out.println("Heel even println gebruiken om te debuggen...");
  dosomethingElse();
//after-if


En me maar blijven afvragen waarom doSomethingElse() niet meer altijd aangeroepen werd...

edit: idd, goed gezien kenneth

[ Voor 1% gewijzigd door bomberboy op 16-04-2009 16:48 . Reden: foutje ]


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

bomberboy schreef op donderdag 16 april 2009 @ 16:01:
En me maar blijven afvragen waarom doSomethingElse() niet meeraltijd aangeroepen werd...
Toch :?

Een van de redenen dat wij in onze styleguide hebben staan dat we altijd accolades om een block gebruiken, ook al is het een block van een regel.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

netvor schreef op donderdag 16 april 2009 @ 15:48:
Hetzelfde geldt voor if("literal".equals(myString)) in Java, dat wordt ook vaak genoemd als veilige vervanger voor myString.equals("literal") ivm NPE's. Helemaal mee eens, maar voor mensen die gewoonlijk van links naar rechts lezen is het inderdaad niet logisch. Maar ach, het past wel bij de taal: package names zijn immers ook omgedraaide FQDN's. ;)
Ach, new int[1][2][3] is ook verkeerd om. Elk element in de buitenste array is dan een int[2][3] en niet een int[1][2]. Een notatie als new [1][2][3]int had dan logischer geweest, dat kun je in je hoofd gewoon parsen als [1] ( [2] ( [3] (int))), oftewel "een array van 1 (array van 2 (array van 3 ints)s)s".

Nou hebben de meeste mensen hier niet veel moeite mee, maar ik ben bezig met een taal waarin een int[string] een hashmap is met string keys en int values. Maar hoe zit het dan met dit?
code:
1
2
int[string][] a;
int[][string] b;

a is hier een map van string naar int-arrays, terwijl b een array is van string-naar-int-maps. Intuitief gezien zo je juist zeggen dat het precies andersom is 8)7

[ Voor 24% gewijzigd door .oisyn op 16-04-2009 16:06 ]

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!

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

.Gertjan.

Owl!

netvor schreef op donderdag 16 april 2009 @ 15:48:
Hetzelfde geldt voor if("literal".equals(myString)) in Java, dat wordt ook vaak genoemd als veilige vervanger voor myString.equals("literal") ivm NPE's. Helemaal mee eens, maar voor mensen die gewoonlijk van links naar rechts lezen is het inderdaad niet logisch. Maar ach, het past wel bij de taal: package names zijn immers ook omgedraaide FQDN's. ;)
Als je eenmaal gewend bent aan die notatie is hij juist heel fijn. Je hoeft dan de variabele niet meer op null te checken.

C#:
1
2
3
4
bool isEqual = false;
if(myVar != null) {
 isEqual = myVar.equals("MYTEXT");
}

of
C#:
1
bool isEqual = "MYTEXT".equals(myVar);

Uiteraard werkt dit ook met constanten. Als je equals op de constante gebruikt in plaats van op de variabele scheelt het je een if (of een mogelijke null pointer exception als je van goed vertrouwen bent en de if skipt).

Ik gebruik nu al enige tijd het laatste voorbeeld en dat werkt stukken beter. Heb het liefst zo min mogelijk overbodige code. Checks op NULL zijn helaas nodig, maar leveren soms overbodig veel code op. Gelukkig zit er nu in .NET ook String.IsNullOrEmpty(), wat ook fijner werkt dan if(myVar == null || myVar.equals("")).

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


Acties:
  • 0 Henk 'm!

Verwijderd

.Gertjan. schreef op donderdag 16 april 2009 @ 16:06:
[...]


Als je eenmaal gewend bent aan die notatie is hij juist heel fijn. Je hoeft dan de variabele niet meer op null te checken.

C#:
1
2
3
4
bool isEqual = false;
if(myVar != null) {
 isEqual = myVar.equals("MYTEXT");
}

of
C#:
1
bool isEqual = "MYTEXT".equals(myVar);

Uiteraard werkt dit ook met constanten. Als je equals op de constante gebruikt in plaats van op de variabele scheelt het je een if (of een mogelijke null pointer exception als je van goed vertrouwen bent en de if skipt).

Ik gebruik nu al enige tijd het laatste voorbeeld en dat werkt stukken beter. Heb het liefst zo min mogelijk overbodige code. Checks op NULL zijn helaas nodig, maar leveren soms overbodig veel code op. Gelukkig zit er nu in .NET ook String.IsNullOrEmpty(), wat ook fijner werkt dan if(myVar == null || myVar.equals("")).
Eigenlijk zou je al goed moeten gaan denken of je niet iets 'verkeerd' doet als je direct gaat vergelijken op constante waarden. 9 van de 10 gevallen kan je die waarden extracten naar een const o.i.d., toch?

Acties:
  • 0 Henk 'm!

  • Bob
  • Registratie: Mei 2005
  • Laatst online: 14-09 18:19

Bob

Een lelijke hack van mezelf:

C:
1
2
3
4
5
6
7
8
    if(value > 64000){
      value -= 65536;
      printf("altered\n");
    }
    if (value < -64000){
      value += 65536;
      printf("altered\n");
    }


Het probleem zit vrij diep, in het uitlezen en combineren van 4 registers, wat met code gebeurt die niet door mij is geschreven. Soms slaat de waarde van de registers om van neg naar pos of omgekeerd, waardoor het uitlezen van de registers op dat exacte moment slecht afloopt. Dat is mijn gok alleszins, en dit lost het voorlopig op. In de onderliggend code is iets te lezen in de stijl van 'should be single commit' wat het grotendeels verklaart.
Als ik eens tijd teveel heb los ik het wel deftig op, maar dat heb ik al dikwijls tegen mezelf gezegd :)

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

De lama's zijn ook al een tijd gestopt met de allerslechtste aller tijde, dus een mooie title change voor dit topic :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:47
BtM909 schreef op donderdag 16 april 2009 @ 17:08:
De lama's zijn ook al een tijd gestopt met de allerslechtste aller tijde, dus een mooie title change voor dit topic :)
Hoe kom je erbij om slechte met een 'g' te schrijven? :X

[ Voor 0% gewijzigd door BtM909 op 16-04-2009 17:45 ]


Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Slecht spelvoorbeeld, deel 1? :P

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
MBV schreef op donderdag 16 april 2009 @ 17:17:
[...]

Hoe kom je erbij om slechte met een 'g' te schrijven? :X
Misschien heft VNU aandelen in een niet nader te noemen 2e hands boekenwinkel? ;)

Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

Verwijderd schreef op donderdag 16 april 2009 @ 16:49:
[...]


Eigenlijk zou je al goed moeten gaan denken of je niet iets 'verkeerd' doet als je direct gaat vergelijken op constante waarden. 9 van de 10 gevallen kan je die waarden extracten naar een const o.i.d., toch?
Uiteraard, maar stel dat je de waarde in een const hebt staan dan pas je hetzelfde principe toe. Dus:
const.equals(var);

Het was slechts een voorbeeld, en had geen zin om in het voorbeeld aan te moeten duiden dat de string een const was dus heb ik er voor gekozen om gewoon een string te gebruiken.

Ben nu met een project bezig waar men geen booleans in de DB gooit, maar CHAR's dus overal staat:
if(var.equals("Y")), daar zou een const zeker op zijn plaats zijn :)

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


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:47
Ehm, een refactoring naar booleans gebruiken lijkt mij meer op z'n plaats? :X

En "Y" is wel het slechtste voorbeeld: welke constante zou je willen gebruiken die korter is dan 3 tekens? Ook zo'n collega hier die overal voor een constante gebruikt, ik vind het alleen maar lastig en vergeet het 90% van de keren (waarschijnlijk PHP-deformatie ;)).

Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

MBV schreef op donderdag 16 april 2009 @ 18:36:
Ehm, een refactoring naar booleans gebruiken lijkt mij meer op z'n plaats? :X

En "Y" is wel het slechtste voorbeeld: welke constante zou je willen gebruiken die korter is dan 3 tekens? Ook zo'n collega hier die overal voor een constante gebruikt, ik vind het alleen maar lastig en vergeet het 90% van de keren (waarschijnlijk PHP-deformatie ;)).
Refactoring is inderdaad de beste optie, maar het betreft een systeem van ongeveer 9 jaar oud en geschreven in de meest aftandse versie van Java. Ben blij dat het nog draait en ga daar zeker niet aanzitten. Daar is geen tijd en geen geld voor. Het niet gebruiken van booleans is historisch gegroeid omdat Oracle geen bit veld kent en men dacht: "Weet je wat? We maken een char(1) veld".

Gelukkig mag ik het systeem herschrijven en heb ik inmiddels een database connection class gemaakt die wel booleans accepteert en terug geeft.

Het huidige systeem duikt op iedere willekeurige locatie rechtstreeks de DB in en readers/connections gaan dwars door de applicatie lagen heen en ik heb denk ik wel 10 verschillende connectie methodes gezien :')

Waarom zou je geen constante willen gebruiken voor korte waardes? Stel dat je de boel wil omschrijven naar Nederlands (om de een of andere dubieuze reden) dan heb ik geen zin om een replace uit te voeren op "Y" -> "J". Dus dat het onzinnig is om een const te maken ben ik niet met je eens... En als je bijvoorbeeld codes bestaande uit 3 alfanumerieke karakters wilt gebruiken (voor statussen of iets dergelijks), dan is een lijstje met consts wel handig (zeker als je fatsoenlijke code completion hebt).

Maar goed met consts geldt het zelfde als met alle andere dingen, overdaad schaadt.

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


Acties:
  • 0 Henk 'm!

Verwijderd

MBV schreef op donderdag 16 april 2009 @ 18:36:
Ehm, een refactoring naar booleans gebruiken lijkt mij meer op z'n plaats? :X

En "Y" is wel het slechtste voorbeeld: welke constante zou je willen gebruiken die korter is dan 3 tekens? Ook zo'n collega hier die overal voor een constante gebruikt, ik vind het alleen maar lastig en vergeet het 90% van de keren (waarschijnlijk PHP-deformatie ;)).
Het voordeel van een constante is dat je de waarde kan veranderen als dat nodig is, zonder overal de code aan te passen. Geen enkele constante is zo constant dat die nooit aangepast zal worden. ;) Natuurlijk kan je dat opvangen met een IDE, maargoed, dan zit je dus de mogelijkheden van je taal niet te benutten. In dit geval zou je de boel naar booleans kunnen converteren zonder al te veel aan te passen. Je moet natuurlijk bij elke declaratie "char" vervangen door "bool", maar de logica blijft gelijk.

Ook geeft een constante aan wat de waarde betekent. UP_LIMIT en LO_LIMIT is een stuk duidelijker dan 23452 en 3231 overal.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:47
En dát waren reden 2 en 3 om "Y" niet als constante te doen: "Y" is vrij duidelijk (Al had ik zelf "T" gedaan :P), en de debiel die dat gaat wijzigen in "J", "T" of "W" mag op staande voet ontslagen worden.

Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

MBV schreef op donderdag 16 april 2009 @ 20:08:
En dát waren reden 2 en 3 om "Y" niet als constante te doen: "Y" is vrij duidelijk (Al had ik zelf "T" gedaan :P), en de debiel die dat gaat wijzigen in "J", "T" of "W" mag op staande voet ontslagen worden.
Mmm. Of je T of Y moet gebruiken is al een discussie op zich. Als je de DB ook gebruikt voor rapportages dan is Y handiger, omdat je op die manier direct de DB waarde in je rapport kunt gebruiken.

Je moest eens weten wat voor rare requests er soms komen. Stel je hebt een Franse klant die rechtstreeks rapportages op de DB laat draaien. Reken er maar op dat hij een O en N wil ipv een Y en N. En er zijn nou eenmaal developers die klakkeloos doen wat er gevraagd wordt. Het nadeel van het ontslaan van die mensen is dat je zelf die rommel mag opruimen...

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


Acties:
  • 0 Henk 'm!

Verwijderd

MBV schreef op donderdag 16 april 2009 @ 20:08:
En dát waren reden 2 en 3 om "Y" niet als constante te doen: "Y" is vrij duidelijk (Al had ik zelf "T" gedaan :P), en de debiel die dat gaat wijzigen in "J", "T" of "W" mag op staande voet ontslagen worden.
Stel, je wilt dit systeem naar booleans converteren. Wat heb je dan liever als originele code?

Java:
1
2
3
4
5
6
7
8
9
char myValue = getMyValue();

if('Y'.equals(myValue)) { /* ... */ }

// ...

if('N'.equals(myValue)) { /* ... */ }

// ... en nog veel meer van dit soort statements ...

of heb je liever dit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
static final char Y = 'Y';
static final char N = 'N';

char myValue = getMyValue();

if(Y.equals(myValue)) { /* ... */ }

// ...

if(N.equals(myValue)) { /* ... */ }

// ... en nog veel meer van dit soort statements ...

Constanten (of beter gezegd: alles behalve literals) gebruiken is sowieso makkelijker. Je hoeft alleen de definitie van de constanten aan te passen, en de declaratie van de variabelen. De logica blijft exact gelijk.

In dit geval is de naamgeving nogal slecht, maar ik verplaats me even in de originele programmeurs, die deze DB-structuur ook bedacht hebben. ;)

Mochten de waardes in die database ook gebruikt worden in de UI, en je zou graag de boel willen vertalen, dan zul je dus inderdaad de constanten moeten aanpassen. Natuurlijk ga je dan het systeem grondig refactoren, maar in veel gevallen ben je heel blij dat je geen magic values hebt gebruikt.

Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

Tevens is het voordeel van constanten dat je geen foutjes kunt maken (of je moet de verkeerde constante pakken). Nou zal je "Y" meestal wel goed spellen, maar bij langere/minder logische waardes ga je geheid fouten maken. Of als je aan 2 systemen tegelijk werkt het ene systeem "Y" gebruikt en het andere "T", die ga je gegarandeerd door elkaar gooien.

[ Voor 6% gewijzigd door .Gertjan. op 16-04-2009 20:51 ]

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


Acties:
  • 0 Henk 'm!

  • PhoenixT
  • Registratie: December 2003
  • Laatst online: 15-08 18:51
C#:
1
 if ((number / 3 * 2) + (number / 3) == number) 

:P

With PlaneShift since 2003. WC-Grid ftw!


Acties:
  • 0 Henk 'm!

  • RetroTycoon
  • Registratie: Juli 2008
  • Laatst online: 18:24
't Is wel 'n wiskundige :p

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:47
.Gertjan. schreef op donderdag 16 april 2009 @ 20:39:
[...]


Mmm. Of je T of Y moet gebruiken is al een discussie op zich. Als je de DB ook gebruikt voor rapportages dan is Y handiger, omdat je op die manier direct de DB waarde in je rapport kunt gebruiken.
SQL:
1
2
3
4
5
6
7
8
SELECT 
   id, 
   blablabla,
   CASE someBoolean
     WHEN 'T' THEN 'Y' 
     ELSE 'N'
   END AS someBoolean
FROM funnyTable

Geen idee hoeveel SQL-dialecten ik nu heb gemixt, maargoed :P Zo zag het er bij een grote computerketen uit.
Het nadeel van het ontslaan van die mensen is dat je zelf die rommel mag opruimen...
Het nadeel van niet ontslaan is dat er nog veeeeel meer rotzooi komt :P
Verwijderd schreef op donderdag 16 april 2009 @ 20:48:
[...]

Stel, je wilt dit systeem naar booleans converteren. Wat heb je dan liever als originele code?
Java:
1
2
3
4
5
class DbAccesDinges extends NormaleDbAccessDinges {
  public boolean getBoolean() {
    return "Y".equals(getMyValue());
  }
}

Zoiets? :X Als je daar al over na gaat denken, doe het dan direct écht goed, en niet half goed.

Verder maakt het voor mij niet uit: ik zou die Y.equals(myValue) toch find-replacen door myValue, en N.equals(myValue) door !myValue. Ik ben namelijk heel handig met regexes, en eclipse ook ;)

En een extreem voorbeeld: is dit nuttig?
Java:
1
2
3
4
5
6
7
8
9
10
public class GlobalConstants {
  public final char DOT = '.';
}

public class SomethingElse {
  myMethod(string x) {
    if (GlobalConstants.DOT.equals(x)) doSomething();
    }
  }
}
.Gertjan. schreef op donderdag 16 april 2009 @ 20:50:
Tevens is het voordeel van constanten dat je geen foutjes kunt maken (of je moet de verkeerde constante pakken). Nou zal je "Y" meestal wel goed spellen, maar bij langere/minder logische waardes ga je geheid fouten maken. Of als je aan 2 systemen tegelijk werkt het ene systeem "Y" gebruikt en het andere "T", die ga je gegarandeerd door elkaar gooien.
Bij langere waarden zou ik het wel bij gaan houden. Geloof me: dat heb ik echt wel geleerd. Mijn voorganger bij mijn vorige baan had een hekel aan enums in databases, en hield de status van orders etc bij in integers of CHAR(1). Documentatie van wat welke status betekende was nergens te bekennen :X Enums, of zelfs impliciete enums door constantes in de programmeertaal te gebruiken hadden echt geholpen :X

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16:29

Sebazzz

3dp

PhoenixT schreef op donderdag 16 april 2009 @ 21:08:
C#:
1
 if ((number / 3 * 2) + (number / 3) == number) 

:P
True voor number=0 maar zonder commentaar (stond er zinnig commentaar boven) valt er niet veel over te zeggen.

[ Voor 44% gewijzigd door Sebazzz op 16-04-2009 21:48 ]

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


Acties:
  • 0 Henk 'm!

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Sebazz dat is gewoon altijd waar voor willekeurig welk nummer.

6/3*2 + 6/3 ==6 => 4 + 2 == 6
100/3*2 + 100/3 == 100 => 66.66... + 33.33... == 100

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:47
fout, je vergeet dat het integer division is. 100/3*2 + 100/3 = 66 + 33 != 100.

Tenminste, zo werkt dat in de meeste talen.

Acties:
  • 0 Henk 'm!

Verwijderd

Het is dus hetzelfde als:
C:
1
if(number % 3 == 0)

Met floating points zou het nog weleens kunnen kloppen overigens, maar ook dan kan je te maken krijgen met afronding.

[ Voor 49% gewijzigd door Verwijderd op 16-04-2009 22:26 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:50

Creepy

Tactical Espionage Splatterer

MBV schreef op donderdag 16 april 2009 @ 22:21:
fout, je vergeet dat het integer division is. 100/3*2 + 100/3 = 66 + 33 != 100.

Tenminste, zo werkt dat in de meeste talen.
Je weet toch het type van number helemaal niet ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

MBV, ik ga even van een ideale variabele situatie uit. (geen verval e.d.)

En nee dot, de eigenlijke waarde gaat niet verloren.

Een beetje meer info van de OP zou wel leuk zijn.
Bvb waarom stond die if er of waarom is er niet true gebruikt, er zal toch wat commentaar hebben gestaan?

Acties:
  • 0 Henk 'm!

Verwijderd

Creepy schreef op donderdag 16 april 2009 @ 22:26:
[...]

Je weet toch het type van number helemaal niet ;)
Inderdaad. In C++ kan het net zo goed zijn dat dit de manier is om een game engine te initialiseren. number is gewoon een ongeïnitialiseerd level object, en met de /-operator geef je aan welk level je wilt starten. :P Als het niet het level-nummer returnt, dan is het mislukt, en wordt de code in de if-statement uitgevoerd om van die fout te herstellen. :Y)

Acties:
  • 0 Henk 'm!

  • PhoenixT
  • Registratie: December 2003
  • Laatst online: 15-08 18:51
Ja klopt, ik had moeten zeggen dat number een int is. Maar die kerel had echt lang zitten nadenken over hoe hij kon berekenen of een getal nu deelbaar door 3 is of niet en kwam met deze prachtige formule op de proppen. Een simpele modulo (%) was genoeg geweest :P

Maar ik heb wel eens creepyer dingen meegemaakt, gewoon integers opslaan in een string en constant Convert.ToInt32() gebruiken als je ze in een berekening wilt gebruiken. Redenering "Ja, dat is makkelijk als ik die waarden in een textbox wil zetten". Ja slimmerd, doe het dan andersom :P

[ Voor 35% gewijzigd door PhoenixT op 16-04-2009 22:48 ]

With PlaneShift since 2003. WC-Grid ftw!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

Simon Verhoeven schreef op donderdag 16 april 2009 @ 22:27:
MBV, ik ga even van een ideale variabele situatie uit. (geen verval e.d.)
Maar in Programming is dat geen realistisch uitgangspunt :). Da's meer iets voor Wetenschap & Levensbeschouwing
En nee dot, de eigenlijke waarde gaat niet verloren.
Wat bedoel je precies? Want als je een float dat niet goed deelbaar is door 3 deelt door 3 dan eindig je toch echt met afrondingsfouten. 1/3 is nou eenmaal niet eindig in het binaire stelsel.

.edit: ik heb het even uitgerekend, 1/3 als 32 bits float is eigenlijk
0.3333333432674407958984375

1/3 als 64 bits float is eigenlijk
0.333333333333333314829616256247390992939472198486328125
PhoenixT schreef op donderdag 16 april 2009 @ 22:45:
Ja klopt, ik had moeten zeggen dat number een int is. Maar die kerel had echt lang zitten nadenken over hoe hij kon berekenen of een getal nu deelbaar door 3 is of niet en kwam met deze prachtige formule op de proppen. Een simpele modulo (%) was genoeg geweest :P
Zelfs zonder modulo is het alsnog omslachtig. Hij had ook gewoon number / 3 * 3 == number kunnen doen ;)

[ Voor 43% gewijzigd door .oisyn op 16-04-2009 23:05 ]

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!

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

2de deel: te snel over dot zijn post gelezen, dacht dat er / stond.
Modulus operator is natuurlijk juist.

PheonixT, dat het een int is is nogal belangrijk.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:47
Uhm, nee :?

Laatste keer dat ik het probeerde leverde 3.5f/3 toch echt 1 op. Je moet door 3.0 delen om floating point division te krijgen. In C uiteraard, geen idee wat de regels voor Java zijn.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

MBV schreef op donderdag 16 april 2009 @ 23:19:
Uhm, nee :?

Laatste keer dat ik het probeerde leverde 3.5f/3 toch echt 1 op. Je moet door 3.0 delen om floating point division te krijgen. In C uiteraard, geen idee wat de regels voor Java zijn.
Uhm, nee? Je compiler is stuk. Of je herinnert je het gewoon verkeerd :). Integral types worden geconverteerd naar float bij een berekening met een float erin.

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

.oisyn schreef op donderdag 16 april 2009 @ 23:27:
[...]


Uhm, nee? Je compiler is stuk. Of je herinnert je het gewoon verkeerd :). Integral types worden geconverteerd naar float bij een berekening met een float erin.
Het kan zijn dat hij zich dit herinnert: 7 / 2 / 3.0. De eerste berekening is dan 7 / 2, waarin alleen maar integers voorkomen. De berekening wordt dan uiteindelijk 3 / 3.0 in plaats van 3.5 / 3.0.

Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Verwijderd schreef op donderdag 16 april 2009 @ 22:23:
Het is dus hetzelfde als:
C:
1
if(number % 3 == 0)

Met floating points zou het nog weleens kunnen kloppen overigens, maar ook dan kan je te maken krijgen met afronding.
Niet per sé, vul in de originele code voor "number" eens -3 in. ;)

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

l0c4lh0st schreef op vrijdag 17 april 2009 @ 01:10:
[...]

Niet per sé, vul in de originele code voor "number" eens -3 in. ;)
(-3 / 3 * 2) + (-3 / 3) == -3
(-1 * 2) + -1 == -3
-2 - 1 == -3
-3 == -3

-3 % 3 == 0
0 == 0

Volgens mij klopt het wel aardig. ;)

[ Voor 0% gewijzigd door Verwijderd op 17-04-2009 01:53 . Reden: oeps ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

Behalve dat die een na laatste regel -3 % 3 == 0 moet zijn, maar idd, het werkt prima voor negatieve getallen :)

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!

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

.Gertjan.

Owl!

MBV schreef op donderdag 16 april 2009 @ 21:48:
[...]

SQL:
1
2
3
4
5
6
7
8
SELECT 
   id, 
   blablabla,
   CASE someBoolean
     WHEN 'T' THEN 'Y' 
     ELSE 'N'
   END AS someBoolean
FROM funnyTable

Geen idee hoeveel SQL-dialecten ik nu heb gemixt, maargoed :P Zo zag het er bij een grote computerketen uit.

[...]

Het nadeel van niet ontslaan is dat er nog veeeeel meer rotzooi komt :P
Op zich is dit een goede oplossing, omdat je ten alle tijden in de database een vaste waarde kunt hanteren (in jouw geval T of F), maar er zijn natuurlijk meer wegen naar Rome. In mijn project is het helaas nodig om iets dergelijks te gebruiken. Ik heb nog geen fatsoenlijke manier gevonden om een boolean van en naar Oracle te sturen vanuit mijn code. Dus ga je inderdaad de getBoolean() functies overriden, maar mijn class doet meer dan alleen die functie overriden dus dan is het een kleine moeite om getBoolean maar meteen goed te implementeren.
[...]

Java:
1
2
3
4
5
class DbAccesDinges extends NormaleDbAccessDinges {
  public boolean getBoolean() {
    return "Y".equals(getMyValue());
  }
}

Zoiets? :X Als je daar al over na gaat denken, doe het dan direct écht goed, en niet half goed.
Wat is dan de echt goede oplossing? Ook kijken naar N en indien geen N en geen Y dan een exception gooien (overigens een goed idee). Uiteraard ook rekening houden met NULL values..
Verder maakt het voor mij niet uit: ik zou die Y.equals(myValue) toch find-replacen door myValue, en N.equals(myValue) door !myValue. Ik ben namelijk heel handig met regexes, en eclipse ook ;)

En een extreem voorbeeld: is dit nuttig?
Java:
1
2
3
4
5
6
7
8
9
10
public class GlobalConstants {
  public final char DOT = '.';
}

public class SomethingElse {
  myMethod(string x) {
    if (GlobalConstants.DOT.equals(x)) doSomething();
    }
  }
}
In dit geval is het misschien niet nuttig, maar ik kan me voorstellen als je getallen moet parsen dat je wel een scheidingsteken hanteert (uiteraard noem je die niet DOT), die dan misschien geen const wordt, maar zeker wel nuttig is als global variabele.
[...]

Bij langere waarden zou ik het wel bij gaan houden. Geloof me: dat heb ik echt wel geleerd. Mijn voorganger bij mijn vorige baan had een hekel aan enums in databases, en hield de status van orders etc bij in integers of CHAR(1). Documentatie van wat welke status betekende was nergens te bekennen :X Enums, of zelfs impliciete enums door constantes in de programmeertaal te gebruiken hadden echt geholpen :X
Tja, het opslaan en gebruik van abstracte codes of nietszeggende cijfers komt best veel voor. Vooral in communicatie met oudere systemen. Dan krijg je codes terug als C1 of X5 en die stellen dan een status voor waarop een actie moet worden ondernomen. Mijn oplossing is meestal om fatsoenlijk enumerators ofzo te gebruiken en dan bij communicatie met een extern systeem deze waardes pas om te zetten, maar schijnbaar hebben veel ontwikkelaars dat idee niet (getuige de gigantische wirwar aan codes en cijfers in mijn huidige project) en gooien die nietszeggende gegevens gewoon in de DB en zetten in de code dubieuze if statements om gedrag te bepalen aan de hand van die niets zeggende codes. Het enige voordeel is dan dat je bij het exporteren geen conversie hoeft te doen. :(

Ik denk dat het gewoon een kwestie van voorkeur en ervaring is. Iedereen heeft zijn eigen grenzen en de een zal sneller een const gebruiken. Zelfde verhaal met isolatie naar functies. De een zal sneller dingen in een functie gooien dan de ander (en weer een ander maakt functies van hooguit X regels). Maar je moet maar zo zien: Het houdt het developer leven interessant. B)

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


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:47
.Gertjan. schreef op vrijdag 17 april 2009 @ 09:11:

Wat is dan de echt goede oplossing? Ook kijken naar N en indien geen N en geen Y dan een exception gooien (overigens een goed idee). Uiteraard ook rekening houden met NULL values..
Ik bedoelde: Als je gaat nadenken over hoe je gaat vergelijken (Of je "Y".equals of TRUE.equals neerzet), dan moet je niet de micro-optimalisatie doen, maar moet je direct de slag maken naar een functie zoals ik die neer had gezet.
Enneh, NULL moet je uiteraard omzetten naar FILENOTFOUND :Y)
[...]

In dit geval is het misschien niet nuttig, maar ik kan me voorstellen als je getallen moet parsen dat je wel een scheidingsteken hanteert (uiteraard noem je die niet DOT), die dan misschien geen const wordt, maar zeker wel nuttig is als global variabele.
Het was echt precies zijn strategie om niet een karakter neer te zetten, maar DOT of ASTERISK e.d., omdat hij dat mooier vond staan. Een andere naam geven om te kunnen wijzigen had ook niet veel zin gehad: wanneer is de multiplier voor het laatst van teken veranderd? ;)
Ik denk dat het gewoon een kwestie van voorkeur en ervaring is. Iedereen heeft zijn eigen grenzen en de een zal sneller een const gebruiken. Zelfde verhaal met isolatie naar functies. De een zal sneller dingen in een functie gooien dan de ander (en weer een ander maakt functies van hooguit X regels). Maar je moet maar zo zien: Het houdt het developer leven interessant. B)
Functies moeten op 1 scherm passen, tenzij het nodeloos complexer wordt om het in functies op te splitsen.

En ik zit nu met het volgende dilemma:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
getXByName(String name) {
  if (....) 
    something.getXByName();
  else if (...)
    somethingElse.getLocalXByName();
}
getYByName(String name) {
  if (....) 
    something.getYByName();
  else if (...)
    somethingElse.getLocalYByName();
}

Ze zijn allebei 100 regels lang, en op de functieaanroepen na identiek. Is het de moeite waard om een functor-klasse te maken?

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$codes = array(0,0,530,1356,1684,2158,2551,2606,2870,3509,3911,4020,4514,6725);
$times = array(0);
for ($i=1;$i<sizeof($codes);$i++) {
    if ($codes[$i]<60) {
        if ($codes[$i] <10) $valeur="0:0".$codes[$i];
        else $valeur = "0:".$codes[$i];
    }
    else {
        $minute = floor($codes[$i]/60);
        $sec = $codes[$i]%60;
        if ($sec < 10) $sec="0".sec;
        $valeur = $minute+':'+$sec;
    }
    $times[] = $valeur;
}


Ik denk dat dit stukkie code een aantal seconden moet converteren naar minuten:seconden notatie (dwz 65 seconden -> 1:05). Echter hij werkt niet, :+. Gister even herschreven naar:

PHP:
1
2
3
4
5
$chapters = array(0, 0, 530, 1356, 1684, 2158, 2551, 2606, 2870, 3509, 3911, 4020, 4514, 6725);
$times = array();
foreach($chapters as $chapter) {
    $times[] = floor($chapter / 60) . sprintf(":%02d", ($chapter % 60));
}


Veel mooier, :Y)

Edit:

PHP:
1
2
3
4
5
$chapterindex = array(0, 0, 530, 1356, 1684, 2158, 2551, 2606, 2870, 3509, 3911, 4020, 4514, 6725);
$times = array();
foreach($chapterindex as $chapter) {
    $times[] = sprintf("%d:%02d", floor($chapter / 60), ($chapter % 60));
}


is nog mooierder.

[ Voor 13% gewijzigd door YopY op 17-04-2009 09:53 ]


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16:29

Sebazzz

3dp

Fransman? "Valuer"?

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


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Het is van een of andere Franse pagina, ja. Hele code zit vol met Franse woorden die gelukkig nog wel grotendeels te snappen zijn (en zo niet is de code nog wel leesbaar). Zit geen commentaar en dergelijke bij, en het is hoofdzakelijk Javascript, maar het is nog te begrijpen.

Min die constructie daaro, :+.

Acties:
  • 0 Henk 'm!

  • DutchCommando
  • Registratie: November 2000
  • Laatst online: 17:21
MBV schreef op vrijdag 17 april 2009 @ 09:39:
En ik zit nu met het volgende dilemma:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
getXByName(String name) {
  if (....) 
    something.getXByName();
  else if (...)
    somethingElse.getLocalXByName();
}
getYByName(String name) {
  if (....) 
    something.getYByName();
  else if (...)
    somethingElse.getLocalYByName();
}

Ze zijn allebei 100 regels lang, en op de functieaanroepen na identiek. Is het de moeite waard om een functor-klasse te maken?
Dat er iets aan moet gebeuren is uiteraard zeker. Je code geeft verder weinig context dus ik kan niet zeggen wat de beste manier is om deze code DRY compatible te maken :).

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:47
Context: analyse van een java-programma. Ik krijg een identifier als "super.someProperty" en moet uitzoeken wat het type is. Als het eerste stukje super is, dan zoek ik de extended klasse op, vergelijkbaar met 'this', de klassenaam zelf, het kan een FQN zijn, en nog wat van die gevallen. Bij 'this' en 'super' schop ik het eerste stuk er vanaf, zoek de betreffende klasse op, en vraag of die klasse het overgebleven stuk kent (al dan niet recursief).
De 2 functies zijn uiteraard getIdentifierByName en getMethodByName, en kunnen op diverse scope-levels worden opgevraagd.
Toch iets functor-achtigs ben ik bang :/

[ Voor 3% gewijzigd door MBV op 17-04-2009 21:27 ]


Acties:
  • 0 Henk 'm!

  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 18-05 17:57
Microsoft heeft een functie genaamd GetMonitorInfo, dat is op zich een prima functie, maar er valt mij een eigenaardigheid op.
Je kunt als argument een pointer naar MONITORINFO dan wel een MONITORINFOEX struct meegeven, het verschil zit hem in de "TCHAR szDevice[CCHDEVICENAME]" in MONITORINFOEX waar de naam in gekopieerd wordt.
The MONITORINFOEX structure is a superset of the MONITORINFO structure. It has one additional member: a string that contains a name for the display monitor. Most applications have no use for a display monitor name, and so can save some bytes by using a MONITORINFO structure.
Nou heb ik die CCHDEVICENAME even opgezocht en wat blijkt? Das een define naar 32 8)7

Begrijp me niet verkeerd, geheugen sparen vind ik prima, maar 32 bytes is de moeite niet waard, je hebt ten eerste een variabele nodig die de grootte van de struct aangeeft en ten tweede heb je extra code om de grootte van de struct te controleren, dan blijft er van die 32 bytes wel erg weinig over.

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


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik snap je hele punt eigenlijk niet echt. Waar komt je geheugen besparen argument in hemelsnaam vandaan? En waarop zou die 32 chars in die struct ook maar iets te maken hebben met de code die je moet schrijven om die check te doen?

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

In de client-validatiecode om e-mails te verzenden via het (waarschijnlijk wel bij sommige van jullie bekende) SmartSchool staat zoiets dergelijks (geen copy/paste dus wat er ongeveer staat, maar het blijft hetzelfde probleem):

code:
1
2
3
4
5
6
7
8
9
10
var ok = "no";
if (document.form.to.length > 0) {
  ok = "yes";
}

....

if (ok == "no") {
  alert("Blabedyblooblah");
}


Daar krullen je tenen toch van. Ok, het is geen beveiligingslek, de code is niet meteen minder leesbaar en niet veel langer dan de "juiste" code zou zijn maar als je al niet ziet wanneer je een boolean moet gebruiken en wanneer niet stel ik me toch vragen bij je programmeerkunsten.

[ Voor 3% gewijzigd door Verwijderd op 03-05-2009 03:17 ]


Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
.oisyn schreef op zondag 03 mei 2009 @ 01:40:
Ik snap je hele punt eigenlijk niet echt. Waar komt je geheugen besparen argument in hemelsnaam vandaan? En waarop zou die 32 chars in die struct ook maar iets te maken hebben met de code die je moet schrijven om die check te doen?
Hij vindt het dus onzin dat er 2 structs moeten zijn: Een met en een zonder naam.

Als je die struct zonder naam gebruikt bespaar je dus 32 bytes geheugen.

Wat ie met die code om een check te doen bedoelt is mij ook een raadsel. :+

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Bobo maakt zich druk om checks die MS dus doet. ;)

Als het 100% eigen code was zou ik de minder uitgebreide struct deprecaten en weg willen halen, maar MS heeft weer iets meer reden om aardig mbt backwards compatability te doen.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Inderdaad, die oude struct zal wel een tijdje bestaan hebben toen er iemand kwam vragen of de naam er niet ook bij kon.

Toen de memo op het bureau van de desbetreffende progger terecht kwam zal er ongetwijfeld gevloekt zijn want bij MS is backwards compatibility redelijk king dus heb je zo'n lelijke workaround nodig.

Het is heel makkelijk natuurlijk om achteraf te roepen dat het dom is, maar vaak heeft zoiets gewoon een logische oorzaak.

Acties:
  • 0 Henk 'm!

  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 18-05 17:57
.oisyn schreef op zondag 03 mei 2009 @ 01:40:
Ik snap je hele punt eigenlijk niet echt. Waar komt je geheugen besparen argument in hemelsnaam vandaan? En waarop zou die 32 chars in die struct ook maar iets te maken hebben met de code die je moet schrijven om die check te doen?
Om die check te doen heb je wat extra instructies nodig en je moet ook een constante opslaan, dat stelt natuurlijk geen reet voor maar het gaat wel van je besparing van 32 bytes af.

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


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ah het ging om het verschil tussen de twee structs, dat was me niet helemaal duidelijk :). Maar dan nog, de extra struct member was er sowieso al, ookal bestond er geen MONITOREX - het is namelijk een ideale manier om toekomstige uitbreidingen op de struct toe te laten zonder op dat moment oude code te breken. Verder is de optimalisatie natuurlijk ook niet voor de opslag van 1 zo'n struct. Code instantieer je niet, data wel. Dus hoe meer je van die structs opslaat, hoe kleiner de relatieve overhead van de exta check in gdi32.dll (zeker gezien het feit dat de code uit een dergelijke dll typisch wordt geshared door alle processen die er gebruik van maken)

[ Voor 9% gewijzigd door .oisyn op 03-05-2009 18: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!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Zat even wat oude code door te kijken.... heb ik deze wel eens gepost? Moet even als file, want het is te groot als post...

http://www.xs4all.nl/~smit/nice-function.cpp

Hoop maar dat het nog werkt ;)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik hoop dat die gegenereerd is, en dat je dat niet zelf in hebt lopen typen... :P

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!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 18:05

Haan

dotnetter

Wat doet het echt :P

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Verwijderd schreef op donderdag 16 april 2009 @ 20:48:
Constanten (of beter gezegd: alles behalve literals) gebruiken is sowieso makkelijker. Je hoeft alleen de definitie van de constanten aan te passen, en de declaratie van de variabelen. De logica blijft exact gelijk.
Je hebt bovendien het voordeel dat zaken als intellisense werken. Komt nog eens bij dat je als je voor "Y" e.d. geen constanten gebruikt, ergens een of andere grens moet gaan trekken, en waar trek je die grens? Strings van 2 characters? 3? Waarom?

Nee, alles constanten, klaar. Best practices zijn er voor een reden, en een van de belangrijkste is dat iedereen in je team dezelfde regels volgt.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

.oisyn schreef op woensdag 06 mei 2009 @ 11:50:
Ik hoop dat die gegenereerd is, en dat je dat niet zelf in hebt lopen typen... :P
Ik geloof dat het uit mathematica kwam. Herschreven CForm[xxx]. En dan maar hopen dat het nog klopt, want als dit niet werkt is het natuurlijk onmogelijk te debuggen...
Het is een substap (er zijn nog 3 van deze functies...) om het perspective n-point probleem op te lossen, dwz. als je de 2d projectie van een set punten hebt, en je hebt de corresponderende 3d punten in een model in een ander coordinaten stelsel, dan wil je de diepte van de 2d punten reconstrueren. Een heel basis en belangrijk probleem in computer vision. Maar helaas erg lastig om efficient en numeriek stabiel op te lossen, omdat je te maken hebt met een set van niet lineaire vergelijkingen.

Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Zoijar schreef op woensdag 06 mei 2009 @ 12:19:
[...]

Ik geloof dat het uit mathematica kwam. Herschreven CForm[xxx]. En dan maar hopen dat het nog klopt, want als dit niet werkt is het natuurlijk onmogelijk te debuggen...
Wie maakt er een efficiënte en nette versie van? :D

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

l0c4lh0st schreef op woensdag 06 mei 2009 @ 15:45:
Wie maakt er een efficiënte en nette versie van? :D
De compiler, hoop ik :)
Pagina: 1 ... 10 ... 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. :)