[DISC] Wat is jouw codeer stijl?

Pagina: 1 2 Laatste
Acties:
  • 1.368 views sinds 30-01-2008
  • Reageer

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Bergen schreef op 26 oktober 2004 @ 03:48:
Wat is jullie mening over de grootte van functies? De standaard ANSI-grootte (?) van een terminal is 80x24 karakters en ik gebruik altijd anderhalf keer de grootte daarvan; 120x36 karakters. Als een regel breder dan 120 karakters wordt breek ik hem op in kleinere stukjes en als hij langer wordt dan 36 regels (exclusief het blokje commentaar boven de functie) vind ik per definitie dat de functie moet worden opgesplitst, tenzij 't gaat om een lap HTML of bijvoorbeeld assemblercode. Normaal gesproken komt dat de leesbaarheid alleen maar ten goede.
Ik zorg er over het algemeen voor dat de code in een notepad venstertje past op 1024, als het daar niet te breed voor is vind ik het wel best eigenlijk.
Mijn ervaring is dat de meeste mensen die mijn code lezen die resolutie of hoger draaien dus is het wel goed op die manier :)

Over functies, ik gebruik altijd heel wat functies aangezien ik nogal lui ben en dus veel wil hergebruiken :P
Maar het is ook wel om het overzichtelijk te houden ja, bij mij zijn functies ook zelden meer dan 40/50 regels.

Blog [Stackoverflow] [LinkedIn]


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Methoden schrijf ik het liefst zo kort doch volledig mogelijk, omdat ik complexiteit zoveel mogelijk tegen probeer te gaan en hanteer daarbij dan ook het 'code by contract' principe, waarbij ik netjes verantwoordelijkheden verspreid c.q. afdwing en veranderingen mbt de staat bij bepaalde methode calls in de vorm van pre- en postcondities noteer. Logics om te controleren of er wel voldaan wordt aan de precondities, schuif ik naar de client toe, de server voert slechts uit.
Net als Wolfboy ben ook ik erg lui en maak het liefst zoveel mogelijk gebruik van reedsgeschreven code; dit is alleen mogelijk als men niet te specifiek methoden gaat specificeren en implementeren (zekere vorm van abstractie moet dus gewaarborgd blijven).

Een voorbeeld bv is een eenvoudig spelletje boter kaas en eieren waarbij het speelbord bv rekening moet houden of iemand een diagonaal dan wel een verticaal/horizontaal lijn heeft bewerkstelligd. Bij de diagonaal zou ik dan bv methoden maken om bv te kijken of er rechtsboven van het huidig vakje een teken is die gelijk is aan de teken op de huidige positie, en dit ook doen voor alle overige 3 richtingen (rechtsonder, linksonder,linksboven). Vervolgens zou ik dan een methode schrijven genaamd heeftDiagonaal() oid, dat icm met de vier bovenstaande methoden bepaald of er een diagonaal bestaat.
Wie weet wil je bv later een nieuwe spelregel invoeren waarbij slechts diagonalen van linksboven naar rechtsonder gelden, ook hier kun je dan weer gebruik maken van simpele methoden die je al hebt gedefinieerd.

[ Voor 51% gewijzigd door prototype op 26-10-2004 04:31 ]


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb nog een vraag over het zo weinig mogelijk gebruik maken van globals. Neem een situatie waarin ik een sting explode in een array. Normaal zou ik die array als global aanroepen in elke functie die ik verder in de applicatie gebruik:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$string = 'wat/een/heerlijke/kaas';
$arr    =  explode('/', $string);

//...en in alle verdere functies:

functie doe_iets()
{
  global $arr;

  if ($arr[3] == 'kaas') echo 'lekker!';
}

Analoog aan het idee om weinig globals te gebruiken zou ik ook het volgende kunnen doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$string = 'wat/een/heerlijke/kaas';

function arr($index)
{
  global $string;
  $arr =  explode('/', $string);
  return $arr[$index];
}

//...en in alle verdere functies:

function doe_iets()
{
  if (arr(3) == 'kaas') echo 'lekker!';
}

Ik vermijd dan het verdere gebruik van global $arr, maar roep wel elke keer de routine "split string, stop in array, geef mij 1 item terug" uit. In het eerste geval vul ik eenmalig de $arr variabele, en lees hem daarna alleen maar uit. Kost mij de tweede oplossing dan niet onnodig veel performance?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

Qua performance is 't in theorie inderdaad trager, maar in de praktijk zul je daar weinig van merken. Op zich is er niets tegen op globals. Alleen als je object georienteerd gaat werken zijn ze lelijk. Als je ze dan in een klasse stopt is er weer niets mis met je eerste voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Test
{
    private $arr;
    
    public function __construct()
    {
        $string = 'wat/een/heerlijke/kaas';
        $this->arr = explode('/', $string);
    }
    
    public function doe_iets()
    {
        if ($this->arr[3] == 'kaas') {
            echo 'lekker!';
        }
    }
}

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Reveller schreef op 26 oktober 2004 @ 19:05:
Ik vermijd dan het verdere gebruik van global $arr, maar roep wel elke keer de routine "split string, stop in array, geef mij 1 item terug" uit. In het eerste geval vul ik eenmalig de $arr variabele, en lees hem daarna alleen maar uit. Kost mij de tweede oplossing dan niet onnodig veel performance?
Op deze manier verschuif je het 'probleem' met globals eigenlijk alleen, door een nieuwe functie toe te voegen welke de waarde uit de string haalt, maar dus nog steeds direct uit een globale variable. Ikzelf ben eigenlijk nog nooit een situatie tegengekomen waarbij globals de enigste mogelijke oplossing zouden bieden. Globals kan je vaak eenvoudig wegwerken door de variable als parameter aan de functie mee te geven.
PHP:
1
2
3
4
5
6
7
8
$string = 'wat/een/heerlijke/kaas';
$arr    =  explode('/', $string);

functie doe_iets()
{
  global $arr;
  if ($arr[3] == 'kaas') echo 'lekker!';
}

Zou dan dus worden:
PHP:
1
2
3
4
5
6
7
8
9
$string = 'wat/een/heerlijke/kaas';
$arr    =  explode('/', $string);

functie doe_iets($array)
{
  if ($array[3] == 'kaas') echo 'lekker!';
}

doe_iets($arr);

of zoals in jouw 2e oplossing
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$string = 'wat/een/heerlijke/kaas'; 

function splitStringToValue($string, $index) 
{ 
  $arr =  explode('/', $string); 
  return $arr[$index]; 
} 

function isKaasString($string) 
{ 
  if (arr($string, 3) == 'kaas') echo 'lekker!'; 
}

isKaasString($string);
?> 

Verder is het belangrijk om vantevoren goed te bedenken wat een functie moet doen, om overbodig 'complexe'/omslachtige oplossingen te voorkomen. Maar goed waarschijnlijk was je voorbeeld daar ook niet voor bedoeld. :)

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

prototype schreef op 26 oktober 2004 @ 01:45:
[...]
Allereerste wat me opvalt: keyword uppercasing :X, niet doen :| en als je het toch doet, doe het dan overal, Class, If, Else etc..

Ten tweede, zoals ik je code even 123 snel lees, zie ik helemaal geen behoefte aan globals, daar je deze als instantievariabelen kunt declareren binnen je classe en deze bv kunt setten in je constructor.
[...]
1. Waarom niet? Ik ben altijd in voor commentaar, maar geef dan wel een reden. :) Hehe, ik moet toegeven na even wat bladeren door wat van mijn code: ik ben niet erg consistent. Ik ga over op total camelcase, lijkt me wat netter.

2. Als je files include in een function, krijgen die dus scope van de functie. Al je classes die dus aanmaakt in dat bestand krijgen ook die scope. Als je dus er iets uit wilt halen, of in wilt stoppen, kan dat (bijna) niet anders dan met globals. Je zou het eventueel mee kunnen zenden als parameters van de constructor, maar daar wordt ikzelf ook niet vrolijk van. Het maakt het in mijn ogen niet duidelijker, overzichtelijker, of wat dan ook.

[ Voor 19% gewijzigd door Cavorka op 26-10-2004 20:04 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Cavorka schreef op 26 oktober 2004 @ 20:01:
[...]

1. Waarom niet? Ik ben altijd in voor commentaar, maar geef dan wel een reden. :) Hehe, ik moet toegeven na even wat bladeren door wat van mijn code: ik ben niet erg consistent. Ik ga over op total camelcase, lijkt me wat netter.

2. Als je files include in een function, krijgen die dus scope van de functie. Al je classes die dus aanmaakt in dat bestand krijgen ook die scope. Als je dus er iets uit wilt halen, of in wilt stoppen, kan dat (bijna) niet anders dan met globals. Je zou het eventueel mee kunnen zenden als parameters van de constructor, maar daar wordt ikzelf ook niet vrolijk van. Het maakt het in mijn ogen niet duidelijker, overzichtelijker, of wat dan ook.
1) Je geef zelf al de reden; inconsistent, en dat kan resulteren tot ambiguiteit.
2) Ik denk dat dit 'probleem' eerder te vinden is in de manier waarop je je model hebt opgesteld. Ik heb zelf nimmer nooit gebruik hoeven maken van globals, maar ja, ik zal dan waarschijnlijk wel iets fout doen waardoor dat niet nodig is :P ;)

