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

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07-10 18:52
RayNbow schreef op maandag 22 november 2010 @ 10:18:
Sinds wanneer is !P(X) <==> P(!X) logisch geldig? :p
Technisch gezien claimde Davio alleen !P(X) => P(!X) maar goed. ;)

edit:
Oh, dat is equivalent. :/

[ Voor 70% gewijzigd door Soultaker op 22-11-2010 10:26 ]


Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
Verwijderd schreef op zaterdag 20 november 2010 @ 19:47:
[...]


Dit is de "nette" manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
switch ($naam)
{
case 'Pietje':
break;

case 'Sjonnie':
break;

case 'Hansje':
break;

case 'Peet':
break;

default:
break;

}


Zeer belangrijk zijn de break; keywords na elke case. :)
Nou ben ik geen php kenner, maar ben ik nou de enige die ziet dat dit compleet niets doet?

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


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Het ging om de structuur denk ik ...

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!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 09:59

AW_Bos

Liefhebber van nostalgie... 🕰️

Een leuke die ik tegenkwam....
Een niet genormaliseerd script, zelfs de PHPcode had een stuk netter gekund:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
include"config.php";

$haalberichten = mysql_query("SELECT zo00, zo01, zo02, zo03, zo04, zo05, zo06, zo07, zo08, zo09, zo10, zo11, zo12, zo13, zo14, zo15, zo16, zo17, zo18, zo19, zo20, zo21, zo22, zo23 FROM programmas ORDER by id DESC");
while($msg=mysql_fetch_object($haalberichten)){

switch (date('N')){
case 7: /* Zondag */
    switch (date('G')){
    case 0: $prog = '<?=$msg->zo00;?>'; break;
    case 1: $prog = '<?=$msg->zo01;?>'; break;
    case 2: $prog = '<?=$msg->zo02;?>'; break;
    case 3: $prog = '<?=$msg->zo03;?>'; break;
    case 4: $prog = '<?=$msg->zo04;?>'; break;
    case 5: $prog = '<?=$msg->zo05;?>'; break;
    case 6: $prog = '<?=$msg->zo06;?>'; break;
    case 7: $prog = '<?=$msg->zo07;?>'; break;
    case 8: $prog = '<?=$msg->zo08;?>'; break;
    case 9: $prog = '<?=$msg->zo09;?>'; break;
    case 10: $prog = '<?=$msg->zo10;?>'; break;
    case 11: $prog = '<?=$msg->zo11;?>'; break;
    case 12: $prog = '<?=$msg->zo12;?>'; break;
    case 13: $prog = '<?=$msg->zo13;?>'; break;
    case 14: $prog = '<?=$msg->zo14;?>'; break;
    case 15: $prog = '<?=$msg->zo15;?>'; break;
    case 16: $prog = '<?=$msg->zo16;?>'; break;
    case 17: $prog = '<?=$msg->zo17;?>'; break;
    case 18: $prog = '<?=$msg->zo18;?>'; break;
    case 19: $prog = '<?=$msg->zo19;?>'; break;
    case 20: $prog = '<?=$msg->zo20;?>'; break;
    case 21: $prog = '<?=$msg->zo21;?>'; break;
    case 22: $prog = '<?=$msg->zo22;?>'; break;
    case 23: $prog = '<?=$msg->zo23;?>'; break;
    };
break;
};
?>

<?php echo $prog; ?> 

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 06-10 22:10
Soultaker schreef op maandag 22 november 2010 @ 10:24:
[...]

Technisch gezien claimde Davio alleen !P(X) => P(!X) maar goed. ;)

edit:
Oh, dat is equivalent. :/
!P(X) => P(!X)

Als !P(X) false is, mag P(!X) true of false zijn. als P(x) <==> TRUE, is !P(X) => P(!X), maar P(!X) => !P(X) <==> TRUE => FALSE natuurlijk niet. Dus waar je vandaan haalt dat dat equivalent is...

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 11:57
AW_Bos schreef op maandag 22 november 2010 @ 10:59:
Een leuke die ik tegenkwam....
Een niet genormaliseerd script, zelfs de PHPcode had een stuk netter gekund:
En wat doet het? Een soort code generator ofzo?

Acties:
  • 0 Henk 'm!

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

alienfruit

the alien you never expected

Ach, namen zijn altijd een bitch. Ken een reeks bedrijven die het vertikken op mijn namen *niet* voluit te schrijven. Gelukkig heb ik maar twee namen. Maar toch, blijft vervelend je hele naam op je credit card.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

Het lijkt me eerder iemand die rijen met kolommen had verward terwijl hij iets wilde maken waarbij je voor elk uur van elke dag in de week een apart stukje tekst op wilde slaan.

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


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Ik weet dat het efficiënter kan, maar ik weet niet hoe :'(
Wordt lastig. Meest eenvoudige is een controle of het woord eindigt met 'je', zo ja, afkappen. Geavanceerder is het opbouwen van een database met namen en hun vervangingswaarde. (database kan natuurlijk ook gewoon in de code zelf, setje key / value paren. Kan ook een extern bestand zijn (CSV).

Maar omdat er zoveel verschillende cases zijn... Je zou moeten abstraheren. Je hebt een set namen die omgevormd moeten worden volgens bepaalde regels. "Froukje" -> -je afhalen. "Jantje" -> -tje afhalen. Voor elke regel een set namen maken die door die regel gehaald moeten worden.
Freeaqingme schreef op zondag 21 november 2010 @ 04:11:
Zo heet mijn oma Gijsje. Lijkt me niet de bedoeling om daar -je van af te halen ;)
Die van mij Hendrikje, :+.

Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 19-09 15:37
YopY schreef op maandag 22 november 2010 @ 14:08:
[...]


Wordt lastig. Meest eenvoudige is een controle of het woord eindigt met 'je', zo ja, afkappen. Geavanceerder is het opbouwen van een database met namen en hun vervangingswaarde. (database kan natuurlijk ook gewoon in de code zelf, setje key / value paren. Kan ook een extern bestand zijn (CSV).

Maar omdat er zoveel verschillende cases zijn... Je zou moeten abstraheren. Je hebt een set namen die omgevormd moeten worden volgens bepaalde regels. "Froukje" -> -je afhalen. "Jantje" -> -tje afhalen. Voor elke regel een set namen maken die door die regel gehaald moeten worden.
Tja, dan krijg je zoiets:

- Bouw Hashmap/DB tabel

1. Controleer of naam eindigt op je (nee => afbreken)
2. Controleer of naam voorkomt in tabel (ja => vervangen door naam in tabel en afbreken)
3. Pas generieke regel toe (=> je van naam afhalen)

Zo kun je de map/tabel zo klein mogelijk houden en toch altijd goed zitten (zolang je tabel met uitzonderingen klopt)
Meer regels zouden de tabel kleiner maken/overbodig maken maar dan moet je ze wel kunnen vinden/bedenken natuurlijk.

Voor optimale efficiëntie neem je natuurlijk een datastructuur die kant-en-klaar in de code kan worden gecompiled, zodat hij niet nog tijdens elke/de eerste run of het opstarten hoeft te worden gegenereerd. Of een DB tabel natuurlijk maar dat heeft ook weer extra code en overhead.

Een switch statement is in ieder geval not the way to go, hoogstens als stap 2 (en dan moet de taal switchen op een string niet implementeren als een hele rij van string.equals(), want dan ga je 1001 strings vergelijken)

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Niks ervan, gewoon niet doen, je moet de invoer van namen en de controle ervan aan mensen zelf overlaten. Als mensen niet willen dat ze door het systeem constant verkeerd worden aangesproken, moeten ze gewoon hun eigen naam invullen.

En dan wel met Unicode werken aub.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07-10 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

dtech schreef op maandag 22 november 2010 @ 14:53:
Zo kun je de map/tabel zo klein mogelijk houden en toch altijd goed zitten (zolang je tabel met uitzonderingen klopt)
En daar gaat het mis...

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

offtopic:
Ik weet dat het off topic is, maar waarom zou je mensen hun naam veranderen? Je moet er toch gewoon van uit gaan als ontwikkelaar dat mensen in ieder geval hun naam wel kunnen invoeren. Want stel nou dat er gewoon "Jantje" op zijn paspoort staat?

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Froukje de Both heet toch echt Froukje de Both, en ik denk niet dat zij het op prijs zou stellen wanneer ze een brief of e-mail krijgt met daarin de aanhef "Beste Frouk,". Gewoon van die namen afblijven als je het mij vraagt.

We are shaping the future


Acties:
  • 0 Henk 'm!

Verwijderd

Met alle namen die er (tegenwoordig) zijn en alle variaties op die namen is het gewoon onwerkelijk en onzinnig om daar ook maar enigszins controle op uit te voeren.

En sowieso respectloos. Als ik Kharay Yarahk heet en jij dat niet gelooft omdat het toevallig een palindroom is - dan is dat jouw probleem, niet het mijne en dat zou het dan ook nooit mogen worden. Niet dat ik daadwerkelijk zo heet, mijn naam is Repelsteeltje.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

offtopic:
Niet "Faust"?

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


Acties:
  • 0 Henk 'm!

Verwijderd

Dan heb je mij zeker nog niet aan het spinnewiel gezien? Ha!

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Het willen 'verbeteren' van namen is wel wel een van grootste WTF's uit deze serie, en dan maakt het niet eens uit wat voor code je er tegenaan gooit...

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Daar ben ik het absoluut mee eens. Je moet gewoon zorgen dat je de input van de gebruiker netjes binnenkomt, maar verder met rust laten. Als iemand 'Fzzzssskkttje' invult, krijg je alsnog bogus en je loopt de kans legitieme namen kaput zu machen.

Overigens kan ik me nog steeds niet aan de indruk onttrekken dat het een illustratie was van wat er ging gebeuren. Jammer dat de poster niet reageert :)

