[alg] Slechtste programmeervoorbeelden deel 2 Vorige deel Overzicht Volgende deel Laatste deel

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

Pagina: 1 ... 8 ... 11 Laatste
Acties:
  • 10.590 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

brama schreef op dinsdag 17 april 2007 @ 16:10:
Maar los van het feit of het al dan niet zonder runtime error zou draaien, lijkt het mij logisch dat je van een vendor vereist dat je code krijgt die Certified Java(TM) is (en dus ook door die compiler gebouwd werd). En zelfs al doe je dat niet, dan verwacht ik dat ze in ieder geval werkende en geteste code opleveren, en erbij vertellen op welk platform het getest is.
Je hebt het nu over onderling vertrouwen tussen personen, en je gaat helemaal voorbij aan het feit dat de VM sandboxed en secure moet zijn. Stel je bent aan het browsen en je stuit op een pagina met een applet. Die applet vergaart informatie over jou uit ongeinitialiseerde variabelen en stuurt dat door naar een online database. Of hij verkrijgt toegang tot bepaalde objecten waar je als applet niet bij kan, maar die wel binnen de VM bestaan en te verkrijgen zijn door ongeinitialiseerde object referenties te gebruiken. Weg sandbox, weg security :).

Kun je wel zeggen "ja maar hij gebruikte geen gecertificeerde compiler!", maar daar zal de maker geen minuut minder van slapen 's nachts, denk je ook niet? ;)

[ Voor 7% gewijzigd door .oisyn op 17-04-2007 16:22 ]

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!

  • Soultaker
  • Registratie: September 2000
  • Nu online
Het is niet zo'n bekend onderdeel van de Java VM architectuur, maar alle code wordt altijd door een verifier gehaald om te bepalen of code geen rare dingen doet, voordat die door de JIT compiler omgezet wordt in code. Een echte interpreter doet het misschien anders, maar is in de praktijk natuurlijk hardstikke traag. Er worden dus geen runtime checks voor gedaan, en ook niet uit zekerheid nullen geïnitialiseerd.

Interessant detail is dat de beveiliging van de VM dus afhangt van de gebruikte verifier. In ieder geval oudere versies van Sun's VM zaten vol met security bugs die je weliswaar niet met Sun's compiler kon triggeren, maar wel met eigengeschreven assembly.

Verder is de werking van de verifier v.z.i.w. niet precies opgenomen in de standaard, dus het kan best zijn dat implementaties verschillen in welke bytecode ze precies accepteren. Sun zegt daar zelf over:
Low Level Security in Java
All class files brought in from "the outside" are subjected to a verifier. This verifier ensures that the class file has the correct format. The bytecodes are verified using a simple theorem prover which establishes a set of "structural constraints" on the bytecodes. [..] The verifier is extremely conservative. It will refuse to certify some class files that a more sophisticated theorem prover might certify.

Acties:
  • 0 Henk 'm!

  • brama
  • Registratie: Februari 2001
  • Niet online
.oisyn schreef op dinsdag 17 april 2007 @ 16:21:
[...]

Je hebt het nu over onderling vertrouwen tussen personen, en je gaat helemaal voorbij aan het feit dat de VM sandboxed en secure moet zijn. Stel je bent aan het browsen en je stuit op een pagina met een applet. Die applet vergaart informatie over jou uit ongeinitialiseerde variabelen en stuurt dat door naar een online database. Of hij verkrijgt toegang tot bepaalde objecten waar je als applet niet bij kan, maar die wel binnen de VM bestaan en te verkrijgen zijn door ongeinitialiseerde object referenties te gebruiken. Weg sandbox, weg security :).

Kun je wel zeggen "ja maar hij gebruikte geen gecertificeerde compiler!", maar daar zal de maker geen minuut minder van slapen 's nachts, denk je ook niet? ;)
Je hebt gelijk, aan die context zat ik niet te denken. Ik zit met mijn hoofd bij bedrijfsprocessen, waar je code aangeleverd krijgt van andere bedrijven :) Maar binnen die context klopt het wel ja. Sowieso moet je uiteraard bij elk model (ook) de security aan de 'server' kant hebben zitten, en niet aan de 'client' kant 1. Willekeurige bytecode mag nooit een VM compromisen, dat ben ik met je eens. Gelukkig blijkt in het geval van stack-variabelen het niet-initializeren al een fout te triggeren, ook op VM niveau.

1: In de begintijden van ICQ had Mirabilis dit niet geheel begrepen. De security zat in de ICQ client. Tot iemand zijn eigen client schreef, en erachter kwam dat de server *elk* wachtwoord langer dan 8 karakters goedkeurde, omdat de officiele client toch nooit langere wachtwoorden kom opsturen :P

I mentioned it once, but I think I got away with it.


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

In NFS van Sun zat ook zoiets. de FS-layer van het OS deed de authenticatie, indien succesvol, haalde hij de gegevens op bij de server. Toen was daar het programma nfsmenu dat alle authenticaties deed slagen, alle 'shares' wijd open :X :X

Hebben ze inmiddels gefixed, is alweer 'n jaar of 10-15 geleden. Dikke lol was dat op school.

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!

Anoniem: 214370

Hallo,

Kan dit korter?

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
               If Not IsDBNull(MyDataReader("serial")) Then
                    tSerial.Text = (MyDataReader("serial"))
                End If

                If Not IsDBNull(MyDataReader("name")) Then
                    tName.Text = (MyDataReader("name"))
                End If

                If Not IsDBNull(MyDataReader("show")) Then
                    tShow.Text = (MyDataReader("show"))
                End If

                If Not IsDBNull(MyDataReader("mob1")) Then
                    tMobile1.Text = (MyDataReader("mob1"))
                End If

                If Not IsDBNull(MyDataReader("house")) Then
                    tHouse.Text = (MyDataReader("house"))
                End If

                If Not IsDBNull(MyDataReader("color")) Then
                    tColor.Text = (MyDataReader("color"))
                End If

                If Not IsDBNull(MyDataReader("type")) Then
                    tType.Text = (MyDataReader("type"))
                End If

                If Not IsDBNull(MyDataReader("cat")) Then
                    tCat.Text = (MyDataReader("cat"))
                End If

                If Not IsDBNull(MyDataReader("subcat")) Then
                    tSub.Text = (MyDataReader("subcat"))
                End If

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:46

gorgi_19

Kruimeltjes zijn weer op :9

Ja dat kan door dmv FindControl en de zut in een array plaatsen, maar wat heeft dat met het topic te maken? :?

[ Voor 17% gewijzigd door gorgi_19 op 22-04-2007 15:41 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 01-06 12:41

Robtimus

me Robtimus no like you

gorgi_19 schreef op zondag 22 april 2007 @ 15:27:
... maar wat heeft dat met het topic te maken? :?
Duhok wil natuurlijk voorkomen dat zijn code hier ooit komt te staan ;)

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Te laat, nu heeft ie het zelf al gepost :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!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:57

Creepy

Tactical Espionage Splatterer