[ Voor 3% gewijzigd door prototype op 26-10-2004 20:19 ]


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

Cavorka schreef op 26 oktober 2004 @ 20:01:
[...]

1. Waarom niet? Ik ben altijd in voor commentaar, maar geef dan wel een reden. :) Hehe, ik moet toegeven na even wat bladeren door wat van mijn code: ik ben niet erg consistent. Ik ga over op total camelcase, lijkt me wat netter.
Als Je Alle Keyword Met Een Hoofdletter Schrijft, Leest 'T Ook Veel Kutter, Net Als In Deze Reply. ;)

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@_bergen_:_daar_heb_je_misschien_gelijk_in_,_maar_dit_is_toch_ook_niet_wat_je_zegt_:_netjes?

[ Voor 3% gewijzigd door Reveller op 26-10-2004 20:34 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Reveller schreef op 26 oktober 2004 @ 20:33:
@_bergen_:_daar_heb_je_misschien_gelijk_in_,_maar_dit_is_toch_ook_niet_wat_je_zegt_:_netjes?
We hebben het dan ook over keywords/literals en niet over identifiers.

  • Spixo
  • Registratie: Augustus 2004
  • Laatst online: 07:03
Vaak zie ik mensen het volgende doen:
PHP:
1
2
3
4
5
<?php
$soort = "bruin";
$soortbrood = "maisbrood";
echo "Ik heb vandaag $soortbrood klaarliggen";
?>

Hier gaat het dus de fout in, bedoel je nu bruinbrood of maisbrood. Beter dus om het gewoon als volgt te doen:
PHP:
1
2
3
4
5
<?php
$soort = 'bruin';
$soortbrood = 'maisbrood';
echo 'Ik heb vandaag '.$soort.'brood klaarliggen';
?>

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 09:10
Ricardo87 schreef op 26 oktober 2004 @ 20:53:
Vaak zie ik mensen het volgende doen:
PHP:
1
2
3
4
5
<?php
$soort = "bruin";
$soortbrood = "maisbrood";
echo "Ik heb vandaag $soortbrood klaarliggen";
?>

Hier gaat het dus de fout in, bedoel je nu bruinbrood of maisbrood. Beter dus om het gewoon als volgt te doen:
PHP:
1
2
3
4
5
<?php
$soort = 'bruin';
$soortbrood = 'maisbrood';
echo 'Ik heb vandaag '.$soort.'brood klaarliggen';
?>
Daar gaat het nog niet eens fout.

Het gaat fout op het volgende moment (als je variabele variabelen gaat gebruiken):

PHP:
1
2
3
4
5
6
$bla = 1;
{$blaat{$bla}} = 'Eén';
$bla = 2;
{$blaat{$bla}} = 'Twee';

echo "$blaat$bla";

want dan wordt het pas echt onvoorspelbaar.

Verder natuurlijk NOOIT variabele variabelen gebruiken :o

[ Voor 10% gewijzigd door Mithrandir op 26-10-2004 20:57 ]

Verbouwing


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Ricardo87 schreef op 26 oktober 2004 @ 20:53:
Vaak zie ik mensen het volgende doen:
PHP:
1
2
3
4
5
<?php
$soort = "bruin";
$soortbrood = "maisbrood";
echo "Ik heb vandaag $soortbrood klaarliggen";
?>

Hier gaat het dus de fout in, bedoel je nu bruinbrood of maisbrood. Beter dus om het gewoon als volgt te doen:
PHP:
1
2
3
4
5
<?php
$soort = 'bruin';
$soortbrood = 'maisbrood';
echo 'Ik heb vandaag '.$soort.'brood klaarliggen';
?>
Het allocaten van een variabele binnen een string kun je ook zo doen, waardoor meerduidigheid niet meer bestaat:

PHP:
1
2
3
4
5
<?php
    $soort = 'bruin';
    $soortbrood = 'maisbrood';
    print ("Ik heb vandaag {$soort}brood klaarliggen");
?>


Tokenizen/formatted print biedt natuurlijk ook uitkomst:

PHP:
1
2
3
4
5
<?php
    $soort = 'bruin';
    $soortbrood = 'maisbrood';
    printf ("Ik heb vandaag %sbrood klaarliggen", $soort);
?>

  • GeniusDex
  • Registratie: Augustus 2001
  • Laatst online: 24-01-2025

GeniusDex

Thumbs up for insanity!

Ik vind het dus ZO onduidelijk (ook ivm highlighten) om een var in een string te proppen. Gewoon lekker zo:
PHP:
1
2
3
<?
echo "Ik heb vandaag ".$soort."brood klaarliggen.";
?>

Please guys, I'm trying to troll here.
If I failed to offend you in this post, please leave a message. I will address you in next post.


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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ricardo87 schreef op 26 oktober 2004 @ 20:53:
Vaak zie ik mensen het volgende doen:
PHP:
1
2
3
4
5
<?php
$soort = "bruin";
$soortbrood = "maisbrood";
echo "Ik heb vandaag $soortbrood klaarliggen";
?>
leuk voorbeeld, de "fout" is echter niet wat jij zegt, maar meer dat je totaal verkeerde variabelenamen gebruikt ;)

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.


  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 09:10
GeniusDex schreef op 26 oktober 2004 @ 21:30:
Ik vind het dus ZO onduidelijk (ook ivm highlighten) om een var in een string te proppen. Gewoon lekker zo:
PHP:
1
2
3
<?
echo "Ik heb vandaag ".$soort."brood klaarliggen.";
?>
[onzin weg]

(alles wordt gewoon geparsed, dus als je bijvoorbeeld $bla gebruikt als 't nog niet bestaat blijft 'ie gewoon leeg.

[ Voor 34% gewijzigd door Mithrandir op 26-10-2004 21:54 ]

Verbouwing


  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Mithrandir schreef op 26 oktober 2004 @ 21:52:
[...]
(alles wordt gewoon geparsed, dus als je bijvoorbeeld $bla gebruikt als 't nog niet bestaat blijft 'ie gewoon leeg.
Wanneer error_reporting op E_ALL staat (wat bij ontwikkelen naar mijn mening altijd het geval zou moeten zijn) levert dat wel waarschuwingen op.

Maar wat GeniusDex (geloof ik) bedoelt is dat de variable bij:
PHP:
1
2
3
<? 
echo "Ik heb vandaag " . $soort . "brood klaarliggen."; 
?>

Veel beter opvalt als bij:
PHP:
1
2
3
<? 
echo "Ik heb vandaag $soort brood klaarliggen."; 
?>

Omdat hij in de 1e situatie een mooi blauw kleurtje krijgt.

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Even snel iets geschreven voor PHP4 (schijnbaar is dat nog populair ;)), kan de ballen van kloppen (niet getest nog, met notepad geschreven :S), maar dat doet er even niet aan toe ;) Het gaat even om de notatie van pre/postcondities in docstyle.

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
<?php
    /**
     * Math class; dummy placeholder
     * @author  Ninh Bui (ninh@phusion.nl)
     * @version 0.0.0.1
     */
    class Math {
         //TODO: Write math (super)class.
    }



    /**
     * Probability class
     * @author  Ninh Bui (ninh@phusion.nl)
     * @version $Revision 1.3.3.7 $
     */
    class Probability extends Math {

        /**
         * Computes possible combinations; order omitted, reoccurence not allowed
         * @require $n > 0 && $r >= 0
         * @param $n Size of collection
         * @param $r Size of selection
         * @return $result == $n! / (($n - $r)! * $r!)
         * @ensure $result > 0
         */
        function nCr($n, $r) {
            return ($this->nPr($n, $r) / $this->factorial($r));
        }


        /**
         * Computes possible permutations; order of importance, reoccurence not allowed
         * @require $n > 0 && $r >= 0
         * @param $n Size of collection
         * @param $r Size of selection
         * @return $result == $n! / ($n - $r)!
         * @ensure $result > 0
         */
        function nPr($n, $r) {
            return ($this->factorial($n) / $this->factorial($n - $r));
        }


        /**
         * Computes the factorial of given $n; recursively
         * @require $n >= 0
         * @param $n positive integer
         * @return $result == $n * ($n - 1) * ($n - 2) ... * ($n - ($n - 2)) * 1
         * @ensure $result >= 1
         */
        function factorial($n) {
            $n = (int) abs($n);
            switch ($n) {
                case 0:
                case 1:
                    return 1;
                break;

                default:
                    return ($n * $this->factorial ($n - 1));
                break;
            }
        }
    }

?>

[ Voor 7% gewijzigd door prototype op 27-10-2004 02:41 ]


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