[ Voor 5% gewijzigd door Verwijderd op 22-11-2010 19:54 ]


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 07-10 14:06
En als ik nu een programma wil maken dat juist conversie doet tussen woorden en hun verkleinwoorden. (tja, dan moet ik het groene boekje nog eens raadplegen.)

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Verwijderd schreef op maandag 22 november 2010 @ 19:54:
Daar ben ik het absoluut mee eens. Je moet gewoon zorgen dat je de input van de gebruiker netjes binnenkomt, maar verder met rust laten. Als iemand 'Fzzzssskkttje' invult, krijg je alsnog bogus en je loopt de kans legitieme namen kaput zu machen.

Overigens kan ik me nog steeds niet aan de indruk onttrekken dat het een illustratie was van wat er ging gebeuren. Jammer dat de poster niet reageert :)
Inderdaad, ik snap ook niet waarom iedereen nu zo fel op die namen reageert, volgens mij was dat het punt niet en al zou hij dat wel zo willen dan is het verstandig eerst TR06 aan het woord te laten hoe en wat :)

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!

Verwijderd

PHP:
1
2
3
if (file_exists("inc/".$_GET['script'].".".$_GET['type'])) {
    readfile("inc/".$_GET['script'].".".$_GET['type']);
}


Het is nog mijn eigen code ook :F

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

kenneth schreef op maandag 22 november 2010 @ 22:20:
[...]

Inderdaad, ik snap ook niet waarom iedereen nu zo fel op die namen reageert, volgens mij was dat het punt niet en al zou hij dat wel zo willen dan is het verstandig eerst TR06 aan het woord te laten hoe en wat :)
Ja, dan had 'ie geen namen moeten kiezen als voorbeelden maar normale woorden zoals 'frietje' en 'lepeltje'. Namen aanpassen is gewoon not done.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

Verwijderd schreef op dinsdag 23 november 2010 @ 02:41:
PHP:
1
2
3
if (file_exists("inc/".$_GET['script'].".".$_GET['type'])) {
    readfile("inc/".$_GET['script'].".".$_GET['type']);
}


Het is nog mijn eigen code ook :F
Behalve dat je misschien het stukje "inc/".$_GET['script'].".".$_GET['type'] beter in een variabele had kunnen gooien is er toch weinig mis mee? Mooi is anders, maar ik krijg geregeld code onder ogen die op tientallen plekken een string aan elkaar plakt om bijvoorbeeld een file te bepalen, ben er geen fan van (en bij fouten zoek je je helemaal een ongeluk), maar echt heel erg fout is het toch niet?

Is het overigens niet gevaarlijk om voor je file IO af te hangen van GET variabelen (dat is tenslotte userinput en users moet je nooit vertrouwen)? Wat gebeurt er als ik script = ../../config type= php doe :? Of is dat juist het WTF momentje?

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!

  • Slurpie
  • Registratie: Oktober 2004
  • Laatst online: 01-10 20:21
Je mag wel $_GET gebruiken mits goed schoongemaakt, dit is gewoon weg vies.
Kom het zelf ook nog vaak tegen.. en je wordt er niet vrolijk van.

[ Voor 7% gewijzigd door Slurpie op 23-11-2010 07:39 ]


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 11:42

Sebazzz

3dp

Slurpie schreef op dinsdag 23 november 2010 @ 07:39:
Je mag wel $_GET gebruiken mits goed schoongemaakt, dit is gewoon weg vies.
Kom het zelf ook nog vaak tegen.. en je wordt er niet vrolijk van.
Ik zou met de resultaten van het schoonmaken van een $_GET array niet de inhoud van de $_GET array willen vervangen.

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


Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

Sebazzz schreef op dinsdag 23 november 2010 @ 08:17:
[...]

Ik zou met de resultaten van het schoonmaken van een $_GET array niet de inhoud van de $_GET array willen vervangen.
Natuurlijk wel ;) Je moet zorgen dat jij als developer de enige bent die de code begrijpt. Je moet jezelf onmisbaar maken :D

Maar inderdaad rommelen met je post/get waardes in de arrays is niet echt een goed idee, het werkt verwarrend en is zeer foutgevoelig.

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!

  • Slurpie
  • Registratie: Oktober 2004
  • Laatst online: 01-10 20:21
Sebazzz schreef op dinsdag 23 november 2010 @ 08:17:
[...]

Ik zou met de resultaten van het schoonmaken van een $_GET array niet de inhoud van de $_GET array willen vervangen.
Mits jij in project werkt waar het overal en nergens wordt gebruikt en jij toch graag die variabelen schoon wilt hebben zonder dat de site rare kuren zoals het niet meer inladen van pagina's ofzo.

Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
.Gertjan. schreef op dinsdag 23 november 2010 @ 07:23:
Is het overigens niet gevaarlijk om voor je file IO af te hangen van GET variabelen (dat is tenslotte userinput en users moet je nooit vertrouwen)? Wat gebeurt er als ik script = ../../config type= php doe :? Of is dat juist het WTF momentje?
Dat is het precies, ik kan net zo goed als script ../passwords en type .php opgeven, dan laat hij zomaar van alles zien.

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

CyBeR schreef op dinsdag 23 november 2010 @ 02:50:
[...]


Ja, dan had 'ie geen namen moeten kiezen als voorbeelden maar normale woorden zoals 'frietje' en 'lepeltje'. Namen aanpassen is gewoon not done.
Aannames doen is ook not done :P Misschien is het wel zo hoor en dat is inderdaad not done maar dat de domeindiscussie --gebaseerd op een aanname-- langer duurt dan de technische discussie vind ik, zeker voor deze draad, nogal opmerkelijk :)

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!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

kenneth schreef op dinsdag 23 november 2010 @ 10:19:
[...]

Aannames doen is ook not done :P Misschien is het wel zo hoor en dat is inderdaad not done maar dat de domeindiscussie --gebaseerd op een aanname-- langer duurt dan de technische discussie vind ik, zeker voor deze draad, nogal opmerkelijk :)
Omdat de technische discussie er niet echt toe doet-- het is technisch weinig problematisch om verkleinwoorden aan te passen naar hun grotere evenbeeld. Je zult allicht een lijst uitzonderingen moeten maken, maar moeilijk is dat niet. The real WTF zat 'm in de namen.

Overigens, de functie heet "corrigeerNaam($naam)". Dus dat lijkt me de functie hebben zoals hier omschreven.