Tuurlijk kan het korter maar het is hier geen topic om vragen in te stellen, daar kan je prima een eigen topic voor maken (mits gelet op het beleid en de quickstart want in deze vorm geef je veel te weinig informatie.

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

  • soulrider
  • Registratie: April 2005
  • Laatst online: 27-11-2017
het sarcasme wordt niet echt gezien precies :o

hopelijk wordt die programmeur daarvan niet betaald per regel code want dan wordt het duur ...

(en wat als er nu eentje bij komt ? - code aanpassen en opnieuw compileren ?)

Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 16:01
soulrider schreef op zondag 22 april 2007 @ 19:09:
En wat als er nu eentje bij komt ? - code aanpassen en opnieuw compileren ?
Waarschijnlijk wel, want dan zal er ook een GUI-element bijmoeten. Bla.Text lijkt me een label.

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Ik heb deze PHP code, en ik gebruik vaak een variant hiervan. Het werkt zoals het moet, maar het is omslachtig. Het kan korter met preg_replace, maar bij regular expressions ben ik bang dat het traag wordt. Wat is hier het efficients?

PHP:
1
2
3
4
$admin_module_tmp = explode('/', $admin_menu->include_module);
array_pop($admin_module_tmp);
array_pop($admin_module_tmp);
$admin_module_dir = implode('/', $admin_module_tmp));

[ Voor 43% gewijzigd door Blaise op 29-04-2007 14:59 . Reden: Excuses, wilde niet offtopic gaan. Deze post was niet bedoeld als "wat is het snelste?" maar als "deze code is vies en wat is een snel en clean alternatief?" ]


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Ik quote even een PRG moderator die hier voor het laatst heeft gereageerd, want blijkbaar lees je de berichten van dit topic niet ;)
Creepy schreef op zondag 22 april 2007 @ 18:42:
Tuurlijk kan het korter maar het is hier geen topic om vragen in te stellen, daar kan je prima een eigen topic voor maken (mits gelet op het beleid en de quickstart want in deze vorm geef je veel te weinig informatie.
Dit gaat hier ook op in.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Blaise schreef op vrijdag 27 april 2007 @ 23:00:
Ik heb deze PHP code, en ik gebruik vaak een variant hiervan. Het werkt zoals het moet, maar het is omslachtig. Het kan korter met preg_replace, maar bij regular expressions ben ik bang dat het traag wordt. Wat is hier het efficients?

PHP:
1
2
3
4
$admin_module_tmp = explode('/', $admin_menu->include_module);
array_pop($admin_module_tmp);
array_pop($admin_module_tmp);
$admin_module_dir = implode('/', $admin_module_tmp));
Denk je werkelijk dat een simpele regex (of zelfs een standaard string bewerking die hier ook mogeljik is) langer duurt dan het alloceren en vullen van een array en dan twee items verwijderen uit die array om er vervolgens weer een nieuwe string van te maken?

Maargoed, doorgaands zijn dat soort optimalisaties nutteloos en zal je het nooit echt merken, helemaal niet als het om weinig data gaat. Leesbaarheid van de code is veel belangrijker. En de code die je hier laat zien is imo niet echt snel leesbaar (en een regex is doorgaands helemaal niet snel leesbaar) dus ik zou dit met een paar simpele string bewerkingen doen denk ik.

leesbaar als in snel lezen en begrijpen wat het doet

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 01-06 11:43

Spockz

Live and Let Live

2x een strrpos uitvoeren. Dan heb je de laatste positie+1 die je wilt hebben. En dan doe je een substr($string, 0, $positie); en klaar.

Zo ongeveer...

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

Anoniem: 201130

Anoniem: 214370 schreef op zondag 22 april 2007 @ 15:16:
Hallo,

Kan dit korter?

Visual Basic .NET:
1
...
Door gewoon
Visual Basic .NET:
1
<% Bind("show") %>


te gebruiken (Zo ff uit mijn hoofd, ik vergeet de syntax altijd.)

Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Om het topic weer op de rails te krijgen een uit mijn oude doos (QuickBasic):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
DO
    FOR I = 1 TO 43
        XOud(I) = X(I)
    NEXT

    '... doe iets met X (geknipt)

    FOR I = 1 TO 43
        IF XOud(I) <> X(I) THEN EXIT FOR
        IF I = 43 THEN EXIT DO
    NEXT
LOOP

De DO-loop moet dus stoppen als X stabiel is.

Het gaat dus om de EXIT FOR en EXIT DO. Bovendien is de 43 hardcoded (net als alle andere constanten in de 1500 regels code).

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
stukje eigen code (ranzige code schrijven voor algoritmiek mag toch wel? O-))

C++:
1
2
3
4
5
6
7
8
9
10
11
12
bool recursor(int *array, int m, int n, int x, int y, int depth) {
(...)
retval = (
               recursor(array, m, n, x-1, y+2, depth+1)
           ||  recursor(array, m, n, x-2, y+1, depth+1) // eerste kwadrant
           ||  recursor(array, m, n, x-2, y-1, depth+1)
           ||  recursor(array, m, n, x-1, y-2, depth+1) // tweede kwadrant
           ||  recursor(array, m, n, x+1, y-2, depth+1)
           ||  recursor(array, m, n, x+2, y-1, depth+1) // derde kwadrant
           ||  recursor(array, m, n, x+2, y+1, depth+1)
           ||  recursor(array, m, n, x+1, y+2, depth+1) // vierde kwadrant
           );


zie hier een recursieve aanroep voor de zetten van een paard... met een || om er uit te vliegen na de eerste true. Jammer alleen dat dat niet in de c++-standaard staat en dat je dus nare resultaten kan krijgen bij suffe compilers ;)

uiteindelijk toch maar opgelost met
C++:
1
2
3
4
5
6
7
int knightrider::dx[8] = {-1, -2, -2, -1, 1, 2, 2, 1};
int knightrider::dy[8] = {2, 1, -1, -2, -2, -1, 1, 2};
(...)
bool knightrider::recursor(int x, int y, int depth) {
(...)
 for (int i = 0; i < 8 && !retval; i++)
    retval = recursor(x+dx[i], y+dy[i], depth+1);


(en ja, meteen array, m en n ook in de class gegooid ;))


@hierboven: exit for en exit do zijn niet per definitie smerige statements. In een c++ versie zou je daar continue; en break; voor gebruiken, maar het idee is hetzelfde...

[ Voor 6% gewijzigd door ValHallASW op 28-04-2007 01:06 ]


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 01-06 11:43

Spockz

Live and Let Live

@Blaise & Erkens:
Zoals je op deze en deze pagina's kunt zien scheelt het weinig in run tijd of je de array methode of de string methode gebruikt. De vergelijking is natuurlijk een beetje krom omdat de functie in stroperations nog wat meer mogelijkheden heeft.

Ik moet wel een opmerking plaatsen: Zend Optimizer staat wel geïnstalleerd.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22:01
Spockz schreef op zaterdag 28 april 2007 @ 01:13:
@Blaise & Erkens:
Zoals je op deze en deze pagina's kunt zien scheelt het weinig in run tijd of je de array methode of de string methode gebruikt. De vergelijking is natuurlijk een beetje krom omdat de functie in stroperations nog wat meer mogelijkheden heeft.

Ik moet wel een opmerking plaatsen: Zend Optimizer staat wel geïnstalleerd.
't scheelt meer dan 50% en jij vindt dat niet veel? 8)7 The real WTF is...
dat mbv vergeet dat servers nog wel eens wat anders doen dan 1 request.

verschil is dus tussen 0,000145 en 0,000137, wat nog altijd niet slecht is voor beter leesbare code :P

