Hvor skal utføre argument validering i Javascript?

stemmer
1

Ja, leste riktig. I den siste tiden så jeg ulike mønstre av argument validering i Javascript (funksjoner) og lurte på hvem av dem som ville være best-praksis. Ved første vil jeg vise to eksempel kodesnutter. Den første viser en (i mine ord) umiddelbare argument / tilstand validering og den andre en forsinket validering. Hver av dem påvirke utseendet til følgende kode på forskjellige måter. Inntil nå har jeg alltid brukt umiddelbar validering. Men sakte jeg får tvilsomt om det er rimelig å tvinge hele følgende kode inn i slike betingede blokker. Fortell meg hva du tenker og hva som kan være den beste mønster.

Og hva om stedet der variabler deklareres? Et par ganger har jeg lest, at alle variabler må deklareres på av metoden, før de faktisk brukes. Er dette riktig? Fordi jeg tror at det er nytteløst å erklære variabler før den er sikker på at de vil bli faktisk brukes (kanskje ugyldige argumenter tvinge kast av et unntak), flyttet jeg den variable-erklæringen-delen utover argumentet / tilstand validering del. Er dette lurt?

Takk!

Første eksempel:

if (   colorStops.constructor === Array 
    && colorStops.length
    && colorStops.every(function(c) {
        return c instanceof ColorStop  
    })) 
{
    var privateVar1 = foo,
        privateVar2 = bar,
        privateVar3 = tutifrutti;

    // here goes the code
}
else {
    throw new TypeError(GradientCanvasFacade: cannot add Colors;  +
        invalid arguments received);
}

Andre eksempel:

if (cg instanceof ColorGradient) {
    throw new TypeError(PresetManager: Cannot add preset;  +
        invalid arguments received);
}

var privateVar1 = foo,
    privateVar2 = bar,
    privateVar3 = tutifrutti;

// here goes the code
// Here goes the code that get executed when no explicit 
// return took place ==> all preconditions fulfilled
Publisert på 15/09/2009 klokken 22:01
kilden bruker
På andre språk...                            


3 svar

stemmer
1

Siden Javascript variabler scoped til å erklære funksjon og ikke til blokken som de fleste andre språk, erklærte variabler i begynnelsen av funksjonen gjør mye fornuftig.

function someFunc()
{
    if (1==1) 
    {
        var x = 1;
    } 
    else 
    {
        var x = 2;
    } 
    return x
}

Nå forestille en funksjon mye mer komplisert, for meg ihvertfall, erklærte x i begynnelsen gjør mye fornuftig. For variabler som regel bundet til en blokk (som iteratorknapper variabler eller samlinger) erklærer jeg fortsatt dem i blokken skjønt.

Jeg vil definitivt gå for andre eksempel ikke fordi den ikke tidligere, fordi egentlig ikke, men fordi det er lettere å fjerne og legge valideringer på denne måten uten å bryte en komplisert hvis struktur.

Svarte 15/09/2009 kl. 22:15
kilden bruker

stemmer
0

Jeg vil gå med andre, rett og slett fordi det er lettere å lese. Også med det første, hvis funksjon er svært lang, noen ser på bunnen, vil lure på hva det }er for, og må hoppe opp til toppen for å se.

Også scoping variabler er veldig klar, selv for en som glemmer at javascript har rare scoping regler.

Også, som nevnt av Martijn, den andre metoden gjør det mye lettere å kontrollere for ulike feil, dvs. hver kan ha sine egne ifutsagn og så videre.

Svarte 15/09/2009 kl. 22:30
kilden bruker

stemmer
0
if (some condition) {
  if (some other condition based in the first) {
    if (another condition based in 1st and 2nd) {
      do_job();
    } else?
  } else?
} else?

Hvor å sette den andre blokken? Etter hvert hvis eller etter den siste?

Det virker absolutt mer lesbar den andre choise

Svarte 15/09/2009 kl. 23:21
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more