Voor die documentatie-parsers zal 't best handig zijn en 't is bij bestudering ook allemaal wel begrijpelijk, maar 't ziet er gewoon rommelig uit. (vind ik)

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Bergen schreef op 27 oktober 2004 @ 03:08:
Voor die documentatie-parsers zal 't best handig zijn en 't is bij bestudering ook allemaal wel begrijpelijk, maar 't ziet er gewoon rommelig uit. (vind ik)
Gege, kwestie van de juiste IDE gebruiken die comment/methodblocks kan expanden en collapsen :) (eclipse bv)

Afbeeldingslocatie: http://wwwhome.cs.utwente.nl/~buixn/collapse.gif

[ Voor 11% gewijzigd door prototype op 27-10-2004 03:21 ]


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

pjotrk schreef op 26 oktober 2004 @ 22:17:
[...]

Omdat hij in de 1e situatie een mooi blauw kleurtje krijgt.
Het hangt ook van de editor af... Vi laat 't bijvoorbeeld prima zien:
Afbeeldingslocatie: http://www.gerbs.net/pics/got/2004-10/vi.png
kan er op CRTs een beetje vreemd uitzien, ik gebruik subpixel smoothing

[ Voor 17% gewijzigd door Bergen op 27-10-2004 03:16 ]


  • blizt
  • Registratie: Januari 2003
  • Laatst online: 01-05 08:39

blizt

Wannabe-geek

Toch nog even over die globals:
als ik 'n database-class heb, en ik moet in 'n functie 'n database aanspreken dan moet ik m'n db-class global maken...
of moet ik dan eerst weer die class includen, new database(); etc. doen?

United we stand, and divided we fall


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

blizt schreef op 27 oktober 2004 @ 22:37:
Toch nog even over die globals:
als ik 'n database-class heb, en ik moet in 'n functie 'n database aanspreken dan moet ik m'n db-class global maken...
of moet ik dan eerst weer die class includen, new database(); etc. doen?
ehm, je stuurt die dbclass toch gewoon mee naar die functie als die het nodig heeft?
Hint: daar zijn constructors voor uitgevonden ;)

  • blizt
  • Registratie: Januari 2003
  • Laatst online: 01-05 08:39

blizt

Wannabe-geek

Hm, leg 'ns uit ...
Ik weet wat 'n constructor is hoor, maar hoe pak ik dat nu in de praktijk aan?
Wat ik nu van je begrijp is dat ik de variable die de class bevat (bv. $cDatabase) als parameter doorgeef aan de functie....
Hm, misschien wel 'n idee, ja ... Tijdens het typen van deze post zie ik eigenlijk al meer in dat constructors daar misschien wel eens voor bedoelt zouden kunnen zijn ;)

[edit]
Nu dit gedaan:

PHP:
1
2
3
4
5
6
7
8
9
10
11
//veel comments enzo
    function blog($acDatabase)
    {

      $this->cDatabase = $acDatabase;
      return TRUE;
      
    }//blog() (constructor)

//weer veel comments, 'n variable die de query heeft en dan:
$rSelect_blog = $this->cDatabase->query($qSelect_blog);


Ben ik zo op de goede weg of niet?

[ Voor 33% gewijzigd door blizt op 27-10-2004 22:57 ]

United we stand, and divided we fall


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

blizt schreef op 27 oktober 2004 @ 22:41:
Hm, leg 'ns uit ...
Ik weet wat 'n constructor is hoor, maar hoe pak ik dat nu in de praktijk aan?
Wat ik nu van je begrijp is dat ik de variable die de class bevat (bv. $cDatabase) als parameter doorgeef aan de functie....
Hm, misschien wel 'n idee, ja ... Tijdens het typen van deze post zie ik eigenlijk al meer in dat constructors daar misschien wel eens voor bedoelt zouden kunnen zijn ;)

[edit]
Nu dit gedaan:

PHP:
1
2
3
4
5
6
7
8
9
10
11
//veel comments enzo
    function blog($acDatabase)
    {

      $this->cDatabase = $acDatabase;
      return TRUE;
      
    }//blog() (constructor)

//weer veel comments, 'n variable die de query heeft en dan:
$rSelect_blog = $this->cDatabase->query($qSelect_blog);


Ben ik zo op de goede weg of niet?
Ik weet niet precies hoe PHP dit aanpakt, maar je zou het dus kunnen oplossen door in je classe een referentie naar een object te bewerkstelligen; bij het instantieren van een Blog object, geef je dus in de constructor aanroep meteen je database object mee.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    class Blog {
        var $db;

        function Blog ($db) {
            $this->setDb($db);
        }

        function setDb($db) {
            $this->db = $db;
        }

        function getArticle($id) {
            return $this->db->query('');
         }
    }
?>

[ Voor 4% gewijzigd door prototype op 27-10-2004 23:32 ]


  • blizt
  • Registratie: Januari 2003
  • Laatst online: 01-05 08:39

blizt

Wannabe-geek

Mja, dus eigenlijk wat ik al deed - had het goed begrepen :).
Enige was dat ik niet netjes 'n setter had gebruikt, nu wel ....

United we stand, and divided we fall


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
PHP4 passed objecten naar methods standaard niet als referentie maar als kopie, dat voorkom je door een & voor je object-declaraties in de argument van de method te zetten. Maar ik vind het eigenlijk niet zo praktisch in elk object een referentie naar de database te hebben zitten. Je kunt ook een global gebruiken:

PHP:
1
2
3
4
5
$global $db;

$db->init();
..
$_GLOBALS['db']->query($q);


of met static methods werken (PHP5?):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require_once("DB.php");
require_once("Foo.php");
class App() {
    
    public function run() {
        DB::init();
        $foo = new Foo(); 
        $foo->bar(); 
    }
}
---
// andere file
require_once("DB.php");
class Foo() {
    
    public function bar() {
        DB::query($baz);
    }
}

[ Voor 12% gewijzigd door Genoil op 27-10-2004 23:58 ]


  • blizt
  • Registratie: Januari 2003
  • Laatst online: 01-05 08:39

blizt

Wannabe-geek

Maar die globals probeerden we toch jusit te vermijden? Of zie ik het nu verkeerd?
En PHP5 ... Tja, het draait hier thuis wel - maar ik ga er niet van uit dat ik altijd PHP5 tot m'n beschikking heb.

United we stand, and divided we fall


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
blizt schreef op 27 oktober 2004 @ 23:59:
Maar die globals probeerden we toch jusit te vermijden? Of zie ik het nu verkeerd?
En PHP5 ... Tja, het draait hier thuis wel - maar ik ga er niet van uit dat ik altijd PHP5 tot m'n beschikking heb.
globals zijn er ook niet voor niets. dingen als een database interface zijn toch best wel als globaal te typeren in veel PHP apps, waarom dan niet gewoon een global gebruiken ipv van een hoop gegoochel met referenties om die globals maar te vermijden.

volgens mij kan PHP4 ook wel static method calls, je hoeft het er alleen niet expliciet bij te zetten.

Verwijderd

Ik was eerst een hele overzichtelijke coder (tenminste, naar mijn mening).

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
     Blaat functie, zoek de bom
*/
function blaat( $foo )
{
    #En hier wat onzin
    switch ($foo)
    {
        case "kablam":
            echo "Bom gevonden!!!";
            break;
        default:
            echo "Er is niets aan het handje";
            break;   // Ja die laatste break er ook bij, rare tik misschien
    }
}


Overzichtelijk nietwaar?
Toen heb ik de code coloring veranderd, en begon ik me te ergeren aan de loze ruimte die overal stond. (functies & global: #0066FF, vars, & constants: #990066, tekst: #0000CC, reserved: #009900 en schuingedrukt). Eerst gebruikte ik lichtere kleuren. Om die laatste reden valt de tekst misschien iets beter te lezen (het was eerst ook goed leesbaar, daarnietvan) maar is de tekst wat nadrukkelijker aanwezig. Om die reden heb ik minder behoefte aan al die ruimte - ergens klinkt dat tegenstrijdig... - en heb ik alles op de volgende manier in elkaar zitten.

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
/*
     Blaat functie, zoek de bom
*/
function blaat( $foo ) {
    #En hier wat onzin
    switch ($foo) {
        case "kablam":
            echo "Bom gevonden!!!";
            break;
        default:
            echo "Er is niets aan het handje";
            break;   // Ja die laatste break er ook bij, rare tik misschien
    }

    if (1) {
    } 
    elseif (2) {
        // Die elseif iets meer ruimte geven omdat daar nog
        // wat extra tekst in staat
    } else {
        // De else wel op zun kortst
    }
}

# Variabelen doe ik soms $zoongeveer of $zo_ongeveer 
# (net als de PHP builders ben ik er ook nog niet uit)


Wat ik maar kort wil zeggen, het ligt ook voor een deel aan hoe zichtbaar je code is - dus met een grote resolutie misschien uit elkaar, ik gok maar wat? 8)7, en met een kleine reso kun je alles haarfijn op elkaar goed lezen. Lettergrootte (mocht je die kunnen veranderen) speelt misschien een rol, etc etc.