Weet je wat leuk is: de performanceverschillen tussen de verschillende manieren om door een array heen te lopen. De meest ranzige, onleesbare code was volgens mij het snelste :(

http://www.php.lt/benchmark/phpbench.php

[ Voor 23% gewijzigd door MBV op 28-04-2007 12:59 . Reden: oeps... ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:57

Creepy

Tactical Espionage Splatterer

Zullen we weer *ontopic*, dus ranzige code gaan posten i.p.v. benchmarks t.b.v. een vraag die in deze vorm niet eens een eigen topic waard is? Creepy in "[alg] Slechtste programmeervoorbeelden d..." is toch wel duidelijk geweest dacht ik zo.

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

  • Daos
  • Registratie: Oktober 2004
  • Niet online
ValHallASW schreef op zaterdag 28 april 2007 @ 01:05:
@hierboven: exit for en exit do zijn niet per definitie smerige statements. In een c++ versie zou je daar continue; en break; voor gebruiken, maar het idee is hetzelfde...
In C++ zou het niet werken omdat voor het beeindigen van alle C++-loops break gebruikt wordt. In een for-loop kan je dus alleen die for-loop beinvloeden en niet de do/while waar die for-loop in staat.

Mooier is het om het met een extra variabele te doen:
Visual Basic:
8
9
10
11
12
    XStable = 1
    FOR I = 1 TO XSize
        IF XOud(I) <> X(I) THEN XStable = 0
    NEXT
LOOP UNTIL XStable

Of
Visual Basic:
8
9
10
11
12
    XUnstable = 0
    FOR I = 1 TO XSize
        IF XOud(I) <> X(I) THEN XUnstable = 1
    NEXT
LOOP WHILE XUnstable


Zoiets werkt ook in C++

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

*zie topicwarning dus*

[ Voor 98% gewijzigd door Creepy op 01-05-2007 09:18 ]


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 01-06 12:41

Robtimus

me Robtimus no like you

Hoezo lomp?

Gewoon naar int casten, dat wordt al 0 als het geen int is. FF checken op de bounds en fertig. Klaar in een paar regels.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Uit de topicwaarschuwing:
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.

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!

  • DoDo
  • Registratie: Juli 2001
  • Laatst online: 19:09
AtleX schreef op maandag 30 april 2007 @ 21:24:
Een topic van vandaag bevat ook wel een mooie:

[...]
Hierbij kun je het toch eigenlijk gewoon casten naar Double?

Acties:
  • 0 Henk 'm!

  • laurxp
  • Registratie: April 2005
  • Laatst online: 30-04 16:37
Ben bezig met een bannerrotator, half uur bezig geweest om uit te zoeken waarom flash niet werkt :P .
PHP:
1
2
3
4
5
6
7
8
9
10
11
if ($banner_ext == "img") {
$url = "<a href=\"" . $banner_link . "\"><img src=\"/banners/" . $banner_type . "_" . $banner_img . "\" " . $formaat . " border=\"0\" /></a>";
} elseif ($banner_ext == "swf"){
$url = "
<embed src=\"" . $banner_type . "_" . $banner_img . "\" " . $formaat . ">
<object width=\"468\" height=\"60\">
<param name=\"movie\" value=\"" . $banner_type . "_" . $banner_img . "\">
</object>
</embed>
";
}

denk niet dat ik ooit nog vergeet de juiste map aan te geven |:( |:(

Acties:
  • 0 Henk 'm!

Anoniem: 14027

ValHallASW schreef op zaterdag 28 april 2007 @ 01:05:
[...]
zie hier een recursieve aanroep voor de zetten van een paard... met een || om er uit te vliegen na de eerste true. Jammer alleen dat dat niet in de c++-standaard staat en dat je dus nare resultaten kan krijgen bij suffe compilers ;)
[...]
Dat 'eruit vliegen' staat trouwens wel in de C++-standaard (par. 5.15). Dat betekent natuurlijk niet dat suffe compilers geen problemen geven, maar dan zijn ze wel heel erg suf ;)

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Klopt, short-circuiting heet dat.
-1- The || operator groups left-to-right. The operands are both implicitly converted to bool (clause conv). It returns true if either of its operands is true, and false otherwise. Unlike |, || guarantees left-to-right evaluation; moreover, the second operand is not evaluated if the first operand evaluates to true.
Een compiler die dát niet ondersteunt zou ik meteen in de prullenbak flikkeren.

[ Voor 9% gewijzigd door .oisyn op 02-05-2007 14: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!

Anoniem: 14829

.oisyn schreef op woensdag 02 mei 2007 @ 14:05:
Een compiler die dát niet ondersteunt zou ik meteen in de prullenbak flikkeren.
Sommige compilers / talen hebben met backward compatibility te maken. en dan krijg je "bend over backwards" oplossingen als AndAlso en OrElse...
Foeilelijk, maar 't does the trick, en maakt de taal er niet minder bruikbaar om. (al zal ik die taal alleen gebruiken wanneer 't echt helemaal vreselijk dwingend moet en C# geen alternatief is... ;))

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Die puntjes erachter doen het hem :P

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!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
.oisyn schreef op woensdag 02 mei 2007 @ 14:05:
Klopt, short-circuiting heet dat.

[...]


Een compiler die dát niet ondersteunt zou ik meteen in de prullenbak flikkeren.
Ik denk dat ValHallASW in de war was met de volgorde van de evaluatie van functie parameters. Voor zover ik me kan herinneren is daar de volgorde niet van gespecificeerd in de specificaties.

Als de volgorde voor de short-circuit niet standaard is zou inderdaad wel erg suf zijn en het voordeel van de || nogal klein maken

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

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22:01
"interessante" Javascript-code:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<header>
  <script type="text/javascript">
function addRow(id)
{
  var div = document.getElementById(id);
  var inputs = div.getElementsByTag('input');
  //gooi hier alle input values in een array
  div.innerHTML = substr(div.innerHTML, 0, -8) + "<tr><td>iets met input</td><td>iets met input</td></tr></html>";
  //zet hier weer de input waardes op de goede waarde
}
  </script>
</header>
<body>
  <div id="selectDiv">
    <table>
      <tr>
       <td>blaat</td>
       <td>meer geblaat</td>
      </tr>
    </table>
  </div>
  <a href="" onClick="addRow('selectDiv');"
</html>

Is dat ranzig of heel erg ranzig? :X Goed, ik dacht dat dus even simpel op te lossen, door het virtuele tbody-element op te zoeken, en daar een child aan toe te voegen ipv de table weggooien en opnieuw erin zetten. Blijkt dat dus ook niet te mogen :( In een table mag je namelijk niet met HTML cellen weggooien en toevoegen ofzo :S Dus toch maar even netjes alle td's aangemaakt met insertRow en insertCell ofzo :)

[ Voor 3% gewijzigd door MBV op 02-05-2007 16:27 ]


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

rwb schreef op woensdag 02 mei 2007 @ 16:14:
[...]

Ik denk dat ValHallASW in de war was met de volgorde van de evaluatie van functie parameters. Voor zover ik me kan herinneren is daar de volgorde niet van gespecificeerd in de specificaties.
Dat klopt idd, maar dat doet er in zijn codevoorbeeld dan weer niet toe :)

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!

Anoniem: 49403

Beetje omslachtige manier om te kijken of een string een nummer is.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public static boolean IsNumeric(String s)
    {
        boolean IsNumeric = true;
        String ValidChars = "0123456789";
        int i = 0;
        for(i = 0; i < s.length() && IsNumeric; i++)
        {
            char Char = s.charAt(i);
            if(ValidChars.indexOf(Char) == -1)
                IsNumeric = false;
        }

        return IsNumeric;
    }

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 01-06 11:43

Spockz

Live and Let Live

Anoniem: 49403 schreef op dinsdag 08 mei 2007 @ 15:40:
Beetje omslachtige manier om te kijken of een string een nummer is.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public static boolean IsNumeric(String s)
    {
        boolean IsNumeric = true;
        String ValidChars = "0123456789";
        int i = 0;
        for(i = 0; i < s.length() && IsNumeric; i++)
        {
            char Char = s.charAt(i);
            if(ValidChars.indexOf(Char) == -1)
                IsNumeric = false;
        }

        return IsNumeric;
    }
Komt dit niet uit zo'n vraagstuk van een test waarin gevraagd wordt om zo'n functie te bouwen zonder ingebouwde functies te gebruiken?

Bovendien kan je nog een break geven na IsNumeric = false. Want nu ga je door met door de string lopen terwijl je al weet dat de string geen getal is.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

Anoniem: 42901

Sowieso zou ik eerder de ascii waarden checken van [0, 9], maar dat werkt dan natuurlijk niet met unicode.
(die ascii range is [30, 39])

Zoiets:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
    public static boolean IsNumeric(String s)
    {
        int i;
        for (i = 0; i < s.length(); i++)
        {
            char current = s.charAt(i);
            if (current < 30 || current > 39)
                return false;
        }

        return true;
    }

(verder werd i 2x geinitialiseerd en hoef je ook geen break te doen en de return waarde niet te bufferen)

[edit] En verder begrijp ik niet waarom mensen inconsistent zijn met het geven van namen aan variabelen(bvb: i heeft een kleine letter, maar IsNumeric begint met een hoofdletter). </OCD?>

[ Voor 94% gewijzigd door Anoniem: 42901 op 08-05-2007 16:18 ]


Acties:
  • 0 Henk 'm!

Anoniem: 26306

Anoniem: 42901 schreef op dinsdag 08 mei 2007 @ 16:09:

... en hoef je ook geen break te doen en de return waarde niet te bufferen
Dat zou een compiler moeten kunnen oplossen lijkt mij. Er is ook wel wat voor te zeggen om slechts één return statement te willen hebben.

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Anoniem: 26306 schreef op dinsdag 08 mei 2007 @ 16:22:
Er is ook wel wat voor te zeggen om slechts één return statement te willen hebben.
Istie weer, laat de discussie ontbarsten :P
Zonder daarmee te zeggen dat ik het (on)eens met je ben ;)

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!

Anoniem: 42901

Anoniem: 26306 schreef op dinsdag 08 mei 2007 @ 16:22:
[...]

Dat zou een compiler moeten kunnen oplossen lijkt mij. Er is ook wel wat voor te zeggen om slechts één return statement te willen hebben.
Ik vind gewoon dat de programmeur geen onnodige variabelen moet aanmaken en ik verwacht ook niet dat de compiler zomaar programflow gaat aanpassen als een programmeer een of andere rare structuur opzet :P

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22:01
Anoniem: 26306 schreef op dinsdag 08 mei 2007 @ 16:22:
[...]

Dat zou een compiler moeten kunnen oplossen lijkt mij. Er is ook wel wat voor te zeggen om slechts één return statement te willen hebben.
break is nergens voor nodig, kijk maar naar de conditie in de for-loop: && IsNumeric. Zodra IsNumeric false is, stopt hij :)

En zet dat "int i" gewoon in de for-loop, scheelt een regel, is sneller en nog wat voordelen :)