[ Voor 8% gewijzigd door CyBeR op 23-11-2010 10:23 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ex-collega van me die in 3 verschillende tabellen username/password combinaties heeft zitten omdat de ene user andere dingen mocht dan de andere... heel relaxt en een bitch nu in onderhoud :{

Acties:
  • 0 Henk 'm!

  • Jrz
  • Registratie: Mei 2000
  • Laatst online: 10:52

Jrz

––––––––––––

Cartman! schreef op dinsdag 23 november 2010 @ 10:23:
Ex-collega van me die in 3 verschillende tabellen username/password combinaties heeft zitten omdat de ene user andere dingen mocht dan de andere... heel relaxt en een bitch nu in onderhoud :{
1 tabel maken met alle gegevens, en dan 3 views?

Ennnnnnnnnn laat losssssssss.... https://github.com/jrz/container-shell (instant container met chroot op current directory)


Acties:
  • 0 Henk 'm!

  • Xirt
  • Registratie: December 2003
  • Laatst online: 21-09 09:14
Ik kwam in het tijdperk dat ik nog Joomla gebruikte iets tegen dat er ongeveer zo uit zag (core Joomla 1.0.x; was gerelateerd aan het achterhalen van het Itemid van de huidige pagina).

PHP:
1
2
3
4
5
6
$Itemid = 0;
if ($Itemid) {
   // foo
} else {
   // bar
}

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
ZeroSixZero schreef op dinsdag 23 november 2010 @ 12:13:
Ik kwam in het tijdperk dat ik nog Joomla gebruikte iets tegen dat er ongeveer zo uit zag (core Joomla 1.0.x; was gerelateerd aan het achterhalen van het Itemid van de huidige pagina).

PHP:
1
2
3
4
5
6
$Itemid = 0;
if ($Itemid) {
   // foo
} else {
   // bar
}
Daar komt toch altijd false uit (--> bar) omdat ie 0 on the fly converteert naar false?

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 01:17
CyBeR schreef op dinsdag 23 november 2010 @ 10:22:
het is technisch weinig problematisch om verkleinwoorden aan te passen naar hun grotere evenbeeld. Je zult allicht een lijst uitzonderingen moeten maken, maar moeilijk is dat niet.
Ik heb afgelopen jaren wel eens wat met NLP gedaan, vooral veel Prolog kloppen dus, en zeker als je het binnen zinnen syntactisch correct wilt houden wordt het nog een aardig geklooi helaas :/

[ Voor 5% gewijzigd door FragFrog op 23-11-2010 15:53 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 07-10 14:06
Ik heb ooit een interface geschreven om database opdrachten te verwerken.
Die classe werkt vlotjes, en is met de jaren toch redelijk uitgebreid geraakt.
Vanwege dat groeien zou ik de classe moeten herzien, aangezien je duidelijk verschillende programmeer stijlen door elkaar ziet, maar dat maakt het tegelijk wel leuk.

Een voorbeeldje van de oudste code:
De weergegeven methode is geschreven om te debuggen.
De methode echter ook bruikbaar om je database connectie te controleren.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class DBI
{
//........
    function status($message=false)
    {
        $this->_status = false;
        switch(true)
        {
            case empty($this->_server):
                if($message) $this->_status = 'Servername required'."\r\n";
            break;
            case empty($this->_username):
            case empty($this->_password):
                if($message) $this->_status = 'Authentification required'."\r\n";
            break;
            case (!$this->_link_server):
                if($message) $this->_status = 'Connection failed verify servername, username and password'."\r\n";
            break;
            case (!$this->_link_database):
                if($message) $this->_status = 'Database not found'."\r\n";
            break;
            case (!$this->_result):
                if($message)  $this->_status = mysqli_errno($this->_link_server) . ": " . mysqli_error($this->_link_server) . "\r\n\r\n" . $this->_query . "\r\n\r\n";
            break;
            default:
                $this->_status = true;
                if($message) $this->_status = "ok: " . $this->_query . "\r\n";
            break;
        }
        return $this->_status;
    }
}


*Ik post dit in verband met de discussie over het gebruik van switch case. Er is geen dringende reden om het te veranderen

** Vandaag een belangrijke wijziging gedaan. Voorheen returned iedere case standaard een statusgetal, was om te weten of alles ok is deed je if(status==7). Dat omdat oorsponkelijk er 7 cases waren. Later zijn er cases samengevoegd.

[ Voor 29% gewijzigd door g4wx3 op 23-11-2010 20:39 ]

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Status bevat dus een string ( true in php ) of een boolean?

Ik stel me zo voor dat dit fout gaat:

PHP:
1
2
3
4
5
$debug = true
// (....)
if ( !$obj->status($debug) ) {
    // Connection error.
}

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
.Gertjan. schreef op dinsdag 23 november 2010 @ 07:23:
[...]


Behalve dat je misschien het stukje "inc/".$_GET['script'].".".$_GET['type'] beter in een variabele had kunnen gooien is er toch weinig mis mee? Mooi is anders, maar ik krijg geregeld code onder ogen die op tientallen plekken een string aan elkaar plakt om bijvoorbeeld een file te bepalen, ben er geen fan van (en bij fouten zoek je je helemaal een ongeluk), maar echt heel erg fout is het toch niet?

Is het overigens niet gevaarlijk om voor je file IO af te hangen van GET variabelen (dat is tenslotte userinput en users moet je nooit vertrouwen)? Wat gebeurt er als ik script = ../../config type= php doe :? Of is dat juist het WTF momentje?
Hoe kan je dit dan op z'n netst doen?

Persoonlijk gebruik ik tegenwoordig steeds meer printf() en sprintf():
PHP:
1
<?printf("inc/%s.%s", $script, $type)?>


Ik vind het op zich best fijn werken.

Andere methodes die ik vroeger gebruikte:
PHP:
1
<?="inc/$script.$type"?>

PHP:
1
<?='inc/'.$script.'.'.$type?>


De 1e methode is op zich ook wel handig, maar als je echo't in een HTML document kan je geen functies loslaten op de variables die je naar het document stuurt; dat kan bij sprintf en printf wel:
PHP:
1
<?printf("<div>%s</div>", html($title));?>

PHP:
1
2
3
4
<?php
$htmlTitle = html($title);
print "<div>$htmlTitle</div>";
?>

PHP:
1
<?='<div>'.html($title).'</div>'?>


html() is een alias voor een charset-safe htmlentities()

[ Voor 22% gewijzigd door Gamebuster op 23-11-2010 21:31 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Nu online
ReenL schreef op dinsdag 23 november 2010 @ 20:51:
Status bevat dus een string ( true in php ) of een boolean?

Ik stel me zo voor dat dit fout gaat:

PHP:
1
2
3
4
5
$debug = true
// (....)
if ( !$obj->status($debug) ) {
    // Connection error.
}
een lege string returned false vziw

Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

Gamebuster schreef op dinsdag 23 november 2010 @ 21:26:
[...]

Hoe kan je dit dan op z'n netst doen?

Persoonlijk gebruik ik tegenwoordig steeds meer printf() en sprintf():
PHP:
1
<?printf("inc/%s.%s", $script, $type)?>


Ik vind het op zich best fijn werken.

Andere methodes die ik vroeger gebruikte:
PHP:
1
<?="inc/$script.$type"?>

PHP:
1
<?='inc/'.$script.'.'.$type?>


De 1e methode is op zich ook wel handig, maar als je echo't in een HTML document kan je geen functies loslaten op de variables die je naar het document stuurt; dat kan bij sprintf en printf wel:
PHP:
1
<?printf("<div>%s</div>", html($title));?>

PHP:
1
2
3
4
<?php
$htmlTitle = html($title);
print "<div>$htmlTitle</div>";
?>

PHP:
1
<?='<div>'.html($title).'</div>'?>


html() is een alias voor een charset-safe htmlentities()
Hoe je het best een file kunt openen zou ik niet weten (ik doe wel iets van PHP zo nu en dan, maar heb eigenlijk nog nooit met (dynamische)files hoeven werken), ik doelde meer op het ontbreken van controles en het onveilige idee dat ik heb bij het opzetten van een pagina welke afhankelijk van een post/get variabele een bestand van de server ophaalt. Als je dat wilt doen moet je wel heel erg goed opletten en zorgen dat je in ieder geval niet buiten je website folder kan komen. Dit zowel op gebied van beveiliging (dus je website user niet buiten zijn eigen folders toestaan) als in de code (afvangen dat er bijvoorbeeld geen / of \ in mag staan of dat bepaalde extensies niet zijn toegestaan, want stel je voor dat je script ineens je .php files gaat weggeven :D).

Het laten downloaden/openen van files is in mijn ogen een vrij gevoelig en complex punt, een foutje en je hele logica/data/beveiliging ligt op straat :)

Overigens vermoed ik dat in jouw geval er dynamisch een deel van het script wordt opgehaald en vervolgens in de PHP wordt gezet (en als PHP wordt behandeld) terwijl ik er tot nu toe vanuit ging dat het iets was als bijvoorbeeld een image host (dat je dus afhankelijk van een bepaalde get/post waarde een plaatje van de schijf haalde)

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!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07-10 19:27

Matis

Rubber Rocket

418O2 schreef op dinsdag 23 november 2010 @ 21:29:
een lege string returned false vziw
When converting to boolean, the following values are considered FALSE:

* the boolean FALSE itself
* the integer 0 (zero)
* the float 0.0 (zero)
* the empty string, and the string "0"
* an array with zero elements
* an object with zero member variables (PHP 4 only)
* the special type NULL (including unset variables)
* SimpleXML objects created from empty tags
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>

8)7

[ Voor 30% gewijzigd door Matis op 24-11-2010 08:22 ]

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


Acties:
  • 0 Henk 'm!

  • Xirt
  • Registratie: December 2003
  • Laatst online: 21-09 09:14
Davio schreef op dinsdag 23 november 2010 @ 12:16:
[...]

Daar komt toch altijd false uit (--> bar) omdat ie 0 on the fly converteert naar false?
I.p.v. //foo stond er nog een behoorlijk groot stuk code op die plek die daardoor dus nooit uitgevoerd werd ;).

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 11:42

Sebazzz

3dp

Matis schreef op woensdag 24 november 2010 @ 08:21:
[...]


[...]

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>

8)7
Dat noemen ze designkeuzes :p

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


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 19-09 15:37
Matis schreef op woensdag 24 november 2010 @ 08:21:
[...]


[...]

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>

8)7
Ik zie niet helemaal wat jij hier gek aan vindt. Het is duidelijk gedocumenteerd en in een groot aantal van die dingen kan ik me ook vinden (aangezien PHP ongelofelijk weak-typed is)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07-10 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hebben we dat non-argument ook weer. Ik haal de epic post van Janoz er maar weer bij:
Janoz schreef op vrijdag 10 oktober 2008 @ 15:42:
Als ik aan een stuur naar rechts draai wil ik dat ik naar rechts ga. Dan kun je documenteren dat het andersom werkt, het verdedigen door te vertellen dat er nu eenmaal een clockwise wormwiel gebruikt is en als handig voorbeeld aandragen dat je bij het achteruitrijden gewoon naar de jusite kant stuurt. Het is volkomen logisch dat het zo werkt door het gebruikte wormwiel, maar maakt dat het ook automatisch logisch dat je naar links moet sturen om rechtsaf te gaan?
Dat je dingen documenteert maakt nog niet dat het een goede keuze was. Overigens ben ik het wel met je eens dat het hier wel meevalt. Het enige rare vind ik dat "false" blijkbaar geen false wordt, maar "0" wel. En "000" dan weer 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!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 06-10 21:59

bomberboy

BOEM!

Eentje van mezelf die me redelijk wat debug-tijd gekost heeft...

Hoe bepaal je het minimum van een unsigned long long en een int? Niet zo in ieder geval:
C++:
1
2
3
4
unsigned long long bytesTodo;
int size;
...
int min = std::min((int) bytesTodo, size);


(stomweg bestaande code snel snel aanpassen zonder eerst goed te lezen is niet altijd positief)

[ Voor 15% gewijzigd door bomberboy op 24-11-2010 12:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

bomberboy schreef op woensdag 24 november 2010 @ 12:36:
Eentje van mezelf die me redelijk wat debug-tijd gekost heeft...

Hoe bepaal je het minimum van een unsigned long long en een int? Niet zo in ieder geval:
C++:
1
2
3
4
unsigned long long bytesTodo;
int size;
...
int min = std::min((int) bytesTodo, size);


(stomweg bestaande code snel snel aanpassen zonder eerst goed te lezen is niet altijd positief)
Het minimum van een unsigned long long? Dat lijkt mij eigenlijk 0 :P En die van een int is natuurlijk systeemafhankelijk...maar dat kan je met sizeof wel oplossen lijkt me.

Of begrijp ik je nu volledig verkeerd? :')

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07-10 19:27

Matis

Rubber Rocket

Volgens mij zit het probleem hem in het feit dat bij de unsigned long long (0 tot 2^128-1 (ofzo)) cast naar een integer (-2^32 tot 2^32-1) en van de integer size dan opvraagt wat het minimum van is van die twee.
Met een beetje pech geeft dat dus -2^32 terug :P

[ Voor 10% gewijzigd door Matis op 24-11-2010 13:55 ]

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


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07-10 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

@Akatos en Matis: :?
Wat std::min() doet is het minimum bepalen van 2 waarden, niets meer en niets minder. De functie wil alleen twee dezelfde typen, je moet dus óf de één casten naar een unsigned long long (wat overigens doorgaans een 64 bits getal is, niet een 128 bits getal), of de ander naar een int (zoals bomberboy doet). Het probleem daarbij is dat een int negatief kan zijn, en een unsigned long long niet. Maar aangezien de variabele 'size' heet lijkt me dat dat typisch niet voor kan komen in dit geval, waardoor je weg kunt komen met 'size' te casten naar een unsigned long long, ookal past het resultaat per definitie in een int.

Als size ook negatief mag zijn, kun je zoiets doen:
C++:
1
2
int todo = (int)std::min(bytesToDo, (unsigned long long)std::numeric_limits<int>::max());
int min = std::min(todo, size);

[ Voor 19% gewijzigd door .oisyn op 24-11-2010 14:14 ]

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


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 01:17
.oisyn schreef op woensdag 24 november 2010 @ 12:16:
Dat je dingen documenteert maakt nog niet dat het een goede keuze was. Overigens ben ik het wel met je eens dat het hier wel meevalt. Het enige rare vind ik dat "false" blijkbaar geen false wordt, maar "0" wel. En "000" dan weer niet.
Tja, op zich kan ik me er wel in vinden dat een string die niet 1:1 heen-en-weer te casten is naar een bepaald type opgevat wordt als string, en dat niet-lege strings altijd true zijn. "000" naar int en terug levert je "0" op, dat wil je ook niet lijkt me, om het dan op te vatten als een normale string is nog wel logisch.

Al had ik zelf liever ook gezien dat ze het helemaal consistent deden en dus ofwel "0" ook true oplevert of "false" naar false evalueert. Then again, heel veel input in PHP komt gewoon uit je POST / GET arrays en nagenoeg alle waardes daarin zijn strings (of arrays van strings). Als je dan een dropdown op je pagina hebt en de default keuze is dat je niets selecteert en die geef je de value "0" of "" dan verwacht je ook dat je aan de PHP kant gewoon iets als if (!$_POST['optionId']) kan doen - wat nu het geval is.

Geredeneerd vanuit wat je normaliter binnenkrijgt zijn die keuzes zo vreemd nog niet, tenminste, niet vanuit het perspectief dat je met zo min mogelijk code dingen voor elkaar wil krijgen. Dat bij grotere projecten leesbaarheid en duidelijkheid belangrijker is dan hier en daar wat minder typewerk is helaas een vervelende bijkomstigheid :+

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 06-10 21:59

bomberboy

BOEM!

.oisyn schreef op woensdag 24 november 2010 @ 14:09:
...
Het probleem daarbij is dat een int negatief kan zijn, en een unsigned long long niet. Maar aangezien de variabele 'size' heet lijkt me dat dat typisch niet voor kan komen in dit geval, waardoor je weg kunt komen met 'size' te casten naar een unsigned long long, ookal past het resultaat per definitie in een int.
Exact. Was een typisch geval van snel snel iets "op te lossen". En in de testcases werkt het natuurlijk allemaal zoals het hoort omdat je het niet met voldoende grote getallen test...
... om dan 2 maand later als een boomerang tegen je neus te knallen :+

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 00:40
In de categorie 'verwarrend':
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if ( 'aap' ) {
        echo '"aap" als boolean is true' . "\n";
}
else {
        echo '"aap" als boolean is false' . "\n";
}

echo '"aap" als int is ' . intval('aap') . "\n";

if ( 0 ) {
        echo 'Het getal 0 als boolean is true' . "\n";
}
else {
        echo 'Het getal 0 als boolean is false' . "\n";
}
?>


Uitvoer:
spoiler:
"aap" als boolean is true
"aap" als int is 0
Het getal 0 als boolean is false

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Als 'aap' als boolean true is en als integer 0 dan zal er voor het casten van strings naar booleans simpelweg niet de omweg via een integer worden gemaakt. Niets verwarrends aan :P

Hadden we deze discussie trouwens niet al een keer of drie gehad in dit topic?

[ Voor 27% gewijzigd door CodeCaster op 24-11-2010 18:43 ]

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


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
EdwinG schreef op woensdag 24 november 2010 @ 18:31:
In de categorie 'verwarrend':
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if ( 'aap' ) {
        echo '"aap" als boolean is true' . "\n";
}
else {
        echo '"aap" als boolean is false' . "\n";
}

echo '"aap" als int is ' . intval('aap') . "\n";

if ( 0 ) {
        echo 'Het getal 0 als boolean is true' . "\n";
}
else {
        echo 'Het getal 0 als boolean is false' . "\n";
}
?>


Uitvoer:
spoiler:
"aap" als boolean is true
"aap" als int is 0
Het getal 0 als boolean is false
Jah, dat is de vorige pagina ook langs gekomen ( Matis in "[alg] Slechtste programmeervoorbeelden d..." ), en dat was al de zoveelste keer dat de conversie regels van PHP ter sprake komen.

“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.”


Verwijderd

Kwam net deze tegen in een project hier op stage:

C++:
1
2
3
4
5
6
7
    
double coordinate (int hemisphere, string _time)
{
    if (hemisphere < 0 || hemisphere > 0) return 0.0;
    
    return this->coordinates[hemisphere][_time];
}


Het was de bedoeling dat hemisphere <0, 1> was...niet zo gek dat het niet werkte :')

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07-10 18:52
Gelukkig werkt de code prima op de helft van de wereld. :P Dit is trouwens een goede casus voor het gebruik van enums als je feitelijk maar een paar waarden kunt supporten. Uit de declaratie is namelijk niet duidelijk dat alleen 0 en 1 gebruikt kunnen worden, en of 0 correspondeert met oost, west, noord of zuid.

[ Voor 68% gewijzigd door Soultaker op 25-11-2010 10:59 ]


Verwijderd

Daar heb ik het nu ook naar veranderd ja. Het was gedaan met defines :X

  • Chip.
  • Registratie: Mei 2006
  • Niet online
EdwinG schreef op woensdag 24 november 2010 @ 18:31:
In de categorie 'verwarrend':
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if ( 'aap' ) {
        echo '"aap" als boolean is true' . "\n";
}
else {
        echo '"aap" als boolean is false' . "\n";
}

echo '"aap" als int is ' . intval('aap') . "\n";

if ( 0 ) {
        echo 'Het getal 0 als boolean is true' . "\n";
}
else {
        echo 'Het getal 0 als boolean is false' . "\n";
}
?>


Uitvoer:
spoiler:
"aap" als boolean is true
"aap" als int is 0
Het getal 0 als boolean is false
http://www.php.net/manual/en/types.comparisons.php

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 01:17
*insert vier comments over dat het dan wel in de handleiding staat maar dat het nog steeds stom is*

Sorry :+

[ Site ] [ twitch ] [ jijbuis ]


  • g4wx3
  • Registratie: April 2007
  • Laatst online: 07-10 14:06
je kan altijd "===" gebruiken, dan ben je zeker dat het is wat het is.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# You are not expected to understand this
class MENU
{
    var $_list;
    var $_name;
    function __construct()
    {
        $this->_list = array();
    }
    function set_name($name)
    {
        $this->_name = $name;
    }
    function set_li($label,$link=NULL,$arguments=NULL)
    {
        $this->_list[] = array('label'=>$label,'link'=>$link,'arguments'=>$arguments);
    }
    function get_html()
    {
        $code = '<ul';
        if(isset($this->_name))
        $code .= ' ' . $this->_name;        
        $code .= '>' . "\r\n";
        foreach($this->_list as $li)
        {
            $code .= '<li>';
            if(isset($li['link']))
            {
                $code .= '<a href="';
                $code .= $li['link'].'"';
                if(isset($li['arguments']))
                $code .= $li['arguments'];
                $code .= '>';
            }
            $code .= $li['label'];
            if(isset($li['link']))
            $code .= '</a>';
            $code .= '</li>'."\r\n";
        }
        $code .= '</ul>'."\r\n";
        return $code;
    }
    function set_menu($menu_items,$key)
    {
        $this->_menu_items = $menu_items;
        $this->_key = $key;
        
        foreach($menu_items as $li)
        {
            $label = $li[0];
            $link  = NULL;
            $arguments = NULL;
            if(isset($li[1])) 
            {
                $link = $li[1];
                if( $this->get_menu_active()==$link )
                $arguments = ' class="active"';
                $link = $this->build_link($link,$key);
            }
            $this->set_li($label,$link,$arguments);     
        }
    }
    function get_menu_active()
    {
        $menu_links = array();
        foreach($this->_menu_items as $li)
        {
            if(isset($li[1]))
            $menu_links[] = $li[1];
        }
        $menu_active = $menu_links[0];
        if(isset($_GET[$this->_key]))
        {
            if(in_array($_GET[$this->_key],$menu_links))
            {
                $menu_active = $_GET[$this->_key];
            }
        }
        return $menu_active;
    }
    function build_link($link,$key)
    {
        return 'index.php?'.$key.'='.$link;
    }
}

Dit was vrij buggy...

Ondertussen heb ik het een beetje herwerkt tot het volgende
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class MENU
{
    var $_name;
    var $_menu_items;
    var $_key;
    function __construct($name=NULL)
    {
        $this->_name = $name;
    }
    function create_menu($menu_items,$key=NULL)
    {
        $this->_menu_items = $menu_items;
        $this->_key = $key;
    }
    function menu_active($value=NULL)
    {
        $menu_values = array();
        foreach($this->_menu_items as $menu_item)
        {
            if(isset($menu_item[1]))
                $menu_values[] = $menu_item[1];
        }
        $menu_active = NULL;
        if(isset($_GET[$this->_key]))
        {
            if(in_array($_GET[$this->_key],$menu_values))
                $menu_active = $_GET[$this->_key];
        }
        if(isset($value))
        return $menu_active == $value;
        else
        return $menu_active;
    }
    function get_html()
    {
        $code = '<ul';
        if(isset($this->_name))
            $code .= ' class="' . $this->_name . '"';       
        $code .= '>' . "\r\n";
        foreach($this->_menu_items as $menu_item)
        {
            $code .= '<li>';
            if(is_array($menu_item)) 
            {
                if(isset($menu_item[1]))
                {
                    $code .= '<a href="'.url(array($this->_key=>$menu_item[1])).'"';
                    if($this->menu_active($menu_item[1]))
                        $code .= ' class="active"';
                    $code .= '>';
                }
                $code .= $menu_item[0];
                if(isset($menu_item[1]))
                    $code .= '</a>';
            }
            else
            {
                $code .= $menu_item;
            }
            $code .= '</li>'."\r\n";
        }
        $code .= '</ul>'."\r\n";
        return $code;
    }
}

BTW: I know dat class="active" een beetje raar zit daar... en waarschijnlijk is dat niet het enige dat hier raar aan is

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • rhodium
  • Registratie: Augustus 2003
  • Laatst online: 10:59
Gister een bug... items voor 2011 werden gezien als archief.

Project toen in een dag gebouwd en dat was ook wel te zien :).
Waarom ik abs() heb gebruikt is mij een raadsel.

PHP:
1
2
3
4
5
$CurrentDate     = (int) date('Y').abs(date('m')); //201011
$SelectedDate   = (int) $GetVars['year'].abs($GetVars['month']); //20111

if($CurrentDate > $SelectedDate) //archive
else //normaal


Haastige spoed is inderdaad zelden goed :).

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Matis schreef op woensdag 24 november 2010 @ 08:21:
[...]