Over de global discussie, ik vermijd zo veel mogelijk globals (je hebt toch niet voor niets die ruimte bovenin die functie?) maar ik global relatief erg veel omdat ik classes daarmee overzet. global $usr, $t, $db; zul je vaak bij mij aantreffen. Daar wil ik wel bij zeggen dat ik 98% van al mijn code in een functie zet. Geen idee of dat slim is verder maar het werkt fijn en overzichtelijk :P

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
blizt schreef op 27 oktober 2004 @ 23:31:
Enige was dat ik niet netjes 'n setter had gebruikt, nu wel ....
Getters en setters zijn uberhaupt niet netjes. Maargoed dat is een hele andere discussie ;)

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

PrisonerOfPain schreef op 28 oktober 2004 @ 00:23:
[...]

Getters en setters zijn uberhaupt niet netjes. Maargoed dat is een hele andere discussie ;)
Oh? Wat is er dan niet netjes aan queries(getters) en commando's(setters)? :)
Je plaatst zo'n reply, dus verklaar je nader, please ;)

[ Voor 10% gewijzigd door prototype op 28-10-2004 00:31 ]


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
prototype schreef op 28 oktober 2004 @ 00:31:
[...]


Oh? Wat is er dan niet netjes aan queries(getters) en commando's(setters)? :)
Je plaatst zo'n reply, dus verklaar je nader, please ;)
Het is een eigenschap, daarbij doet de setter in dit geval niet meer als dat je het rechtstreeks zou doen. Dus waarom zou je?

Iets uitgebreider:
[rml][ php] OOP, hoever ga je?[/rml]

[ Voor 4% gewijzigd door PrisonerOfPain op 28-10-2004 00:43 ]


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

PrisonerOfPain schreef op 28 oktober 2004 @ 00:39:
[...]

Het is een eigenschap (private, of protected), daarbij doet de setter in dit geval niet meer als dat je het rechtstreeks zou doen. Dus waarom zou je?

Iets uitgebreider:
[rml][ php] OOP, hoever ga je?[/rml]
Ligt eraan hoe je je query/commando method access toekent, indien je binnen je classe een commando/query private declareert die een private instancevar kan veranderen/waarde van teruggeven dan kan je prima deze setter binnen de classe gebruiken. Evt overload je de commando/query voor een evt andere signatuur (bv een public of protected access) indien dat wenselijk is. Ik zie het probleem dus niet :)

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
prototype schreef op 28 oktober 2004 @ 00:46:
[...]

Ligt eraan hoe je je query/commando method access toekent, indien je binnen je classe een commando/query private declareert die een private instancevar kan veranderen/waarde van teruggeven dan kan je prima deze setter binnen de classe gebruiken.
Het punt is dat je een method gebruikt op een plaats waar je met een gewone variabele, of __set()/__get() kan voldoen. Waarom zou je dan een getter of setter methode 'willen' gebruiken?
Netter word het er IMHO niet op.
Evt overload je de commando/query voor een evt andere signatuur (bv een public of protected access) indien dat wenselijk is. Ik zie het probleem dus niet :)
PHP ook PHP5 ondersteunt geen overloading op die manier. Overloading in PHP zijn methodss als __get, __set en __call. Nou kun je met __call de boel faken, maar dan gebruik je alsnog een method.

Verwijderd

ik ben nogal lui

als ik volledige formulieren of volledige stukken html en dergelijke moet in php wil printen ofzo design ik ze eerst op een nieuwe pagina, en doe dan find " replace witch ' in de bron.

vervolgens plak ik die hele lap code in een print("lap code');

/me codez like a pig

[ Voor 12% gewijzigd door Verwijderd op 28-10-2004 00:54 ]


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

PrisonerOfPain schreef op 28 oktober 2004 @ 00:53:
[...]

Het punt is dat je een method gebruikt op een plaats waar je met een gewone variabele, of __set()/__get() kan voldoen. Waarom zou je dan een getter of setter methode 'willen' gebruiken?
Netter word het er IMHO niet op.
Mogelijk wil je in de toekomst extra functionaliteit toevoegen, en niet zomaar bruutweg de waarde veranderen danwel opvragen 'as is'. Mogelijk moet het resultaat van bv een query geformateerd worden. Ik begrijp opzich nog niet wat je bedoelt met __set()/__get(), maar then again, ben ook niet echt into PHP :)
[...]

PHP ook PHP5 ondersteunt geen overloading op die manier. Overloading in PHP zijn methodss als __get, __set en __call. Nou kun je met __call de boel faken, maar dan gebruik je alsnog een method.
Ergo PHP zuigt ;)

[ Voor 9% gewijzigd door prototype op 28-10-2004 00:57 ]


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
prototype schreef op 28 oktober 2004 @ 00:56:
Ik begrijp opzich nog niet wat je bedoelt met __set()/__get(), maar then again, ben ook niet echt into PHP :)
Daardoor mis je dus vrijwel het hele punt ;) Ik zie dat je een .Net-ter bent dus;
code:
1
2
3
4
5
6
7
8
9
10
11
public string Property
{
      get
      {
            return myProperty
      }
      set
      {
            myProperty = value;
      }
}

Gewoon accessors, maar dan op de PHP manier :+

  • TeasingU
  • Registratie: Juni 2001
  • Laatst online: 15-09-2022

TeasingU

I Live Longer

Voor de topicstarter en iedereen die het interesseert.

http://pear.php.net/manual/en/standards.php

Op deze pagina kwam ik terecht via php-freakz. Er staat een aanbeveling mbt de layout van je code en aardig wat aandachtspunten zoals het gebruik van <?php ipv <? en het gebruik van // ipv # (voor commentaar)


(Stukje beschrijving op de site)
PEAR is short for "PHP Extension and Application Repository" and is pronounced just like the fruit. The purpose of PEAR is to provide:
* A structured library of open-sourced code for PHP users
* A system for code distribution and package maintenance
etc.

cd /usr/ports/www/porn make install


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

Verwijderd schreef op 28 oktober 2004 @ 00:53:
...en doe dan find " replace witch ' in de bron...
"vervang heks"? :?

Dat is nog eens wat je noemt enge code! ;)

[ Voor 19% gewijzigd door Bergen op 28-10-2004 02:21 ]


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Reveller schreef op 25 oktober 2004 @ 20:17:
Wat is eigenlijk de regel wanneer je wel of geen globals opneemt in je functies? En daarbij aansluitend: hoe is jullie benamingsconventie voor variabelen?
Ik heb 4-8 echte globals die ik overal gebruik in mn script.

4 objecten, $core, $db, $bbparser, $useraccess.
$DOMAIN en $DIR. (ja, transitie naar een constante, maar heb ik nog niet overal aangepast.)
En misschien nog 1 waar ik nu even niet opkom.

Voor de rest gebruik ik nergens extra globals.

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


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Grijze Vos:
Ik heb 4-8 echte globals die ik overal gebruik in mn script.

4 objecten, $core, $db, $bbparser, $useraccess.
De naam 'core' voor een of ander object wat "veel doet" heb ik nooit zo goed begrepen... Ik zie dat vaker, maar waarom gebruikt men niet wat helderdere namen daarvoor?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 13-05 14:28

koli-man

Bartender!!!!

Core zou ik niet alleen gebruiken. Je hebt een kern voor elke soort objecten denk ik. Als je met meerdere programmeurs aan een project werkt en daarvan is een gedeelte klaar wat gebruikt kan worden en niét meer verandert wordt. (althans niet de bedoeling) dan zou ik zeggen dan gebruik je core. Maar dan nog met een toevoeging.

Verder denk ik dat je programmeerstijl ook wel een beetje ligt aan het bedrijf waar je werkt, of waar je gedetacheerd zit. Want voor een CMM level 3 is er een Coding style guide beschikbaar waar de ontwikkeling zich aan moet houden.

[ Voor 28% gewijzigd door koli-man op 28-10-2004 11:19 ]

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
drm schreef op 28 oktober 2004 @ 10:51:
[...]
De naam 'core' voor een of ander object wat "veel doet" heb ik nooit zo goed begrepen... Ik zie dat vaker, maar waarom gebruikt men niet wat helderdere namen daarvoor?
Het ding laadt de settings van alle modules (uit een ini file), en doet nog wat url-handling. (De waarden tussen slashes indexeren, je kent het wel.)

Een zinnigere naam kon ik toendertijd niet bedenken eigenlijk. moduleConfig of iets in die geest is ook niet zinnig, aangezien het net weer wat meer doet dan alleen modules beheren..

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


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

PrisonerOfPain schreef op 28 oktober 2004 @ 00:53:
[...]