[ Voor 11% gewijzigd door MBV op 08-05-2007 16:34 ]


Acties:
  • 0 Henk 'm!

Anoniem: 42901

MBV schreef op dinsdag 08 mei 2007 @ 16:33:
[...]
En zet dat "int i" gewoon in de for-loop, scheelt een regel, is sneller en nog wat voordelen :)
Ik denk niet dat het iets uitmaakt? Was het in Java niet zo dat de i gewoon in dezelfde scope bleef, ongeacht of die in of buiten for() staat? </javanoob>

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 01-06 11:51

Janoz

Moderator Devschuur®

!litemod

But the real WTF is natuurlijk dat deze functie niet om kan gaan met negatieve getallen (en dan neem ik nog aan dat hij alleen bedoeld is voor gehele getallen)

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!

  • uruviel359
  • Registratie: Juni 2004
  • Laatst online: 08-05 16:44
Java:
1
2
3
4
5
6
7
8
9
10
11
boolean isInteger(String s) {
    if(Character.isDigit(s.charAt(0)) || s.charAt(0) == '-') { 
        for(int i = 1; i < s.length(); i++) {
            if(!Character.isDigit(s.charAt(i))) {
                return false;
            }
        }
        return true;
    }
    return false;
}

Controleert ook op negatieve getallen :p

[ Voor 29% gewijzigd door uruviel359 op 08-05-2007 16:55 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 01-06 11:51

Janoz

Moderator Devschuur®

!litemod

Anoniem: 42901 schreef op dinsdag 08 mei 2007 @ 16:09:
Sowieso zou ik eerder de ascii waarden checken van [0, 9], maar dat werkt dan natuurlijk niet met unicode.
(die ascii range is [30, 39])

Zoiets:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
    public static boolean IsNumeric(String s)
    {
        int i;
        for (i = 0; i < s.length(); i++)
        {
            char current = s.charAt(i);
            if (current < 30 || current > 39)
                return false;
        }

        return true;
    }

(verder werd i 2x geinitialiseerd en hoef je ook geen break te doen en de return waarde niet te bufferen)

[edit] En verder begrijp ik niet waarom mensen inconsistent zijn met het geven van namen aan variabelen(bvb: i heeft een kleine letter, maar IsNumeric begint met een hoofdletter). </OCD?>
Heerlijk, van die numerieke niks zeggende constanten. Neem dan gewoon '0' en '9'. Naast dat dat een stuk duidelijker leest hoef je ook niet telkens een ascii tabel op te zoeken om te zien of je waardes nog wel kloppen. De compiler maakt er uiteindelijk toch wel hetzelfde van.

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!

Anoniem: 42901

Janoz schreef op dinsdag 08 mei 2007 @ 16:40:
[...]

Heerlijk, van die numerieke niks zeggende constanten. Neem dan gewoon '0' en '9'. Naast dat dat een stuk duidelijker leest hoef je ook niet telkens een ascii tabel op te zoeken om te zien of je waardes nog wel kloppen. De compiler maakt er uiteindelijk toch wel hetzelfde van.
Ik wist niet of dat zomaar kan in Java zonder compiler warnings ivm typeconversie(ik heb ooit wel eens een paar jaar geleden een paar tientallen lijnen java geschreven, that's it), vandaar dat ik letterlijk implementeerde wat ik bedoelde.
Nice one @ negatieve waarden!

[ Voor 10% gewijzigd door Anoniem: 42901 op 08-05-2007 16:46 ]


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Janoz schreef op dinsdag 08 mei 2007 @ 16:38:
But the real WTF is natuurlijk dat deze functie niet om kan gaan met negatieve getallen (en dan neem ik nog aan dat hij alleen bedoeld is voor gehele getallen)
+1, 3.5 en .5 ook niet...
Betere naam zou zijn IsInteger.

[ Voor 5% gewijzigd door Icelus op 08-05-2007 16:51 ]

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

Anoniem: 42901

Icelus schreef op dinsdag 08 mei 2007 @ 16:50:
[...]
+1, 3.5 en .5 ook niet...
Betere naam zou zijn IsInteger.
IsUnsignedInteger
IsUnsignedInteger_Unoptimized

[ Voor 9% gewijzigd door Anoniem: 42901 op 08-05-2007 16:55 ]


Acties:
  • 0 Henk 'm!

  • uruviel359
  • Registratie: Juni 2004
  • Laatst online: 08-05 16:44
Anoniem: 42901 schreef op dinsdag 08 mei 2007 @ 16:55:
[...]

IsUnsignedInteger
IsUnsignedInteger_Unoptimized
Hoe zou je hem Optimized schrijven dan?

Acties:
  • 0 Henk 'm!

Anoniem: 42901

uruviel359 schreef op dinsdag 08 mei 2007 @ 16:58:
[...]

Hoe zou je hem Optimized schrijven dan?
Door onder andere niet die return waarde te bufferen en niet met de String "0123456789" te werken.
[edit] Maar ik had het over het oorspronkelijke voorbeeld, niet over dat van jou :)

[ Voor 14% gewijzigd door Anoniem: 42901 op 08-05-2007 17:01 ]


Acties:
  • 0 Henk 'm!

  • brama
  • Registratie: Februari 2001
  • Niet online
uruviel359 schreef op dinsdag 08 mei 2007 @ 16:39:
Java:
1
2
3
4
5
6
7
8
9
10
11
boolean isInteger(String s) {
    if(Character.isDigit(s.charAt(0)) || s.charAt(0) == '-') { 
        for(int i = 1; i < s.length(); i++) {
            if(!Character.isDigit(s.charAt(i))) {
                return false;
            }
        }
        return true;
    }
    return false;
}

Controleert ook op negatieve getallen :p
Ik zou nog ergens een s.length() > 0 check doen vantevoren, anders klapt je charAt(0) er al uit ;)

