Jump to content
php.lv forumi

Atrasts internetā


briedis

Recommended Posts

  • Replies 539
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Boolean flagi argumentos sux smagi, pilnīgi nelasāmi. Labāk izveidot vnk atsevišķu funkciju, kas izsauc konkrēto funkciju ar konkrēto boolean flagu, bet funkcijai vismaz ir lasā nosaukums.

 

saveOrder($asDraft = false);

 

saveOrderAsDraft(){

    return saveOrder(true);

}

 

Internāli klasēs lietot tādas metodes vēl ok, bet uz ārpuse nerullē.

Arī šis piemērs nav īsti pareizs, jo tas, vai flagi ir slikti vai nē, ir atkarīgs no tā, vai tu modificē behavior vai arī entity. Tādam "saveOrderAsDraft" vispār nevajadzētu eksistēt, jo draft ir Order īpašība, un ar persistance layer šim steitam diez vai būs kāds sakars.

 

Lūk:

class Order {
    private $isDraft = false;

    public setDraft($draft) {
        $this->isDraft = $draft;
    }

    public isDraft() {
        return $this->isDraft();
    }
}

// ...

$order->setDraft(true);
$db->save($order);

Taču oriģinālajā rakstā autoram ir pilnīga taisnība - no šādas inline konfigurācijas aļa flagiem vajadzētu izvairīties cik vien iespējams. Ne vienmēr tas ir praktiski un reāli izdarāms, taču, jā, tā tam vajadzētu būt.

 

Ps. Jurčik, tas, ko Tu te proponē saucas parameter hell. Un risinājums tam ir konfigurācijas konstrukti. 

// WTF?
function doStuff($relative, $secondOnly = false, $merge = false, $thing = false, $whatever = null, $oneMore = null, $booHoo = false) {
    //...
}

$x = doStuff(true, false, false, null, false, null, false);
// WTF?

// vai arī...

function doStuff(DoStuffOptions $options) {
    //..
}

$options = new DoStuffOptions()
    ->withRelative(true)
    ->secondOnly()
    ->doAMerge()
    ->addThing($thing)
    ->withWhatever($whatever)
    ->addMore($more)
    ->doABooHoo()
;

$x = doStuff($options);
Edited by F3llony
Link to comment
Share on other sites

>Ps. Jurčik, tas, ko Tu te proponē saucas parameter hell. Un risinājums tam ir konfigurācijas konstrukti.

Tu gribi teikt, ka manā koda piemērā man jātaisa speciāla klase DIVIEM boolean parametriem? Kaut gan jebkurš normāls IDEs un arī dažu advanced text editoru lietotājs var apskatīties, ko tie parametri nozīmē, sekundes laikā?

Edited by jurchiks
Link to comment
Share on other sites

Pliks boolean ir tāds pats ļaunums kā random skaitļi parametros vai aprēķinos (piemērs par meaning of life = 42). Ja izsaukums toties izskatās "doShit($with_this_stuff, YES_MORE, NOT_SURE, YES_PLS)", nevis "doStuff($with_this_stuff, true, false, true)", tad viss ir ok.

Link to comment
Share on other sites

Javā var darīt šādi:

public class Foo {
    public static Baz bar() {
        // Well, how cool is this, eh?
        return new Baz() {{
            isFoo = true;
            isBaz = true;
            method = () -> "Hello World!";
        }};
    }

    private static class Baz {
        boolean isFoo = true;
        boolean isBaz = true;
        ReturnValue method;
    }

    private interface ReturnValue {
        String thing();
    }
}

Link to comment
Share on other sites

Ja izsaukums toties izskatās "doShit($with_this_stuff, YES_MORE, NOT_SURE, YES_PLS)", nevis "doStuff($with_this_stuff, true, false, true)", tad viss ir ok.

Kā tas ir ok, ja tu tāpat nezini, ko pieprasa YES_MORE, NOT_SURE, YES_PLS? Atšķirība tikai nosaukumā.

Vismaz izdomā meaningful nosaukumus piemēriem, ja gribi, lai tos uztver nopietni...

 

Javā var darīt šādi:

Ir links uz dokumentāciju? Google nespēj pēc keywordiem ' java constructor "{{" ' neko jēdzīgu atgriezt.

 

Edit: nvm, found it - double-brace initialization.

Bet skatoties pēc stackoverflow komentāriem, izskatās, ka diezgan dārgs/slikti optimizēts pasākums...

Edited by jurchiks
Link to comment
Share on other sites

Kā tas ir ok, ja tu tāpat nezini, ko pieprasa YES_MORE, NOT_SURE, YES_PLS? Atšķirība tikai nosaukumā.

Vismaz izdomā meaningful nosaukumus piemēriem, ja gribi, lai tos uztver nopietni...

 

Ir links uz dokumentāciju? Google nespēj pēc keywordiem ' java constructor "{{" ' neko jēdzīgu atgriezt.

 

Edit: nvm, found it - double-brace initialization.

Bet skatoties pēc stackoverflow komentāriem, izskatās, ka diezgan dārgs/slikti optimizēts pasākums...

Atkarīgs kā izmanto. Ja veido jaunu instanci 10,000 reizes sekundē, obviously. Ja izmanto vienreiz lai nokonfigurētu kaut kādu konfigu, efekts ir 0. Tā pat, kā ar 10000 citām lietām visās valodās. 

Link to comment
Share on other sites

Vismaz izdomā meaningful nosaukumus piemēriem, ja gribi, lai tos uztver nopietni...

"doStuff($with_this, DO_THING_A, DONT_DO_THING_B)" - labāk?

 

 

Tas jau vairāk tāds filozofisks skatījums.

Ja skatamies uz programmēšanas valodu kā konstrukciju, ar ko likt kādai ierīcei darboties konkrētā veidā, tad mēs varētu teikt, ka HTML kods dod browserim programmu, pēc kuras sastādīt attēlu uz ekrāna (vai atskaņot noteiktas skaņas accesibility iekārtā, vai veidot noteiktu attēlu, ko nosūtīt printerim, utt...).

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...