Het punt is dat je een method gebruikt op een plaats waar je met een gewone variabele, of __set()/__get() kan voldoen. Waarom zou je dan een getter of setter methode 'willen' gebruiken?
Netter word het er IMHO niet op.
Het geeft je de mogelijkheid om beveiligingen en restricties in te bouwen. Zie onderstaande class bijvoorbeeld; hier kan niemand een negatieve leeftijd invoeren en de functie geeft false terug als hij de waarde dus niet heeft geaccepteerd:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    class Pruts
    {
        private $leeftijd; // moet >= 0 zijn!
        
        public function set_leeftijd($leeftijd)
        {
            if ($leeftijd >= 0) {
                $this->leeftijd = $leeftijd;
            }
            return ($leeftijd >= 0);
        }
    }
?>
Dit kun je natuurlijk ook checken in de code die de functie aanroept, maar als je classes aan 't schrijven bent voor iemand anders, of als je de class over een jaar nog eens wilt gebruiken, dan wil je niet al die checks nog eens opnieuw schrijven.

[ Voor 6% gewijzigd door Bergen op 28-10-2004 14:42 ]


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

code:
1
if ($leeftijd >= 0)


Ow.. mooie check... alles (strings/booleans) evalueert zo'n beetje naar >= 0 :P

Maar je hebt wel gelijk.. je kunt het direct/extern zetten van properties zoveel mogelijk voorkomen. Ook al heb je op dat moment geen checks, dan kun je tenminste eenvoudig code toevoegen later zonder je complete applicatie te herbouwen. Bovendien ben je een stuk zekerder van de inhoud van je properties.

[ Voor 57% gewijzigd door Bosmonster op 28-10-2004 15:18 ]


  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 09:10
Wat ik erg vreemd vind van PHP is dat __get() en __set() heel selectief worden aangeroepen.

Van __set() weet ik niet precies wanneer die wordt aangeroepen, maar __get() wordt alleen aangeroepen als een property nog niet bestaat. Voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Miep
{
    function __get($varName)
    {
        if($varName == 'deVar')
        {
            echo 'deVar wordt geget';
            return $this->deVar;
        }
    }
}


Als je echter $deVar al had geset ( public deVar = ""; bijvoorbeeld), dan wordt __get() helemaal niet opgeroepen en accessed hij de property direct!

* Mithrandir schopt PHP5 implementatie van 'oo'. Het werkt totaal niet als andere programmertalen.

Laat staan dat ze de gewone implementatie gebruiken; dat zou er dan zo uitzien:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Woei
{
    public $deVar
    {
        __set($value)
        {
        //set value na wat checks of whatever.
        }

        __get()
        {
        //returnen ofzo
        }
    }
}


Ik weet verder niet of er dan 'functie' voor __set() en __get() had moeten staan of iets anders, maar ik hoop dat het idee duidelijk is.

[ Voor 6% gewijzigd door Mithrandir op 28-10-2004 19:59 ]

Verbouwing


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

Bosmonster schreef op 28 oktober 2004 @ 15:16:
code:
1
if ($leeftijd >= 0)


Ow.. mooie check... alles (strings/booleans) evalueert zo'n beetje naar >= 0 :P
Euh... zoiets dan?
code:
1
if (isset($leeftijd) && is_numeric('0'.$leeftijd) && $leeftijd >= 0)
Dan moet 't toch zeker lukken... als er geen 2,5 ipv 2.5 wordt ingevoerd tenminste.

Die is_numeric('0'.$leeftijd) is er trouwens voor om niet false terug te geven als er bijvoorbeeld .5 wordt ingevoerd. 1.3 wordt dan .1.3 maar dat geeft niet.

[ Voor 33% gewijzigd door Bergen op 28-10-2004 21:14 ]


  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 09:10
Bergen schreef op 28 oktober 2004 @ 21:12:
[...]
Die is_numeric('0'.$leeftijd) is er trouwens voor om niet false terug te geven als er bijvoorbeeld .5 wordt ingevoerd. 1.3 wordt dan .1.3 maar dat geeft niet.
1.3 wordt dan 01.3 ;)

Verbouwing


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Bergen schreef op 28 oktober 2004 @ 14:41:
[...]
Het geeft je de mogelijkheid om beveiligingen en restricties in te bouwen. Zie onderstaande class bijvoorbeeld; hier kan niemand een negatieve leeftijd invoeren en de functie geeft false terug als hij de waarde dus niet heeft geaccepteerd:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    class Pruts
    {
        private $leeftijd; // moet >= 0 zijn!
        
        public function set_leeftijd($leeftijd)
        {
            if ($leeftijd >= 0) {
                $this->leeftijd = $leeftijd;
            }
            return ($leeftijd >= 0);
        }
    }
?>
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
<?php
class Pruts
{
    private $myLeeftijd;

    public function __set ($Var, $Value)
    {
        switch ($Var)
        {
            case 'Leeftijd':
            {
                if ($Value >= 0)
                {
                    $this->myLeeftijd = $Value;
                }
                else
                {
                    throw new SignedValueException();
                }
            }break;
        }
        return;
    }
}

class SignedValueException extends Exception {}


Het is jammer dat je het moet implementeren dmv een switch() maar verder 'precies' hetzelfde.
Zelf houd ik er niet van om return values te gebruiken of succes/failure aan te geven. Return values zijn IMHO om het resultaat van een functie aan te geven (in Delphi heet dat ding niet voor niets Result, wat volgens mij een stuk logischer is ;))

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 09:10
Pas HEEL erg op met __get() en __set()!!!!

Het is TOTAAL niet het zelfde als in bijvoorbeeld C#:

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
<?php

class testclass 
{
    function __get($var)
    {
        if($var = 'blaat')
        {
            echo "__get blaat: '{$this->blaat}'\r\n";
        }
    }
    
    function __set($var,$val)
    {
        if($var = 'blaat')
        {
            echo "__set blaat to: '$val'\r\n";
            $this->$var = $val;
        }
    }
}

$t = new testclass;
echo "echoing t->blaat: '" . $t->blaat . "'\r\n";
$t->blaat = 'Pom';
echo "echoing t->blaat: '" . $t->blaat . "'\r\n";
$t->blaat = 'Woei';
echo "echoing t->blaat: '" . $t->blaat . "'\r\n";

?>


Levert de volgende uitput op:

code:
1
2
3
4
5
__get blaat: ''
echoing t->blaat: ''
__set blaat to: 'Pom'
echoing t->blaat: 'Pom'
echoing t->blaat: 'Woei'


Dat is dus niet de bedoeling; het had het volgende moeten zijn:

code:
1
2
3
4
5
6
7
8
__get blaat: ''
echoing t->blaat: ''
__set blaat to: 'Pom'
__get blaat: 'Pom'
echoing t->blaat: 'Pom'
__set blaat: 'Woei'
__get blaat: 'Woei'
echoing t->blaat: 'Woei'


Met andere woorden: __set() en __get() worden maar één keer aangeroepen, en alleen als de variabele nog niet bestaat.

[ Voor 25% gewijzigd door Mithrandir op 28-10-2004 21:47 ]

Verbouwing


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Hans1990 schreef op 25 oktober 2004 @ 22:00:
Even een 'kleine' code uit mijn systeem gehaald om even snel te laten zien hoe ik code :)

PHP:
1
2
3
    $sUser = $this->query("
            WHERE
                    users.userHash = '" . $_COOKIE["userHash"] . "'


Ik doe btw nooit HTML in me PHP, daarvoor gebruik ik natuurlijk templates. :)
Zie ik daar nou een sql injection exploit bug? :P

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Mithrandir schreef op 28 oktober 2004 @ 21:46:
Pas HEEL erg op met __get() en __set()!!!!

Met andere woorden: __set() en __get() worden maar één keer aangeroepen, en alleen als de variabele nog niet bestaat.
Ik vind het wel meevallen ;) komt simpelweg omdat de variabele in de class voorrang heeft op de __get en __set functies. (Note dat class::$blaat hier dezelfde naam heeft als die in je __get en __set()).
Mijn oplossing; variabelen prefixen met my, of iets anders.
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
<?php

class testclass
{
    private $myblaat; //Variabele declareren doe we ook niet meer?
    function __get($var)
    {
        if($var = 'blaat')
        {
            echo "__get blaat: '{$this->myblaat}'\r\n";
        }
    }
    
    function __set($var,$val)
    {
        if($var = 'blaat')
        {
            echo "__set blaat to: '$val'\r\n";
            $this->myblaat = $val;
        }
    }
}

$t = new testclass;
echo "echoing t->blaat: '" . $t->blaat . "'\r\n";
$t->blaat = 'Pom';
echo "echoing t->blaat: '" . $t->blaat . "'\r\n";
$t->blaat = 'Woei';
echo "echoing t->blaat: '" . $t->blaat . "'\r\n";

?> 


Als je in jou voorbeeld $blaat eerst private had gemaakt had je trouwens een foutmelding gekregen dat je de prive eigenschap $blaat niet aan mag :)

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