I mentioned it once, but I think I got away with it.


Acties:
  • 0 Henk 'm!

  • uruviel359
  • Registratie: Juni 2004
  • Laatst online: 08-05 16:44
Anoniem: 42901 schreef op dinsdag 08 mei 2007 @ 17:00:
[...]


Door onder andere niet die return waarde te bufferen en niet met de String "0123456789" te werken.
[edit] Maar ik had het over het oorspronkelijke voorbeeld, niet over dat van jou :)
Ah je had het over het origneel, niet over de versie die hier voorgesteld werd. My bad :p
brama schreef op dinsdag 08 mei 2007 @ 17:01:
[...]


Ik zou nog ergens een s.length() > 0 check doen vantevoren, anders klapt je charAt(0) er al uit ;)
Scherp! de vraag is dan of een lege string wel of geen nummer is ;)

[ Voor 26% gewijzigd door uruviel359 op 08-05-2007 17:04 ]


Acties:
  • 0 Henk 'm!

  • brama
  • Registratie: Februari 2001
  • Niet online
uruviel359 schreef op dinsdag 08 mei 2007 @ 17:01:
[...]

Scherp! de vraag is dan of een lege string wel of geen nummer is ;)
True, en of je functie dicteert dat je geen null-values mee mag geven (anders gaat zelfs s.length() al mis). Zelf check ik meestal niet op null-ness, maar dwing ik dat af in de functie-documentatie. Daar kun je dan ook inzetten wat je doet met lege strings.

I mentioned it once, but I think I got away with it.


Acties:
  • 0 Henk 'm!

  • writser
  • Registratie: Mei 2000
  • Laatst online: 26-05 20:06
En de wetenschappelijke notatie?

Onvoorstelbaar!


Acties:
  • 0 Henk 'm!

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 14:54
En '-' is nu opeens ook een nummer geworden?

Plus, je checkt niet op de limieten van Integer, dus of het een Integer is, is nog niks over te zeggen. Het kan ook Long of BigInteger of een enorme reeks getallen zijn :+

[ Voor 66% gewijzigd door DaCoTa op 08-05-2007 18:02 ]


Acties:
  • 0 Henk 'm!

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 09-02 20:11

Not Pingu

Dumbass ex machina

DaCoTa schreef op dinsdag 08 mei 2007 @ 18:00:
En '-' is nu opeens ook een nummer geworden?
Is onderdeel van numerieke notatie, net zoals , en . als decimaalteken danwel scheiding van duizendtallen. Als je echt een fullproof StrToInt functie wilt hebben zul je dat ook moeten afvangen en zal je functie culture-aware moeten zijn.

Om nog maar te zwijgen over wetenschappelijke notatie en notatie van complexe getallen.

[ Voor 4% gewijzigd door Not Pingu op 08-05-2007 18:14 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Not Pingu schreef op dinsdag 08 mei 2007 @ 18:14:
Om nog maar te zwijgen over wetenschappelijke notatie en notatie van complexe getallen.
Als je complexe getallen toestaat kun je elk wiskundig concept wel gaan supporten, met alle verschillende non-standaard schrijfwijzen. Lijkt me dus een beetje overbodig :)

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!

  • writser
  • Registratie: Mei 2000
  • Laatst online: 26-05 20:06
Nou, wie maakt de FSM?

Onvoorstelbaar!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 01-06 11:51

Janoz

Moderator Devschuur®

!litemod

Anoniem: 42901 schreef op dinsdag 08 mei 2007 @ 16:44:
[...]

Ik wist niet of dat zomaar kan in Java zonder compiler warnings ivm typeconversie(ik heb ooit wel eens een paar jaar geleden een paar tientallen lijnen java geschreven, that's it), vandaar dat ik letterlijk implementeerde wat ik bedoelde.
Nice one @ negatieve waarden!
Ook al zou dat niet kunnen met de compiler, dan nog kun je beter iets doen als Char.ord('0'); (functienaam maar bedacht, geen idee hoe de echte functie zal heten, maar er zal vast wel iets dergelijks bestaan)

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!

  • Niek.NET
  • Registratie: Oktober 2005
  • Laatst online: 30-05 13:16
in C# doe je gewoon:

C#:
1
2
3
4
5
6
7
string input = "1"
int i;

if ( int.TryParse( input, out i))
  //input string is valid integer
else
  //input string is not an integer


Jullie gaan me toch niet vertellen dat er niet zo'n functie in Java zit?

edit:

om het even in een method te zetten

C#:
1
2
3
4
5
public static bool IsInt32(string input)
{
  int i;
  return int.TryParse(input, out i);
}

[ Voor 24% gewijzigd door Niek.NET op 08-05-2007 19:05 ]


Acties:
  • 0 Henk 'm!

  • uruviel359
  • Registratie: Juni 2004
  • Laatst online: 08-05 16:44
Dan maar zo :+
Java:
1
2
3
4
5
6
7
boolean isInteger(String s) {
    try{
        Integer.valueOf(s).intValue();
    } catch(NumberFormatException e) {
        return false;
    } return true;
}

[ Voor 48% gewijzigd door uruviel359 op 08-05-2007 19:04 ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Arg, waarom ook makkelijk doen als het moeilijk kan:
PHP:
1
2
3
4
$array = array('foo','bar');
$count = count($array);
foreach($array as $value)
   $string .= $value.($value==$array[$count-1])?",":null;
Als er gewoon een implode bestaat 8)7

Dit soort loopjes heb ik _te_ vaak gemaakt in mn systeem die ik er nu elke keer als ik ze zie uit moet slopen |:(

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

mithras schreef op dinsdag 08 mei 2007 @ 19:13:
Arg, waarom ook makkelijk doen als het moeilijk kan:
PHP:
1
2
3
4
$array = array('foo','bar');
$count = count($array);
foreach($array as $value)
   $string .= $value.($value==$array[$count-1])?",":null;
Als er gewoon een implode bestaat 8)7

Dit soort loopjes heb ik _te_ vaak gemaakt in mn systeem die ik er nu elke keer als ik ze zie uit moet slopen |:(
Die code doet niet hetzelfde als implode hoor :)
Als $value hetzelde is als de laatste value uit je array dan wordt er geen komma toegevoegd na de value zelf maar null, terwijl implode tussen elke value een komma zet (als je natuurlijk een komma opgeeft).

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Erkens schreef op dinsdag 08 mei 2007 @ 19:16:
[...]

Die code doet niet hetzelfde als implode hoor :)
Als $value hetzelde is als de laatste value uit je array dan wordt er geen komma toegevoegd na de value zelf maar null, terwijl implode tussen elke value een komma zet (als je natuurlijk een komma opgeeft).
Ja, ik bedoelde eigenlijk het volgende:
PHP:
1
2
3
4
5
6
7
8
$stack = array('foo','bar');
$count = count($stack);
foreach($stack as $value){
   $string_foreach .= $value;
   $string_foreach .=($value!=$stack[$count-1])?",":null;
}
$string_implode = implode(",",$stack);
echo $string_foreach."\n".$string_implode;
Waarbij ze beide wel hetzelfde printen. Ik wilde hier @ GoT de schrijfwijze in de foreach nog korter maken, alleen zonder succes :p