[...]

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>

8)7
TRWTF is waarom je uberhaupt een integer, string, float of array als boolean zou willen casten of interpreteren 8)7.

PHP:
1
2
3
4
5
<?php
$input = 42;
if ($input == true) {
   echo 'JOAH! 42 is den waarheid!';
}
EdwinG schreef op woensdag 24 november 2010 @ 18:31:
PHP:
1
2
3
4
5
<?php
if ( 'aap' ) {
        echo 'Ik interpreteer "aap" als boolean ipv het te vergelijken met een andere string of door een functie als empty() haal zoals je met strings zou moeten doen.';
}
?>
Een string direct als boolean waarde te interpreteren lijkt me sowieso apart en / of onlogisch - je moet de precieze regels van PHP hier al bijhalen om er enige logica aan te hangen, en aangezien die (blijkbaar) gewoon niet logisch zijn... kun je beter gewoon met iets vergelijken of door een functie halen.
g4wx3 schreef op donderdag 25 november 2010 @ 21:55:
PHP:
1
2
# You are not expected to understand this
// lappes code

BTW: I know dat class="active" een beetje raar zit daar... en waarschijnlijk is dat niet het enige dat hier raar aan is
Zelf zou ik het menu object doorsturen naar een (P)HTML template dat de HTML genereert op basis van het menu en zijn onderdelen. Evt roept die weer een ander template aan dat de individuele menu-elementen naar html omzet.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07-10 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