Idd, ik ben toe aan koffie. ;)

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Mithrandir schreef op 28 oktober 2004 @ 21:46:
PHP:
1
2
3
4
        if($var = 'blaat')
        {
            echo "__get blaat: '{$this->blaat}'\r\n";
        }
dit evalueert altijd naar true :X :P
ik zou het dan zo doen:
PHP:
1
2
3
4
        if($var == 'blaat')
        {
            echo "__get blaat: '".$this->blaat."'\r\n";
        }

:)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Grappig; ik zou het nog anders doen:
PHP:
1
2
3
4
if($var == 'blaat')
{
    echo "__get blaat: '", $this->blaat, "'\r\n";
}

Ik ben altijd bang dat als ik 'm schrijf zoals Mithrandir of Erkens, PHP daadwerkelijk de string concatenatie of substitutie gaat uitvoeren (en volgens mij is mijn angst terecht). Hoewel het performancegewijs meestal niet echt uit zal maken, vind ik dat gewoon zo lelijk dat ik dan liever een echo statement met meerdere argumenten maak.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Soultaker schreef op 29 oktober 2004 @ 09:47:
Ik ben altijd bang dat als ik 'm schrijf zoals Mithrandir of Erkens, PHP daadwerkelijk de string concatenatie of substitutie gaat uitvoeren (en volgens mij is mijn angst terecht). Hoewel het performancegewijs meestal niet echt uit zal maken, vind ik dat gewoon zo lelijk dat ik dan liever een echo statement met meerdere argumenten maak.
die punt zit er zo hard in, hoewel ik met echo wel vaker probeer om die komma te gebruiken, is eigenlijk ook beter wat het hoeft idd geen concatenatie plaats te vinden, het is immers gewoon output en dan is het idd onzinnig om eerst alles samen te voegen en dan pas naar de client te sturen :P

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Bergen schreef op 28 oktober 2004 @ 21:12:
[...]
Euh... zoiets dan?
code:
1
if (isset($leeftijd) && is_numeric('0'.$leeftijd) && $leeftijd >= 0)
Dan moet 't toch zeker lukken... als er geen 2,5 ipv 2.5 wordt ingevoerd tenminste.

Die is_numeric('0'.$leeftijd) is er trouwens voor om niet false terug te geven als er bijvoorbeeld .5 wordt ingevoerd. 1.3 wordt dan .1.3 maar dat geeft niet.
of in plaats van je checks heel ingewikkeld maken gewoon je invoer casten naar int.

$leeftijd = (int) $leeftijd;

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Inderdaad; ik doe dat ook altijd zo.

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 09:10
PrisonerOfPain schreef op 29 oktober 2004 @ 00:26:
[...]

Ik vind het wel meevallen ;) komt simpelweg omdat de variabele in de class voorrang heeft op de __get en __set functies. (Note dat class::$blaat hier dezelfde naam heeft als die in je __get en __set()).
Mijn oplossing; variabelen prefixen met my, of iets anders.
[...]
Als je in jou voorbeeld $blaat eerst private had gemaakt had je trouwens een foutmelding gekregen dat je de prive eigenschap $blaat niet aan mag :)
Dan nog vind ik het ranzig. Het werkt totaal anders dan je (ik) zou verwachten.

En prefixen is helemaal bah, dan kun je het beter nog in een array zetten ;). Maar NOG vind ik het een vage implementatie. Waarom ze zich niet gewoon aan de 'standaard' oplossing houden is me een raadsel.

edit:

Overigens was dat voorbeeld inderdaad ranzig en niet consistent geprogd ;) Maar in plaats van daar commentaar op te leveren had ik liever een inhoudelijke reply gezien ;)

[ Voor 12% gewijzigd door Mithrandir op 29-10-2004 16:28 ]

Verbouwing


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Mithrandir schreef op 29 oktober 2004 @ 16:27:
[...]


Dan nog vind ik het ranzig. Het werkt totaal anders dan je (ik) zou verwachten.

En prefixen is helemaal bah, dan kun je het beter nog in een array zetten ;). Maar NOG vind ik het een vage implementatie. Waarom ze zich niet gewoon aan de 'standaard' oplossing houden is me een raadsel.
PHP is uberhaupt een taal waar je weinig 'standaard' dingen van kunt verwachten ;). Persoonlijk vind ik de C# manier ook een stuk netter. Maar er valt mee te leven. Probeer trouwens hetzelfde voorbeeld als wat jij postte eens naar C# te porten. Je compiler zal dan een foutmelding geven als:
The class 'Test23.Foo' already contains a definition for 'blaat'
Dat PHP deze foutmelding niet kan geven ligt aan de implementatie, je weet van te voren namelijk niet welke variabelen er allemaal afgevangen zullen worden door __get en __set.
In dit geval vind ik zelf trouwens variabelen in een array zetten weer viesjes, omdat de variabelen niet allemaal dezelfde betekenis hebben.

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 09:10
PrisonerOfPain schreef op 29 oktober 2004 @ 16:56:
[...]

PHP is uberhaupt een taal waar je weinig 'standaard' dingen van kunt verwachten ;). Persoonlijk vind ik de C# manier ook een stuk netter. Maar er valt mee te leven. Probeer trouwens hetzelfde voorbeeld als wat jij postte eens naar C# te porten. Je compiler zal dan een foutmelding geven als:

[...]

Dat PHP deze foutmelding niet kan geven ligt aan de implementatie, je weet van te voren namelijk niet welke variabelen er allemaal afgevangen zullen worden door __get en __set.
In dit geval vind ik zelf trouwens variabelen in een array zetten weer viesjes, omdat de variabelen niet allemaal dezelfde betekenis hebben.
Okee, maar dan zou je natuurlijk wel dit hebben:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyClass
{
    private int x;
    public int X
    {
        get
        {
            return x;
        }
        set
        {
            x = value;
        }
    }
}  


Maar het idee is toch heel anders ;)

Verbouwing


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Compile dat eens ;)

*Ziet nou het verschil in hoofdletters pas*
Dat vind ik nou een 'smerig' truukje, het word er niet duidelijker op waar je mee te maken hebt. Vandaar dat ik dus prefix met my.

[ Voor 87% gewijzigd door PrisonerOfPain op 29-10-2004 19:08 ]


  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 17-05 19:58

Wacky

Dr. Lektroluv \o/

Mijn manier:

PHP:
1
2
3
4
5
6
7
8
9
// Voorbeeld commentaar
// Tweede regel van het commentaar

function voorbeeld() {
    global $variabele;
    if ($dit_topic == 'goed') {
        echo 'ik lever ook commentaar!';
    }
}

4 spaties om in te springen :)

PHP:
1
2
3
4
$output.= "<table>
          <tr><td colspan=\"2\">dit is cel 1</td></tr>
          <tr><td>cel 2</td><td>cel 3</td></tr>
          </table>";

Werkt goed zo :Y)

PHP:
1
// Commentaar


En commentaar doen we zo (zie ook boven) 8)

Nu ook met Flickr account


Verwijderd

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

    +---------+-------------------------------+
    |         |                               |\
    |  author | Arthur Dam                    ||
    |    date | 5/10/2004                     ||
    |  client | http://gathering.tweakers.net ||
    | contact | Jan de Baas                   ||
    |         | copyrighted 2003-2004(c)      ||
    |         |  all rights reserved          ||
    |         |                               ||
    +---------+-----------------------------=-+|
    |         |                               ||
    |  script | LeetnessChecker               ||
    |         | version 2.1                   ||
    |         |                               ||
    +---------+-------------------------------+|
     ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

-->

<?



require_once 'config.php';
require_once 'functions.php';

session_start();

$banaan = new banana();

connectdB();

if ($vVar1 == bUser) {

  // print dat je een blaataap bent!
  print 'in ben een blaataap'; 
  $iets = $banaan->vUser;

}
else
{

  // print dat je ownt!
  print 'ik own bijna';

?>


ik wissel wel 'ns wat kleine dingen qua 'stijl' (recentelijk, print ipv echo, require_once ipv echo)
heb ook al dingen die ik vanaf 't begin al apart doe ('BrEeZaH-variabelenj :p zoals uLogin, vVar, dbServ ofzo).
verder heb ik in mijn html altijd bovenaan altijd copyrights en veel lege ruimtes, en ik houdt mijn code graag zo overzichtelijk mogelijk, dus in een echte script van mij zal je nogal veel moeten scrollen ivm witregels :]

verder gebruik ik zo min mogelijk classes en functions maar ik doe m'n best om die zoveel mogelijk te gaan gebruiken.

[ Voor 42% gewijzigd door Verwijderd op 29-10-2004 20:00 ]


  • blizt
  • Registratie: Januari 2003
  • Laatst online: 01-05 08:39

blizt

Wannabe-geek

Verwijderd schreef op 29 oktober 2004 @ 19:53:
ik wissel wel 'ns wat kleine dingen qua 'stijl' (recentelijk, print ipv echo, require_once ipv echo)
Van echo naar print, ok (waarom eigenlijk?) - maar van echo naar require_once? :x
Niet van include(_once) naar require_once ofzo?