Op deze manier was de implode wél korter geweest :)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

mithras schreef op dinsdag 08 mei 2007 @ 19:55:
[...]
Ja, ik bedoelde eigenlijk het volgende:
PHP:
1
2
3
4
5
6
7
8
$stack = array('foo','bar');
$count = count($stack);
foreach($stack as $value){
   $string_foreach .= $value;
   $string_foreach .=($value!=$stack[$count-1])?",":null;
}
$string_implode = implode(",",$stack);
echo $string_foreach."\n".$string_implode;
Waarbij ze beide wel hetzelfde printen. Ik wilde hier @ GoT de schrijfwijze in de foreach nog korter maken, alleen zonder succes :p

Op deze manier was de implode wél korter geweest :)
Dat bedoelde ik niet, wat ik bedoelde is dat je met
PHP:
1
$value!=$stack[$count-1]

niet altijd het laatste item krijgt:

PHP:
1
2
3
4
5
6
7
$stack = array("aap", "koe", "varken", "koe");
$count = count($stack);
foreach($stack as $value){
  if ($value==$stack[$count-1]){
    echo "laatste item gevonden!\n";
  }
}

Dit print 2x de string "laatste item gevonden" ;)

Beter is het om in dit soort gevallen met een normale for-lus te werken:
PHP:
1
2
3
4
5
6
$stack = array("aap", "koe", "varken", "koe");
for($i=0;$i<count($stack);$i++){
  if ($i==count($stack)){
    echo "laatste item gevonden!\n";
  }
}


Maargoed, het ging er meer om dat je "implode" niet kende/vergeten was, maar ik wil alleen maar aantonen dat je als je dat niet had gevonden je een mogelijke bug hier had in je applicatie :)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:44

MueR

Admin Tweakers Discord

is niet lief

Ik kwam deze functie tegen in een website die ooit eens door ons bedrijf is gemaakt. Is een jaar ofzo terug geschreven. Over efficiente code..
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
// **** Client Section****
// (g16)    quickly find client based on many criteria
function find_client($order_field,$cli_id,$cli_affiliate_id,$cli_platform_id,$cli_first_name,$cli_last_name,
$cli_address,$cli_city,$cli_country,$cli_zipcode,$cli_phone,$cli_mobile,$cli_birthdate,$cli_email,
$cli_gender,$cli_nationality,$cli_language_id,$cli_newsletter,$cli_login_name,$cli_password,$cli_nickname,
$cli_status,$cli_datetime,$cli_lastlogin,$cli_validation_code,$cli_validated_by_email,$cli_online,
$cli_online_checked,$cli_balance,$cli_bonus,$cli_ip_subscribe,$cli_ip_lasttime){
    // define variables
    if ($order_field == "") $order_field = "cli_last_name,cli_first_name";
    // build the select query
    $sql ="SELECT * FROM tbl_client ";
    $sql.="LEFT JOIN tbl_affiliates ON cli_affiliate_id=aff_id ";
    $sql.="LEFT JOIN tbl_platform ON cli_platform_id=pla_id ";
    $sql.="LEFT JOIN tbl_country ON cli_country=cty_id ";
    $sql.="LEFT JOIN tbl_language ON cli_language_id=lan_reference ";
    $sql.="WHERE cli_id > '0' ";
//   $sql.=" AND cli_status = '1' AND cli_validated_by_email = '1' ";
    if ($cli_id!="")                $sql .=" AND cli_id = '$cli_id'";
    if ($cli_affiliate_id!="")      $sql .=" AND cli_affiliate_id = '$cli_affiliate_id'";
    if ($cli_platform_id!="")       $sql .=" AND cli_platform_id like '$cli_platform_id%'";
    if ($cli_first_name!="")        $sql .=" AND cli_first_name like '$cli_first_name%'";
    if ($cli_last_name!="")         $sql .=" AND cli_last_name like '$cli_last_name%'";
    if ($cli_address!="")           $sql .=" AND cli_address like '$cli_address%'";
    if ($cli_city!="")              $sql .=" AND cli_city like '$cli_city%'";
    if ($cli_country!="")           $sql .=" AND cli_country = '$cli_country'";
    if ($cli_zipcode!="")           $sql .=" AND cli_zipcode = '$cli_zipcode'";
    if ($cli_phone!="")             $sql .=" AND cli_phone = '$cli_phone'";
    if ($cli_mobile!="")            $sql .=" AND cli_mobile = '$cli_mobile'";
    if ($cli_birthdate!="")         $sql .=" AND cli_birthdate = '$cli_birthdate'";
    if ($cli_email!="")             $sql .=" AND cli_email = '$cli_email'";
    if ($cli_gender!="")            $sql .=" AND cli_gender = '$cli_gender'";
    if ($cli_nationality!="")       $sql .=" AND cli_nationality like '$cli_nationality%'";
    if ($cli_language_id!="")       $sql .=" AND cli_language_id = '$cli_language_id'";
    if ($cli_newsletter!="")        $sql .=" AND cli_newsletter = '$cli_newsletter'";
    if ($cli_login_name!="")        $sql .=" AND cli_login_name = '$cli_login_name'";
    if ($cli_password!="")          $sql .=" AND cli_password = '$cli_password'";
    if ($cli_nickname!="")          $sql .=" AND cli_nickname = '$cli_nickname'";
    if ($cli_status != 'a') {
        if ($cli_status != '')      $sql.=" AND cli_status='".$cli_status."'";
        if ($cli_status == '')      $sql.=" AND cli_status > 0";
    }
    if ($cli_datetime!="")          $sql .=" AND cli_datetime = '$cli_datetime'";
    if ($cli_lastlogin!="")         $sql .=" AND cli_lastlogin = '$cli_lastlogin'";
    if ($cli_validation_code!="")   $sql .=" AND cli_validation_code = '$cli_validation_code'";
    if ($cli_validated_by_email!="")$sql .=" AND cli_validated_by_email = '$cli_validated_by_email'";
    if ($cli_online!="")            $sql .=" AND cli_online = '$cli_online'";
    if ($cli_online_checked!="")    $sql .=" AND cli_online_checked = '$cli_online_checked'";
    if ($cli_balance!="")           $sql .=" AND cli_balance = '$cli_balance'";
    if ($cli_bonus!="")             $sql .=" AND cli_bonus = '$cli_bonus'";
    if ($cli_ip_subscribe!="")      $sql .=" AND cli_ip_subscribe = '$cli_ip_subscribe'";
    if ($cli_ip_lasttime!="")       $sql .=" AND cli_ip_lasttime = '$cli_ip_lasttime'";
    $sql .=" ORDER BY ".$order_field;
    // do the select query
    $result_query=mysqlx_query($sql);
    return $result_query;
}

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:37
/edit nm