YopY schreef op vrijdag 26 november 2010 @ 12:20:
[...]


TRWTF is waarom je uberhaupt een integer, string, float of array als boolean zou willen casten of interpreteren 8)7.
Da's niet zo raar hoor
PHP:
1
2
3
4
5
6
$a = array();
// ...
if ($a)
{
    // $ a is geen lege array
}

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 vrijdag 26 november 2010 @ 12:38:
[...]

Da's niet zo raar hoor
PHP:
1
2
3
4
5
6
$a = array();
// ...
if ($a)
{
    // $ a is geen lege array
}
Persoonlijk vind ik het volgende dan logischer, of in ieder geval minder raar.

PHP:
1
2
3
4
5
6
$a = array();
//...
if(!empty($a))
{
   // $a is geen lege array.
}


Een boolean vind ik true of false. Als je dan ineens, afhankelijk van het object dat je gebruikt, een andere betekenis eraan gaat geven, vind ik het maar verwarrend.

Ik bedoel, hoe moet je weten dat als je het volgende checkt:

PHP:
1
2
$a = array()
if($a)


dat er dan gekeken wordt of hij empt() is. Voor hetzelfde geld, checkt hij wel of er minder dan 10 items in de array zit en of saturnus en de maan op één lijn liggen (edit: ze liggen natuurlijk altijd op één lijn, doh maargoed). Ik realiseer me dat dit gedocumenteerd is, maar persoonlijk vind ik dat logica vooral logisch moet zijn en zonder al te veel documentatie begrepen moet kunnen worden.