United we stand, and divided we fall


Verwijderd

blizt schreef op 29 oktober 2004 @ 19:55:
[...]

Van echo naar print, ok (waarom eigenlijk?) - maar van echo naar require_once? :x
Niet van include(_once) naar require_once ofzo?
echo naar print omdat 't sneller blijkt te zijn plus wat kleine dingen die ik nooit gebruik, van include naar require_once zodat ik het sneller doorheb als ik domme dingen doe :p

[ Voor 7% gewijzigd door Verwijderd op 29-10-2004 20:02 ]


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
blizt schreef op 29 oktober 2004 @ 19:55:
[...]

Van echo naar print, ok (waarom eigenlijk?)
Print returned een waarde, dus je kan 'm gebruiken in een vergelijkingen ed. Verder heeft het niets extra's boven echo. Misschien dat het mooier is?

  • blizt
  • Registratie: Januari 2003
  • Laatst online: 01-05 08:39

blizt

Wannabe-geek

Verwijderd schreef op 29 oktober 2004 @ 20:01:
[...]


echo naar print omdat 't sneller blijkt te zijn, van include naar require_once zodat ik het sneller doorheb als ik domme dingen doe :p
Zoals Prisoner al zegt, return print 'n waarde. Is dus (voor zover ik weet) trager dan echo. Ik heb er wel 'ns benchmarks van gezien, zal ze zo even opzoeken als ik er tijd voor heb.

United we stand, and divided we fall


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
blizt schreef op 29 oktober 2004 @ 20:03:
[...]

Zoals Prisoner al zegt, return print 'n waarde. Is dus (voor zover ik weet) trager dan echo. Ik heb er wel 'ns benchmarks van gezien, zal ze zo even opzoeken als ik er tijd voor heb.
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 staat het allemaal uitgelegt :)

  • Copyman
  • Registratie: Januari 2001
  • Laatst online: 11-05 14:23

Copyman

Dode muis

Enige waar ik me op dit moment mee bezig hou is Java. Even een héél simpel stukje code in mijn stijl van coden:

code:
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
/**
 * Een rekenmachien
 */
public class RekenMachien
{
    // instance variables
    private int m_getal1;
    private int m_getal2;
    private int m_uitkomst;

    // constructor
    public RekenMachien(int p_getal1, int p_getal2)
    {
    m_getal1 = p_getal1;
    m_getal2 = p_getal2;
    m_uitkomst = 0;
    }

    // methods
    public void somGetallen()
    {
    if(m_getal1 && m_getal2 < 0) {
        System.out.println("Sorry, dat gaat niet lukken...");
    }
    else {
        m_uitkomst = m_getal1 + m_getal2;
    }
    }
}

[ Voor 3% gewijzigd door Copyman op 29-10-2004 20:27 ]

Zeer belangrijke informatie: Inventaris


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Copyman schreef op 29 oktober 2004 @ 20:19:
Enige waar ik me op dit moment mee bezig hou is Java. Even een héél simpel stukje code in mijn stijl van coden:

code:
1
2
3
4
5
6
    public RekenMachien(int p_getal1, int p_getal2)
    {
    m_getal1 = p_getal1;
    m_getal2 = p_getal2;
    m_uitkomst = 0;
    }
Dit zie je niet zo vaak. Waarom indent je niet bij je method body ?
Ik vind het niet echt overzichtelijk omdat het niet duidelijk aangeeft waar een methode begint of eindigt. Misschien dat je daarom vergeten bent somGetallen() met een } af te sluiten ;)

  • Copyman
  • Registratie: Januari 2001
  • Laatst online: 11-05 14:23

Copyman

Dode muis

Orphix schreef op 29 oktober 2004 @ 20:25:
[...]

Dit zie je niet zo vaak. Waarom indent je niet bij je method body ?
Ik vind het niet echt overzichtelijk omdat het niet duidelijk aangeeft waar een methode begint of eindigt. Misschien dat je daarom vergeten bent somGetallen() met een } af te sluiten ;)
Bracket was gewoon een vergeet gevalletje. Verder ben ik nog beginnend java'er, zo wordt het ons op school geleerd. :)
De p_ en m_ heb ik van iemand geleerd die al een tijdje bezig is met programmeren, p_ voor parameter, m_ voor member. ;)

[ Voor 14% gewijzigd door Copyman op 29-10-2004 20:43 ]

Zeer belangrijke informatie: Inventaris


  • simon
  • Registratie: Maart 2002
  • Laatst online: 08:01
Copyman schreef op 29 oktober 2004 @ 20:19:
Enige waar ik me op dit moment mee bezig hou is Java. Even een héél simpel stukje code in mijn stijl van coden:

code:
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
/**
 * Een rekenmachien
 */
public class RekenMachien
{
    // instance variables
    private int m_getal1;
    private int m_getal2;
    private int m_uitkomst;

    // constructor
    public RekenMachien(int p_getal1, int p_getal2)
    {
    m_getal1 = p_getal1;
    m_getal2 = p_getal2;
    m_uitkomst = 0;
    }

    // methods
    public void somGetallen()
    {
    if(m_getal1 && m_getal2 < 0) {
        System.out.println("Sorry, dat gaat niet lukken...");
    }
    else {
        m_uitkomst = m_getal1 + m_getal2;
    }
    }
}
Toch vind ik het niet zo netjes, de ene keer ident je anders dan de ander, bij functies e.d. ident je 'm niet, maar bij ifs wel... en bij de ene regel gaat de { naar de volgende, bij de ander niet :P

Beetje verwarrend :)

|>


  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 19-05 12:56
Voor Java is er door sun vrij nauwkeurig (understatement :P) beschreven hoe je zou moeten coderen lijkt me:
Java code conventions

Niet dat dit de enige goede manier is, maar er is in ieder geval over nagedacht zullen we maar zeggen... :)

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)


  • Copyman
  • Registratie: Januari 2001
  • Laatst online: 11-05 14:23

Copyman

Dode muis

Toen ik net begon met programmeren, deed ik het ook op een andere mannier:

code:
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
/**
 * Een rekenmachien
 */
public class RekenMachien {

    // instance variables
    private int getal1;
    private int getal2;
    private int uitkomst;

    // constructor
    public RekenMachien(int getal1, int getal2) {
        this.getal1 = getal1;
        this.getal2 = getal2;
        uitkomst = 0;
    }

    // methods
    public void somGetallen() {
        if(getal1 && getal2 < 0) {
            System.out.println("Sorry, dat gaat niet lukken...");
        }
        else {
            uitkomst = getal1 + getal2;
        }
    }

}


Komt ook doordat ik het vorige stukje gewoon even in kladblok had gemaakt, wat ik normaal met Textpad doe.

Zeer belangrijke informatie: Inventaris


  • Rex
  • Registratie: September 2003
  • Laatst online: 13-04 16:38

Rex

Wolven zijn mooie dieren

Ik snap niet waarom mensen zoveel onnodige brackets gebruiken!

In plaats van

PHP:
1
2
3
4
5
6
<?
if($var == 'blaat') 
{ 
    echo "__get blaat: '", $this->blaat, "'\r\n"; 
}
?> 


kun je net zo goed dit doen:

PHP:
1
2
3
4
<?
if($var == 'blaat') 
    echo "__get blaat: '", $this->blaat, "'\r\n"; 
?> 


Kort en krachtig :)