[ Voor 73% gewijzigd door HawVer op 09-05-2007 12:32 ]

http://hawvie.deviantart.com/


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 01-06 11:43

Spockz

Live and Let Live

MueR schreef op woensdag 09 mei 2007 @ 11:43:
Ik kwam deze functie tegen in een website die ooit eens door ons bedrijf is gemaakt. Is een jaar ofzo terug geschreven. Over efficiente code..
PHP:
1
2
// **** Client Section****
//... lap code
Is zoiets niet beter? Heb je meteen ook niet meer het probleem dat je je functie aan moet passen als er een databaseveld bijkomt. Bovendien is het een stuk overzichtelijker.

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
<?php
// **** Client Section****
// (g16)     quickly find client based on many criteria
function find_client($values){
    // define variables
    if ($order_field == "") $order_field = "cli_last_name,cli_first_name";
    // build the select query
    $sql ="SELECT * FROM tbl_client ";
    $sql.="LEFT JOIN tbl_affiliates ON cli_affiliate_id=aff_id ";
    $sql.="LEFT JOIN tbl_platform ON cli_platform_id=pla_id ";
    $sql.="LEFT JOIN tbl_country ON cli_country=cty_id ";
    $sql.="LEFT JOIN tbl_language ON cli_language_id=lan_reference ";
    $sql.="WHERE cli_id > '0' ";
//   $sql.=" AND cli_status = '1' AND cli_validated_by_email = '1' ";

    foreach ($aVars as $key => $value) {
      if (!empty($value) {
        if (is_numeric($value) {
          $sql .= 'AND '.$key.' = '.$value.' ';
        }
        else {
          $sql .= 'AND '.$key.' = "'.$value.'" ';
        }
      }
    }

    $sql .=" ORDER BY ".$order_field;
    // do the select query
    $result_query=mysqlx_query($sql);
    return $result_query;
} 
?>

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:44

MueR

Admin Tweakers Discord

is niet lief

Spockz schreef op woensdag 09 mei 2007 @ 13:03:
Is zoiets niet beter? Heb je meteen ook niet meer het probleem dat je je functie aan moet passen als er een databaseveld bijkomt. Bovendien is het een stuk overzichtelijker.
PHP:
1
// lapje code
Nah, kheb heel de functie gewoon er uit gemikt. Mocht er noodzaak zijn om iets te weten over een client, kan je ook op dat moment een SQL query maken. Een query met 'SELECT *' en 4 joins is nou niet echt goed voor de performance. Vooral niet wanneer de functie gebruikt wordt om alleen het email adres van de client te achterhalen.
Deze code is geschreven door een stel amateurs, wat voor elke basic sql statement een functie ging maken, ook al was de functie nergens anders meer nodig.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Laatst online: 19-05 18:36

mace

Sapere Aude

Laatst een geinig stukkie AWK gezien van een student die een semester onder mij zit, ik coach namelijk.

De opdracht was om uit een email logfile een aantal gegevens te halen met AWK, awk is een scripttaal waarmee je met een paar simpele commando's en reguliere expressies etc. dingen kan filteren.

De logfile bestond uit message lines en uit delivery lines, die beginnen met d of m.
Het eerste veld van elk record is dus een d of een m.

De opdracht was om het aantal afgeleverde en verstuurde berichten te tellen.

één leerling had het niet helemaal goed begrepen
code:
1
2
3
( $1 ~ /^m$/ ) || ($1 ~ /^d$/ )  {teller++}

END { print "aantal afgeleverde en ontvangen berichten: " teller}


Voor de mensen die AWK niet kennen leg ik het hier uit:
pseudo code:
code:
1
2
ALS veld1 == m OF ALS veld1 == d DOE teller++
EINDE: PRINT teller


Je moet begrijpen dat de records ALTIJD met m of d beginnen, dus hij had basically IF $var = true OR $var = false gedaan :P

Het kwam er op neer dat hij wc -l opnieuw had uitgevonden :+

Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 16:01
Ej, zijn code ontwikkelt tenminste geen random features als het logbestand ooit wordt uitgebreid :P

Ik weet niet wat de correctiestandaard is, maar ik zou er maar erg weinig punten voor aftrekken: alle punten zijn behandeld: checken op het type regel, optellen en afdrukken.

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Laatst online: 19-05 18:36

mace

Sapere Aude

Paul Nieuwkamp schreef op donderdag 10 mei 2007 @ 22:57:
Ej, zijn code ontwikkelt tenminste geen random features als het logbestand ooit wordt uitgebreid :P

Ik weet niet wat de correctiestandaard is, maar ik zou er maar erg weinig punten voor aftrekken: alle punten zijn behandeld: checken op het type regel, optellen en afdrukken.
mja, de bedoeling was om het apart te tellen, dus:

$1 ~ /^m$/ {message++}
$1 ~ /^d$/ {delivery++}

Zinsbouw was een beetje krom in de opdracht, maar goed...
qua correctie, het was een practicum, het idee was dat ze aan het eind van de dag de opdrachten af hadden, en tijdens het maken waren wij ter ondersteuning/aftekening als het klaar was naar onze standaarden. Dus niet met correctiestandaard of punten, gewoon voldoende of onvoldoende.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 18:50

NMe

Quia Ego Sic Dico.

Modbreak:Ik heb het hele exceptionsverhaal (eindelijk :P) afgesplitst naar [Alg] Exceptions: zin en onzin.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:44

MueR

Admin Tweakers Discord

is niet lief

Erkens schreef op dinsdag 08 mei 2007 @ 23:05:
Beter is het om in dit soort gevallen met een normale for-lus te werken:
PHP:
1
2
3
4
5
6
$stack = array("aap", "koe", "varken", "koe");
foreach($i=0;$i<count($stack);$i++){
  if ($i==count($stack)){
    echo "laatste item gevonden!\n";
  }
}
Welke for loop ? :+
/flauw

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

MueR schreef op vrijdag 11 mei 2007 @ 12:41:
[...]

Welke for loop ? :+
/flauw
O-)

Acties:
  • 0 Henk 'm!

Anoniem: 26306

Jammer dat het laatste item nooit wordt gevonden ;)

Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

Eentje uit eigen huize:
Een database klasse op het Singleton pattern.
PHP:
1
2
3
4
5
6
7
8
class Database {
    //methods en properties

    private function getColumns() {
        $columns = Database::getInstance()->execQuery('SHOW COLUMNS FROM tabelnaam FROM database');
        // rest van de method
    }
}

Aparte manier om methods uit de zelfde klasse aan te roepen. :P

Acties:
  • 0 Henk 'm!

Anoniem: 49627

Overigens vind ik de 'class Database' ook wel een klasieker. 50% van de beginnende ontwikkelaars, waaronder yours truly, heeft wel eens een dergelijke class gemaakt. De naamgeving dekt compleet niet de lading van de class. Het is niet dat je er weer een Table class uit kan halen ofzo.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Anoniem: 26306 schreef op vrijdag 11 mei 2007 @ 13:15:
Jammer dat het laatste item nooit wordt gevonden ;)
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten.
...

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Anoniem: 49627 schreef op zondag 13 mei 2007 @ 13:58:
Overigens vind ik de 'class Database' ook wel een klasieker. 50% van de beginnende ontwikkelaars, waaronder yours truly, heeft wel eens een dergelijke class gemaakt. De naamgeving dekt compleet niet de lading van de class. Het is niet dat je er weer een Table class uit kan halen ofzo.
Dit volg ik even niet en Google geeft ook nul relevante hits op java, class, database. Praat je over een factory?

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee het gaat over een class die "Database" heet ;)