[ Voor 53% gewijzigd door Verwijderd op 26-11-2010 13:06 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Verwijderd schreef op vrijdag 26 november 2010 @ 12:59:
[...]


Persoonlijk vind ik het volgende dan logischer, of in ieder geval minder raar.

PHP:
1
2
3
4
5
6
$a = array();
//...
if(!empty($a))
{
   // $a is geen lege array.
}
Precies, en dat is daar ook gewoon voor:
[quote=http://php.net/manual/en/function.empty.php]
Returns FALSE if var has a non-empty and non-zero value.
The following things are considered to be empty:

• "" (an empty string)
• 0 (0 as an integer)
• "0" (0 as a string)
• NULL
• FALSE
• array() (an empty array)
• var $var; (a variable declared, but without a value in a class)


Liever expliciet dan impliciet en hopen dat het juiste gedrag wordt vertoond...

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


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 19-09 15:37
YopY schreef op vrijdag 26 november 2010 @ 12:20:
[...]


TRWTF is waarom je uberhaupt een integer, string, float of array als boolean zou willen casten of interpreteren 8)7.
In een weak-typed language moet je het gedrag van dit soort castes definiëren: ze zijn immers geldig volgens de semantics van de taal. Dat ze (meestal) idioot zijn en niet door programmeurs gebruikt zouden moeten worden is natuurlijk wat anders.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07-10 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op vrijdag 26 november 2010 @ 12:59:
[...]


Persoonlijk vind ik het volgende dan logischer, of in ieder geval minder raar.
Vertel dat maar aan de C en C++ mensen.
C++:
1
2
3
4
5
6
7
8
9
10
int main()
{
    int i;
    cin >> i;
    while (cin)
    {
        cout << i;
        cin >> i;
    }
}

(Overigens zou ik dit korter opschrijven, maar het is om een punt te maken)

Een cast naar bool betekent over het algemeen ongelijk aan 0 / niet leeg / valide.
Een boolean vind ik true of false. Als je dan ineens, afhankelijk van het object dat je gebruikt, een andere betekenis eraan gaat geven, vind ik het maar verwarrend.
Tja, dat is een kwestie van het gedrag op een intuitieve en logische manier definieren en dat documenteren. Operators kun je in sommige talen ook overloaden. Dat betekent niet dat je vermenigvuldigen ineens moet gaan implementeren als aftrekken, ookal kan het wel. Vaak zie je de + operator voor het concateneren van strings. Feitelijk slaat dat ook nergens op, je telt strings niet op. Toch vind niemand dat raar. In C++ worden de shift operatoren << en >> gebruikt voor stream insertion en extraction. In onze codebase is de % operator op 3d vectoren een crossproduct (want een modulo slaat nergens op en hij heeft dezelfde precedence als * en /, dus ideaal voor dat gebruik - met een beetje fantasie kun je er zelfs een × in zien)
CodeCaster schreef op vrijdag 26 november 2010 @ 13:01:
Liever expliciet dan impliciet en hopen dat het juiste gedrag wordt vertoond...
Waarom moet je bij een impliciete cast hopen maar bij een aanroep van empty() niet? En voor het geval het je nog niet opgevallen was, (bool)$x is exact hetzelfde als !empty($x)

[ Voor 97% gewijzigd door .oisyn op 26-11-2010 14:37 ]

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!

  • Kaw
  • Registratie: Maart 2001
  • Laatst online: 03-09 20:24

Kaw

Tijdens een cursus kregen we de volgende code om een tabel in een database te doorzoeken aan de hand van een searchstring:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
          // Get the recordset associated with the legendentry 
          GDO.GRecordset objRS;
          objRS = objLE.InputRecordset;

          objRS.MoveFirst( );
          if ( !( objRS.BOF & objRS.EOF ) )
          {
            if ( objRS.RecordCount > 0 )
            {
              int lNumCols;
              lNumCols = objRS.GFields.Count;
              string strTemp = "";
              // Iterate through the recordset looking at each field to see if it contains the search string 
              while ( !objRS.EOF )
              {
                // Loop through the fields of each record 
                for ( Index = 0; Index <= lNumCols - 1; Index++ )
                {
                  // Only process the gdbText, gdbMemo and number type fields 
                  switch ( objRS.GFields [ Index ].Type )
                  {
                    case GDO.GConstants.gdbText:
                    case GDO.GConstants.gdbMemo:
                    // Execute a substring search on the field value 
                    //////----Step 3---------
                        if (objRS.GFields[Index].Value.ToString() != "")
                        {
                            strTemp = txtSearchString.Text;

                            if (strTemp.IndexOf(objRS.GFields[Index].Value.ToString(), 0) == 0)
                            {
                                // If there is a match then add a row to the feature listview 
                                itmX = lvFeature.Items.Add(objLE.PropertySet.GetValue("Title").ToString());
                                itmX.SubItems.Add(objRS.GFields[Index].Name);
                                itmX.SubItems.Add(objRS.GFields[Index].Value.ToString());
                                nTotRecords = nTotRecords + 1;
                                // Resize the bookmark array if it is getting close to being full 
                                if (nTotRecords + 5 >= nSizeBookmarkArray)
                                {
                                    nSizeBookmarkArray = nSizeBookmarkArray + BOOKMARKARRAY_INCREMENT;

                                    vBookmark = new object[nSizeBookmarkArray];
                                }
                                // Keep track of the bookmark for each row in the listview, so it can be retrieved 
                                // quickly when the user selects a row in the listview 
                                vBookmark[nTotRecords] = objRS.get_Bookmark();
                            }
                        }

                    break;

                    case GDO.GConstants.gdbDouble:
                    case GDO.GConstants.gdbInteger:
                    case GDO.GConstants.gdbLong:
                    case GDO.GConstants.gdbSingle:
                    // If the field type is numeric check first if the search string is numeric
                    strTemp = txtSearchString.Text;
                    try
                    {
                      Convert.ToInt32( strTemp );

                      try //Checking for the Numeric Data in the String.
                      {
                        strTemp = objRS.GFields [ Index ].Value.ToString( );
                        Convert.ToInt32( strTemp );

                        strTemp = txtSearchString.Text;
                        if ( strTemp.IndexOf( ( string )objRS.GFields [ Index ].Value , 0 ) == 0 )
                        {
                          itmX = lvFeature.Items.Add( objLE.PropertySet.GetValue( "Title" ).ToString( ) );
                          itmX.SubItems.Add( objRS.GFields [ Index ].Name );
                          itmX.SubItems.Add( ( System.Windows.Forms.ListViewItem.ListViewSubItem )objRS.GFields [ Index ].Value );
                          nTotRecords = nTotRecords + 1;
                          // Resize the bookmark array if it is getting close to being full 
                          if ( nTotRecords + 5 >= nSizeBookmarkArray )
                          {
                            nSizeBookmarkArray = nSizeBookmarkArray + BOOKMARKARRAY_INCREMENT;

                          }

                          vBookmark [ nTotRecords ] = objRS.get_Bookmark( );
                        }

                      }
                      catch ( Exception ex1 )
                      {
                        //MessageBox.Show( ex1.Message );
                      }

                    }
                    catch (Exception ex2)
                    {
                        //MessageBox.Show(ex2.Message + " - \r\n " + ex2.StackTrace.ToString());
                        //return;
                    }


                    break;
                  }
                }
                // Go to the next record 
                objRS.MoveNext( );
              }

Niet alleen was de performance beneden elk peil, maar ook de code klopte niet. Het veld moest een deelstring zijn van de searchstring, dus werkte andersom dan de bedoeling was.
Toen ik de cursusleider er op aan sprak dat dit echt niet kon, kwam ik er achter dat hij de code niet eens begreep en alles aan de hand deed van het instructieboekje op zijn bureau.

Al met al was het een mooi voorbeeldje van exception-gestuurd programmeren.

Acties:
  • 0 Henk 'm!

Verwijderd

Kaw schreef op vrijdag 26 november 2010 @ 16:57:
Tijdens een cursus kregen we de volgende code om een tabel in een database te doorzoeken aan de hand van een searchstring:
:X

Wat een gedrocht inderdaad.

[ Voor 6% gewijzigd door Verwijderd op 26-11-2010 17:40 ]


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
.oisyn schreef op vrijdag 26 november 2010 @ 12:38:
[...]

Da's niet zo raar hoor
PHP:
1
2
3
4
5
6
$a = array();
// ...
if ($a)
{
    // $ a is geen lege array
}
Ligt eraan. "Als A"... Als a wat? Als a bestaat? Als a gevuld is met iets? Als a een array is? Het statement geeft de intentie van de programmeur niet aan (in mijn mening - het kan best dat er regels zijn voor hoe php omgaat met dit soort statements).

Duidelijker:

[php]
<?php
$a = array();

if (!empty($a))
if (is_array($a))
if ($a != null)

etc. Ja, je kunt de documentatie erbij pakken om te kijken wat php precies doet als je een array in een if stopt, maar wat als je het type van $a ineens verandert? Goeie kans dat het gedrag ook verandert, ineens, als ik naar de eerdere posts over dit onderwerp kijk.
En voor het geval het je nog niet opgevallen was, (bool)$x is exact hetzelfde als !empty($x)
Qua uitkomst misschien, qua logica niet - bij #1 converteer je $x naar bool met daarbij de documentatie van boolean interpretatie van bepaalde datatypes in acht nemend, bij #2 stuur je het naar de empty() functie, waarbij je als luie programmeur (die de documentatie over typeconversies niet wil lezen / onthouden) beter aan kunt nemen dat het een controle op een lege variabele of array is. Self-documenting code enzo.

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Kaw schreef op vrijdag 26 november 2010 @ 16:57:
Tijdens een cursus kregen we de volgende code om een tabel in een database te doorzoeken aan de hand van een searchstring:

[..]

Niet alleen was de performance beneden elk peil, maar ook de code klopte niet. Het veld moest een deelstring zijn van de searchstring, dus werkte andersom dan de bedoeling was.
Toen ik de cursusleider er op aan sprak dat dit echt niet kon, kwam ik er achter dat hij de code niet eens begreep en alles aan de hand deed van het instructieboekje op zijn bureau.

Al met al was het een mooi voorbeeldje van exception-gestuurd programmeren.
Wat een beest. Mooie cursusleider ook.

En deze DB ondersteunt geen SQL neem ik aan?

Daarbij, wat is het nut van zo'n stuk code? Als een klant de naam 'Bart' heeft, betekent dat heel iets anders dan wanneer iemand in 'Bartlehiem' woont of in de 'Barteljorisstraat'.

Acties:
  • 0 Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
418O2 schreef op dinsdag 23 november 2010 @ 21:29:
[...]

een lege string returned false vziw
De string is met debug echter niet leeg :)

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 03-10 16:39
Kaw schreef op vrijdag 26 november 2010 @ 16:57:
Tijdens een cursus kregen we de volgende code om een tabel in een database te doorzoeken aan de hand van een searchstring:
C#:
1
          Snip...

Niet alleen was de performance beneden elk peil, maar ook de code klopte niet. Het veld moest een deelstring zijn van de searchstring, dus werkte andersom dan de bedoeling was.
Toen ik de cursusleider er op aan sprak dat dit echt niet kon, kwam ik er achter dat hij de code niet eens begreep en alles aan de hand deed van het instructieboekje op zijn bureau.

Al met al was het een mooi voorbeeldje van exception-gestuurd programmeren.
Ziet er bekend uit. Cursus programmeren met GeoMedia toevallig :)

[ Voor 75% gewijzigd door urk_forever op 28-11-2010 16:06 ]

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

.oisyn schreef op vrijdag 26 november 2010 @ 14:25:
[...]

Waarom moet je bij een impliciete cast hopen maar bij een aanroep van empty() niet? En voor het geval het je nog niet opgevallen was, (bool)$x is exact hetzelfde als !empty($x)
Ik bedoel specifiek dit geval van de array, eigenlijk ook wat YopY hier zegt:
YopY schreef op zaterdag 27 november 2010 @ 15:10:
[...]


Ligt eraan. "Als A"... Als a wat? Als a bestaat? Als a gevuld is met iets? Als a een array is? Het statement geeft de intentie van de programmeur niet aan (in mijn mening - het kan best dat er regels zijn voor hoe php omgaat met dit soort statements).
Dus dat er aan de hand van de code leesbaarder is wat je bedoelt. Je wil in dit geval verder gaan als de array niet leeg is.

Nu zou ik dat geval sowieso niet if($a) of if (!empty($a)) neerzetten, maar gewoon if (is_array($a) && array_length($a) > 0), maar goed...

[ Voor 16% gewijzigd door CodeCaster op 28-11-2010 16:05 ]

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


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 06-10 22:10
Tja, op mijn werk (c++/java) is dat in 99,9999% van de gevallen een check of een pointer niet null is. Dat hebben ze in PHP zo goed mogelijk geprobeerd te vertalen...

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
MBV schreef op zondag 28 november 2010 @ 22:38:
Tja, op mijn werk (c++/java) is dat in 99,9999% van de gevallen een check of een pointer niet null is. Dat hebben ze in PHP zo goed mogelijk geprobeerd te vertalen...
Ieuw, null :p. Heb zelf een project waar ik eigenlijk geen nulls gebruikt heb. Lege lijsten / arrays teruggeven bij geen resultaten, null object toepassen, etc heeft voor mij de voorkeur. Bespaart weer een bakkes aan if (ding != null) waar je eigenlijk best wel moe van wordt. Natuurlijk zit je nog wel met API's die lekker null terug kunnen geven die je af moet vangen, :'(.

En testen of het een array is en de lengte > 0 is kun je desnoods nog in een functie proppen (zou ik wel doen als je het regelmatig test). Ik zie in Java code bijvoorbeeld veel te vaak regels als

Java:
1
2
3
4
String s = // whatever.
if (s != null && !"".equals(s)) { // of variaties daarop
    doeIets(s)
}


Ten eerste: !"".equals(null) is al false, dus die null check is overbodig.
Ten tweede: StringUtils.isEmpty(), isBlank(), of een eigen functie die je in 0.5 seconden uittikt maakt het leven van de mensen die bovenstaand moeten lezen een stuk eenvoudiger en de kans op bugs (bij goeie toepassing) een stuk lager. Bij user input wil je bijvoorbeeld altijd wel controleren of de string ook alleen whitespace bevat, ipv een normale waarde.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:29

Haan

dotnetter

Daarom doe je in C# ook gewoon
C#:
1
2
3
4
5
string s = // whatever
if (!string.IsNullOrEmpty(s))
{
    // doe iets
}
:Y)

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07-10 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

YopY schreef op zaterdag 27 november 2010 @ 15:10:
[...]


Ligt eraan. "Als A"... Als a wat? Als a bestaat? Als a gevuld is met iets? Als a een array is? Het statement geeft de intentie van de programmeur niet aan (in mijn mening - het kan best dat er regels zijn voor hoe php omgaat met dit soort statements).
Natuurlijk zijn die er. Alle talen hebben dat soort regels. Dat is gewoon een kwestie van aanleren.
maar wat als je het type van $a ineens verandert
Wat is dat nou voor onzin-redenering? Types veranderen niet zomaar, en als ze wel veranderen dan moet je je code sowieso nakijken. Of je nou empty($x) gebruikt of !$x. Logisch ook, want die twee dingen doen exact hetzelfde.
Qua uitkomst misschien, qua logica niet - bij #1 converteer je $x naar bool met daarbij de documentatie van boolean interpretatie van bepaalde datatypes in acht nemend, bij #2 stuur je het naar de empty() functie, waarbij je als luie programmeur (die de documentatie over typeconversies niet wil lezen / onthouden) beter aan kunt nemen dat het een controle op een lege variabele of array is. Self-documenting code enzo.
empty() ís een conversie naar bool. Of, een conversie naar bool is gewoon een aanroep naar empty(). Dus nee, niet alleen de uitkomst is hetzelfde, de code doet exact hetzelfde. De syntax is alleen iets anders. Nogmaals, dat is een kwestie van aanleren. Maar goed, ik snap dat dat bij PHP een hekel punt is, met al die vage regeltjes en onlogische designkeuzes.
empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set.
Overigens is empty() geen functie maar een operator.

[ Voor 16% gewijzigd door .oisyn op 29-11-2010 09:52 ]

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!

  • RayNbow
  • Registratie: Maart 2003
  • Nu online

RayNbow

Kirika <3

Haan schreef op maandag 29 november 2010 @ 09:37:
Daarom doe je in C# ook gewoon
C#:
1
2
3
4
5
string s = // whatever
if (!string.IsNullOrEmpty(s))
{
    // doe iets
}
:Y)
Waarom niet dit?
C#:
1
2
3
4
if ((s??"") == "")
{
    // foo
}