[Aanvulling]
• Ik gebruik dus geen onnodige brackets noch matching brackets.
• Ik gebruik 2 spaties.
• Ik gebruik zo min mogelijk commentaar. (Waarom zou je commentaar geven als je je scripts door en door kent? :| Ok het helpt wel bij grote scripts net als mijn site die vele mb's aan code is, maar het is stom om bijv het volgende te doen:)

PHP:
1
2
3
4
5
6
login.php
<?
/*
 * Login pagina
 */
?>


Ik bedoel, doh! zelfs me oma ziet dat het de login pagina is, door alleen al naar de naam van de file te kijken. |:(

[ Voor 53% gewijzigd door Rex op 29-10-2004 23:27 ]

Rex


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ReflexWolf schreef op 29 oktober 2004 @ 23:23:
Ik snap niet waarom mensen zoveel onnodige brackets gebruiken!
omdat je als je die brackets wel neer zet direct overzicht hebt over welke code waarbij hoort, en daarnaast is de code makkelijker uit te breiden en hoef je niet steeds overal brackets bij te zetten. Maar volgens mij heb ik dit al een keer genoemd in dit topic...
Erkens schreef op 25 oktober 2004 @ 18:25:
[...]

ik doe dat altijd, brackets gebruiken, door dit altijd te doen krijg geen last van foutjes als je vergeten bent die brackets toe te voegen als er een statement bij moet later.
In het uitzonderlijke geval dat ik het niet doe dan komt dat statement op dezelfde regel als de if, ook hier om de structuur duidelijk weer te geven en te laten zien dat alleen dat statement uitgevoerd wordt.

ReflexWolf schreef op 29 oktober 2004 @ 23:23:

[Aanvulling]
• Ik gebruik zo min mogelijk commentaar. (Waarom zou je commentaar geven als je je scripts door en door kent? :| Ok het helpt wel bij grote scripts net als mijn site die vele mb's aan code is, maar het is stom om bijv het volgende te doen:)

PHP:
1
2
3
4
5
6
login.php
<?
/*
 * Login pagina
 */
?>


Ik bedoel, doh! zelfs me oma ziet dat het de login pagina is, door alleen al naar de naam van de file te kijken. |:(
ehm, right, lees over een x aantal maanden die code nogmaals, of vraag iemand anders om die code eens door te nemen ;)

[ Voor 28% gewijzigd door Erkens op 29-10-2004 23:29 ]


  • Rex
  • Registratie: September 2003
  • Laatst online: 13-04 16:38

Rex

Wolven zijn mooie dieren

[...]

ehm, right, lees over een x aantal maanden die code nogmaals, of vraag iemand anders om die code eens door te nemen ;)
Ok, enigzins heb je wel gelijk. Voor sommige mensen zou gelden dat ze commentaar nodig hebben.
In mijn geval niet, omdat mijn code alleen maar door 2 andere personen aangepast mag worden, en niemand anders mag het bekijken. Ook is het zo dat we dagelijks aan het coderen zijn en dat we al zo lang met elkaar coderen dat wij met één woord elkaar begrijpen. Dus ok, ik heb niet echt rekening gehouden met de "normale tweaker" ;)

Toch vind ik wel dat onnodige brackets gewoon eruit kunnen. Als je later een statement erbij doet, dan zie je zeker wel dat het een bracket mist. (Tenminste in mijn geval wel, maar ik hanteer deze "techniek" al jaren, dus ik zie meteen dat iets geen brackets heeft en die dus nodig heeft)
Het is dus gewoon even wennen, na een tijdje gaat het vanzelf ;)

Rex


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ReflexWolf schreef op 29 oktober 2004 @ 23:39:
[...]


Ok, enigzins heb je wel gelijk. Voor sommige mensen zou gelden dat ze commentaar nodig hebben.
In mijn geval niet, omdat mijn code alleen maar door 2 andere personen aangepast mag worden, en niemand anders mag het bekijken. Ook is het zo dat we dagelijks aan het coderen zijn en dat we al zo lang met elkaar coderen dat wij met één woord elkaar begrijpen. Dus ok, ik heb niet echt rekening gehouden met de "normale tweaker" ;)
vroeg of laat kom je jezelf wel tegen ;)
Toch vind ik wel dat onnodige brackets gewoon eruit kunnen. Als je later een statement erbij doet, dan zie je zeker wel dat het een bracket mist. (Tenminste in mijn geval wel, maar ik hanteer deze "techniek" al jaren, dus ik zie meteen dat iets geen brackets heeft en die dus nodig heeft)
Het is dus gewoon even wennen, na een tijdje gaat het vanzelf ;)
alles is even wennen, maar na een if/while/etc typ ik automatisch die brackets zodat het nooit fout gaat, ieder zijn eigen style natuurlijk. Maar waarom zouden die brakcets onnodig zijn? ze geven namelijk duidelijk aan welke code waarbij hoort, dat kan je van jouw manier niet zeggen, je kan er snel overheen lezen namelijk :)

  • silentsnow
  • Registratie: Maart 2001
  • Laatst online: 15-04-2013

silentsnow

« '-_-' »

Mijn stijl in java:
Java:
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
  /**
   * comments
   *
   * @author ...
   * @version ...
   */
   public PCB remove(int time)
   {
      cursor = nullNode.getNext();
      while(cursor != nullNode)
      {
         int arrivalTime = (cursor.getPCBObject()).getTime();
         if (time >= arrivalTime)
         {
            temp = cursor.getPCBObject();
            ListNode nodeToRemove = cursor;
            ListNode beforeNodeToRemove = cursor.getPrev();
            cursor = cursor.getNext();
            cursor.setPrev(beforeNodeToRemove);
            beforeNodeToRemove.setNext(cursor);
            size--;
            return temp;
         }
         else
            cursor = cursor.getNext();
      }
      return (new PCB(-1));
   }


- 3 spaties indent, liever geen tabs.
- Bij elkaar horende brackets zet ik verticaal boven elkaar. Vooral met grotere algoritmen is het een hel als je dit niet doet.

Mijn stijl in Intel Assembly:
code:
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
          .model small
          .stack 64
          .data
PR         DB         "Enter: $"
L          DB         "Your number is LESS than 50$"
M          DB         "Your number is LARGER than 50$"
E          DB         "Your number is EQUAL to 50$"
TEMP       DW ?
TEN        DW 10
STRPAR     LABEL      BYTE
MAXLEN     DB 2
ACTLEN     DB 1
CHARS      DW 1       DUP (51)

          .code
MAIN       proc       FAR
           mov        AX, @data
           mov        DS, AX

           call       ANALYZE

           mov        AX, 4C00h
           int        21h
MAIN       endp

CLEAR      proc       NEAR
           mov        AX, 0600h
           mov        BH, 7h
           mov        CX, 0
           mov        DX, 184Fh
           int        10h
           ret
CLEAR      endp

GET_INPUT  proc       NEAR
           mov        AH, 2h
           mov        BH, 0
           mov        DX, 50Ah
           int        10h
           mov        AH, 09h
           lea        DX, PR
           int        21h
           mov        AH, 0Ah
           lea        DX, STRPAR
           int        21h
           mov        BL, ACTLEN
           mov        CHARS[BX], "$"
           ret
GET_INPUT  endp

ANALYZE    proc       NEAR
           mov        BX, 0
           mov        DH, 0Ah
           mov        AL, ACTLEN
           cbw
           mov        SI, AX
           mov        CX, AX
           mov        AX, 1
           add        SI, SI

_AA:       sub        SI, 2
           mov        TEMP, AX
           mov        DX, CHARS[SI]
           sub        DX, 48
           mul        DX
           add        BX, AX
           mov        AX, TEMP
           mul        TEN
           loop       _AA

           cmp        BX, 3
           jz         _EQUAL
           jns        _MORE

           lea        DX, L
           jmp        _QUIT

_MORE:     lea        DX, M     ; comments
           jmp        _QUIT

_EQUAL:    lea        DX, E     ; comments

_QUIT:     mov        AH, 09h
           int        21h
           ret
ANALYZE    endp
           end MAIN


- tabs zijn ideaal
- comments op een instructie gaan daadwerkelijk op die regel
- loops en methods als bloks

The trade of the tools
[ me | specs ] Klipsch Promedia Ultra 5.1 + Sennheiser HD-590


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Laat ik ook eens wat posten:

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
/**
* @author   B-Man
* @date     30-10-2004
* @version  4.0
* @copyright    2004
*/

/* Import libraries */
CFW::lib('auth');
CFW::lib('db');
CFW::lib('form');
CFW::lib('requestcache');
CFW::lib('page');

/* Verify & handle request */
if(!RequestCache::setup('client', 'mode', array('mode', 'id')))
{
    Request::validate(array(
        'mode'  => 'req;in[add/edit]',
        'id'    => 'req[+mode:edit];numeric[pos]'
    ));
    RequestCache::cache();
}

/* Import variables we need in the script */
$mode   = Request::getSafe('mode', 'string');
$id = Request::getSafe('id', 'integer');

/* Export variables we need for output */
Page::export(array(
    'mode'  => &$mode
));


Ik gebruik 4 spaties als indentation (in alle talen die ik programmeer), schrijf veel commentaar, al heb ik nog nooit een documentation tool gebruikt (buiten java dan ;)). Maar mocht het ooit nodig zijn, dan kan het wel. (Zo gaat er nu een andere programmeur aan de slag me een stel componenten van me, en die kon ik in een minuut of 15 laten zien hoe e.e.a. werkt, en kon ook zo documentatie genereren).

Ik gebruik sinds een paar maanden ook overal matching brackets, met name om wat 'lucht' te creeeren na lange if-statements.
Mijn code was al overzichtelijk, maar is dat nu nog meer geworden.

Veelal is het afwegen wat netter is, en wat sneller is in een taal als PHP, vandaar dat ik (zoals je kunt zien) in bovenstaand voorbeeld een stukje laat zien van een Request Validator, die een string accepteert voor iedere variabele die gevalideerd moet worden. Het is veel netter (en langer!) te maken en schrijven, maar dat voegt in dit geval niet veel toe. De verschillende controles die op een veld uitgevoerd kunnen worden zijn goed gedocumenteerd, dus deze code is snel te doorgronden.

[ Voor 8% gewijzigd door B-Man op 30-10-2004 01:13 ]

Pagina: 1 2 Laatste