PHP:
1
2
3
4
class Database
{
    function getPosts($topicid) { /* ... */ }
}

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!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:42

mulder

ik spuug op het trottoir

Ik snap het 'probleem' ook niet zo, waarom zou een class niet Database kunnen heten en waarom zou die class geen Table kunnen retourneren?

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Don Facundo schreef op zondag 13 mei 2007 @ 16:38:
Ik snap het 'probleem' ook niet zo,
Blijkbaar :)
waarom zou een class niet Database kunnen heten
Het gaat er niet om of een class Database heet, het gaat om het design van een dergelijke "n00b"class. Een class die een grote verzamelbak is van functies die voor de persistentie zorgt voor allerhande objecten.
en waarom zou die class geen Table kunnen retourneren?
Euh, Mark zegt juist dat "Database" de naam niet dekt omdat hij geen Table returnt oid. Persoonlijk vind ik dit dan weer een non-argument, want een database is gewoon een verzameling gegevens, en niet per se een traditionele relationele database met tables en SQL queries e.d.

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!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:42

mulder

ik spuug op het trottoir

.oisyn schreef op zondag 13 mei 2007 @ 17:03:
[...]

Blijkbaar :)

[...]

Het gaat er niet om of een class Database heet, het gaat om het design van een dergelijke "n00b"class. Een class die een grote verzamelbak is van functies die voor de persistentie zorgt voor allerhande objecten.

[...]

Euh, Mark zegt juist dat "Database" de naam niet dekt omdat hij geen Table returnt oid. Persoonlijk vind ik dit dan weer een non-argument, want een database is gewoon een verzameling gegevens, en niet per se een traditionele relationele database met tables en SQL queries e.d.
Er worden dus een heleboel aannames over deze class gedaan terwijl er maar 1 functie getoond worden in het voorbeeld, dat is mijn punt een beetje.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

Anoniem: 201130

Don Facundo schreef op zondag 13 mei 2007 @ 17:59:
[...]
Er worden dus een heleboel aannames over deze class gedaan terwijl er maar 1 functie getoond worden in het voorbeeld, dat is mijn punt een beetje.
Nee, de aanname hier is, is dat Database een klasse is die hergebruikt wordt en dat daar een applicatie specifieke functie in zit. Daarnaast weet deze Database klasse iets van Business Logica is, wat ook niet geheel gebruikelijk is (In PHP wel iets gebruikelijker, omdat men daar vaak niet OO werkt, maar procedureel).

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

.oisyn schreef op zondag 13 mei 2007 @ 16:15:
Nee het gaat over een class die "Database" heet ;)
Ah ja, op deze fiets. Dank :)

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:42

mulder

ik spuug op het trottoir

Anoniem: 201130 schreef op zondag 13 mei 2007 @ 20:57:
[...]


Nee, de aanname hier is, is dat Database een klasse is die hergebruikt wordt en dat daar een applicatie specifieke functie in zit. Daarnaast weet deze Database klasse iets van Business Logica is, wat ook niet geheel gebruikelijk is (In PHP wel iets gebruikelijker, omdat men daar vaak niet OO werkt, maar procedureel).
Ok zo, ik keek sowieso naar het voorbeeldje van super-muffin, die oogt wat generieker. Ik zag het ook meer als een DataHelper.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

Anoniem: 201130

Don Facundo schreef op zondag 13 mei 2007 @ 21:49:
[...]
Ok zo, ik keek sowieso naar het voorbeeldje van super-muffin, die oogt wat generieker. Ik zag het ook meer als een DataHelper.
Zijn voorbeeld heeft meer betrekking volgens mij op het gebruik van een singleton instance in een instance (Zo ver ik de aanroep goed begrijp, mijn PHP OO implementatie is niet zo erg groot ;))

Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

Anoniem: 201130 schreef op zondag 13 mei 2007 @ 20:57:
[...]


Nee, de aanname hier is, is dat Database een klasse is die hergebruikt wordt en dat daar een applicatie specifieke functie in zit. Daarnaast weet deze Database klasse iets van Business Logica is, wat ook niet geheel gebruikelijk is (In PHP wel iets gebruikelijker, omdat men daar vaak niet OO werkt, maar procedureel).
Nee deze klasse weet niks van de Business Logica, maar zo komt het wel naar voren. Ik had mijn stukje code gewoon getypt uit mijn hoofd. In de echte klasse word de tabel naam middels een argument en de database naam staat in een var.

En in mijn database klasse zit ook geen 'getPost($id)' method ;)

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22:01
Niet meer van toepassing, daarnaast kun je dergelijke opmerkingen beter via een topic report doen.

[ Voor 71% gewijzigd door Janoz op 16-05-2007 12:00 ]


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Niet meer van toepassing

[ Voor 104% gewijzigd door Janoz op 16-05-2007 11:59 ]

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!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 01-06 11:51

Janoz

Moderator Devschuur®

!litemod

Ik heb de static discussie afgesplitst naar [alg] Nut van overerving in static classes .

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!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Lol, ik krijg zojuist een mailtje van een oud projectlid over een bug van mij.
Java:
1
2
3
4
5
6
7
8
    private static final List<String> LIST = new ArrayList<String>();
    {
        LIST.add("bla 1");
        LIST.add("bla 2");
        LIST.add("bla 3");
        LIST.add("bla 4");
        LIST.add("bla 5");
    }


Zoek de fout. Het gevolg zal ik alvast verklappen, de server crashte na een tijdje... :-)

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 01-06 11:51

Janoz

Moderator Devschuur®

!litemod

Waneer hij crashed is een beetje afhankelijk van het beschikbare geheugen en hoevaak een instantie van die class werd geinstantieerd ;)

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!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Janoz schreef op woensdag 16 mei 2007 @ 13:01:
Waneer hij crashed is een beetje afhankelijk van het beschikbare geheugen en hoevaak een instantie van die class werd geinstantieerd ;)
Hehe, ik lees tussen de regels door dat je hem doorhebt. :)

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Auw. Even in een static blok gooien dus :+

Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 31-05 07:51
Ik snap de fout in die code niet. Kan iemand 'm uitleggen?

Verbouwing


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Java:
1
2
3
4
5
6
7
8
9
10
11
class MyClass
{
    {
        // hier komt constructor code die voor iedere instantie wordt aangeroepen
    }

    static
    {
        // hier komt code die eenmaal wordt aangeroepen als de class wordt geladen
    }
}

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!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 01-06 11:51

Janoz

Moderator Devschuur®

!litemod

Mwah, ik wilde de fun nog niet spoilen, maar gelukkig bestaat daarvoor de spoilertag:
spoiler:
De variabele is wel static, maar de vulling is dat niet. Dus in plaats van het eenmalig vullen van deze lijst wordt de 'vul-code' aangeroepen elke keer dat er een nieuwe instantie van deze class wordt gemaakt. Uiteindelijk Zit dit korte lijsje er dus vele malen in, net zo lang tot het geheugen vol loopt

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!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Apart trouwens dat de compiler accepteert dat een static final property bij elke instantatie aangepast mag worden.
Pagina: 1 ... 8 ... 11 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. :)

Het is hier ook niet het "korte vraagjes" topic. Zie deze post