Is iets korter :Y)
.oisyn schreef op maandag 29 november 2010 @ 09:46:
[...]

Overigens is empty() geen functie maar een operator.
Wat is het verschil tussen een functie en een operator? ;)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 06-10 22:10
Dat er allerlei vage edge-cases bijkomen, PHP kennende :X

@YopY: tja, ga maar eens X mln regels code refactoren... Kan ook op een andere manier: maak een object leeg aan, geef een referentie mee aan een functie die het object vult, en kijk of de returnwaarde true is. IMHO is het verschil nou niet zo groot:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
MyStruct x;
if (getData(someIndex, x)) 
{
  showData(x);
}
else 
{
  showError("No Data!");
}

// versus

MyStruct* x = getData(someIndex);
if (x)
{ 
  showData(x);
}
else
{
  showError("No data!");
}
delete x;


Even los van de verantwoordelijkheden van geheugenbeheer vind ik de verschillen nou niet direct schokkend.

Acties:
  • 0 Henk 'm!

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
FragFrog schreef op donderdag 25 november 2010 @ 20:42:
[...]

*insert vier comments over dat het dan wel in de handleiding staat maar dat het nog steeds stom is*

Sorry :+
vind het zelf ook vreemd dat count(false) 1 geeft, maar het staat in de handleiding.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07-10 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

RayNbow schreef op maandag 29 november 2010 @ 10:08:
Wat is het verschil tussen een functie en een operator? ;)
Dat een operator niet in de globale functielijst zit (je kunt er dus ook geen "pointer" naar krijgen), en je een functie geen niet-bestaande var kan geven zonder warning :)

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!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

RayNbow schreef op maandag 29 november 2010 @ 10:08:
[...]

Waarom niet dit?
C#:
1
2
3
4
if ((s??"") == "")
{
    // foo
}

Is iets korter :Y)
De string.IsNullOrEmpty() method geeft overigens gewoon de vergelijking terug van (length == 0), ik weet niet wat de C# compiler met het tweede statement doet, maar ik schat dat string.IsNullOrEmpty() qua kosten beter is.

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 09:59

AW_Bos

Liefhebber van nostalgie... 🕰️

Ik ben moderator op een PHP-forum, en regelmatig kom ik zulke constructies in de topics tegen:

PHP:
1
<?php echo "" . $query['Tekst1'] . ""; ?> 

Mij ontgaat echt compleet het nut waarom iemand een lege string voor en na een variabele wilt plakken :?

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
AW_Bos schreef op maandag 29 november 2010 @ 22:30:
Ik ben moderator op een PHP-forum, en regelmatig kom ik zulke constructies in de topics tegen:

PHP:
1
<?php echo "" . $query['Tekst1'] . ""; ?> 

Mij ontgaat echt compleet het nut waarom iemand een lege string voor en na een variabele wilt plakken :?
Misschien Java-developers die zo een conversie van int naar string willen bewerkstelligen?

Java:
1
String s = "" + (int)5;


Maar dat is niet nodig in PHP.

Acties:
  • 0 Henk 'm!

Verwijderd

MatHack schreef op maandag 29 november 2010 @ 17:42:
[...]


De string.IsNullOrEmpty() method geeft overigens gewoon de vergelijking terug van (length == 0), ik weet niet wat de C# compiler met het tweede statement doet, maar ik schat dat string.IsNullOrEmpty() qua kosten beter is.
Niet helemaal correct. Dit is IsNullOrEmpty:
C#:
1
2
3
4
5
6
7
8
public static bool IsNullOrEmpty(string value)
{
    if (value != null)
    {
        return (value.Length == 0);
    }
    return true;
}


.NET 4.0 geeft je dan ook nog IsNullOrWhiteSpace, welke iets uitgebreider is:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static bool IsNullOrWhiteSpace(string value)
{
    if (value != null)
    {
        for (int i = 0; i < value.Length; i++)
        {
            if (!char.IsWhiteSpace(value[i]))
            {
                return false;
            }
        }
    }
    return true;
}

[ Voor 25% gewijzigd door Verwijderd op 29-11-2010 22:53 ]


Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 07-10 14:41
Weet iemand of/hoe je in Java 251 objecten in 1 object kan stoppen? :D

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


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 11:57
Freeaqingme schreef op dinsdag 30 november 2010 @ 01:00:
Weet iemand of/hoe je in Java 251 objecten in 1 object kan stoppen? :D
:|

Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

En dan de naam array opnemen erin, dan zou je denken dat iemand het enigszins snapt. Maar nee. Epic.

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 25-09 15:21

pieturp

gaffa!

250 ought to be enough! :D

... en etcetera en zo


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:29

Haan

dotnetter

In C# zou je dat met het params keyword doen, heeft Java daar iets vergelijkbaars voor?

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Haan schreef op dinsdag 30 november 2010 @ 08:27:
In C# zou je dat met het params keyword doen, heeft Java daar iets vergelijkbaars voor?
Ja:

Java:
1
2
3
4
public void test(Object... blaat)
{
  // blaat is een array
}

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
RayNbow schreef op maandag 29 november 2010 @ 10:08:
Waarom niet dit?
C#:
1
2
3
4
if ((s??"") == "")
{
    // foo
}
Omdat je dan voor elke vergelijking zeker één en potentieel twee nieuwe strings aan moet maken wat de efficientie v/d generation-based garbage collection in C# ten slechte komt. Wil je dat probleem niet hebben, dan moet je gebruik maken van de cached / interned versie van de lege string:
C#:
1
if ((s ?? string.Empty) == string.Empty)


Is iets langer ;) ...

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Haan schreef op dinsdag 30 november 2010 @ 08:27:
In C# zou je dat met het params keyword doen, heeft Java daar iets vergelijkbaars voor?
In C# zou je dat met de initializer syntax doen. Java heeft toch ook iets vergelijkbaars?
R4gnax schreef op dinsdag 30 november 2010 @ 08:58:
[...]
Omdat je dan voor elke vergelijking zeker één en potentieel twee nieuwe strings aan moet maken wat de efficientie v/d generation-based garbage collection in C# ten slechte komt. Wil je dat probleem niet hebben, dan moet je gebruik maken van de cached / interned versie van de lege string:
Ik heb het vermoeden dat dat bij string literals wel gewoon door de (JIT) compiler afgevangen word. Maar als dat niet het geval is, dan is het nog steeds een micro optimalisatie. Overigens vind ik het wel gewoon duidelijker om de String.Empty te gebruiken ( Al is het marginaal )

edit:
http://blogs.msdn.com/b/brada/archive/2003/04/22/49997.aspx hier word geclaimed dat hij waarschijnlijk wel gewoon uit de string intern pool komt, maar met een klein beetje overhead van het creeren van een extra object. Maar het is dus inderdaad wel een erg marginaal verschil

[ Voor 60% gewijzigd door Woy op 30-11-2010 09:09 ]

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


Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 05-10 11:49
Freeaqingme schreef op dinsdag 30 november 2010 @ 01:00:
Weet iemand of/hoe je in Java 251 objecten in 1 object kan stoppen? :D
:r
Bah, inderdaad los je dat gewoon op met:
Java:
1
2
3
public void blaat( Object.. params ){
//params is now an array of objects, call with: blaat( "test", "test1", "test2", ..... );
}

Zoals Erkens aangeeft

[ Voor 9% gewijzigd door Enfer op 30-11-2010 09:14 ]


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Nu online

RayNbow

Kirika <3

R4gnax schreef op dinsdag 30 november 2010 @ 08:58:
[...]


Omdat je dan voor elke vergelijking zeker één en potentieel twee nieuwe strings aan moet maken wat de efficientie v/d generation-based garbage collection in C# ten slechte komt. Wil je dat probleem niet hebben, dan moet je gebruik maken van de cached / interned versie van de lege string:
C#:
1
if ((s ?? string.Empty) == string.Empty)


Is iets langer ;) ...
Dan maar eenmalig ...
C#:
1
2
3
4
public static bool IsNotEmpty(this string s)
{
    return !string.IsNullOrEmpty(s);
}

...typen, zodat je in het vervolg het volgende kunt doen?
C#:
1
2
3
4
if (s.IsNotEmpty())
{
    // foo
}

:+

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 11:42

Sebazzz

3dp

Woy schreef op dinsdag 30 november 2010 @ 09:04:
[...]

In C# zou je dat met de initializer syntax doen. Java heeft toch ook iets vergelijkbaars?
Heb je het over anonymous types? Dat werkt niet erg prettig eigenlijk, niet als je ze buiten de context van een enkele methode wilt gebruiken:

C#:
1
2
3
4
5
6
7
8
List<???> vliegen = new List<???>();
for (int i=1;i<=10;i++) {
     var vlieg = new { naam="fifi", leeftijd=DateTime.Now.AddHours(-1), cijfer=10 };
     vliegen.Add(vlieg);
}


return vliegen; // wat return ik?

Wat is het type van de typeparameter T in List<T>?

In C# 4 kan je eventueel nog dynamic gebruiken.

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


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
RayNbow schreef op dinsdag 30 november 2010 @ 09:14:
[...]

Dan maar eenmalig ...
C#:
1
2
3
4
public static bool IsNotEmpty(this string s)
{
    return !string.IsNullOrEmpty(s);
}

...typen, zodat je in het vervolg het volgende kunt doen?
C#:
1
2
3
4
if (s.IsNotEmpty())
{
    // foo
}

:+
Dat klopt natuurlijk niet helemaal, als je een static methode hebt met als parameter een string, kun je die niet aanroepen via een methode op het stringobject. Daarbij slaat de this in je parameter nergens op.

C#:
1
2
3
4
5
6
// fout
s.IsNotEmpty();

// goed
KlasseNaam.IsNotEmpty(s);
IsNotEmpty(s); // in dezelfde klasse


Het tweede stuk is nauwelijks langer dan !string.IsNullOrEmpty(s) en je hebt in elke zichzelf respecterende IDE code completion, dus op het moment dat jij "string.IsN" begint te typen, staat het er waarschijnlijk al.

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Nu online

RayNbow

Kirika <3

Davio schreef op dinsdag 30 november 2010 @ 09:41:
[...]

Dat klopt natuurlijk niet helemaal, als je een static methode hebt met als parameter een string, kun je die niet aanroepen via een methode op het stringobject. Daarbij slaat de this in je parameter nergens op.
Extension Methods. ;)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir

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