2016-06-13 18 views
1

Ich habe über den folgenden Code kommen:Lese mehrere ternäre Operator Bedingungen

 if (proto.hasOwnProperty(name)) { 
     !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined; 
     } 

Wie beurteilen Sie den ternären Operator in Zeile 2 lesen?

Antwort

0

Versuchen Sie eine Einrückung Ihren Code für ein besseres Verständnis zu formatieren.

if (proto.hasOwnProperty(name)) { 
    !(
     specPolicy === SpecPolicy.DEFINE_MANY //1 
     || 
     specPolicy === SpecPolicy.DEFINE_MANY_MERGED //1 
    ) ? 
     process.env.NODE_ENV !== 'production' ? //2 
      invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : 
      invariant(false)//3 
     : undefined;//4 
} 

(1) Wenn specPolicy weder SpecPolicy.DEFINE_MANY ist noch SpecPolicy.DEFINE_MANY_MERGED, dann prüfen, ob process.env.NODE_ENV nicht "Produktion" ist. (2) Wenn ja, dann rufen Sie invariant(false, 'Re...., sonst rufen Sie (3) invariant(false). Wenn (1) wahr ist, geben Sie undefined (4) zurück.

1

Wie einer der Kommentare sagt, sollten Sie dies wahrscheinlich in einen traditionellen if-else-Baum konvertieren, um die Lesbarkeit zu verbessern. Allerdings würde es so gelesen (ich habe es nicht wörtlich willen der Kürze halber geschrieben, aber man den Kern erhalten):

if (!conditionOne) { 
    if (conditionTwo) { 
     return invariant(false, 'ReactClass...', name); 
    } 
    else { 
     return invariant(false); 
    } 
} 
else { 
    return undefined; 
} 

ich dies dachte, die Beantwortung von auf einen an dem Code-Umwandlungs-if-else Maibaum help you versteh es ein wenig einfacher :)

0

Es gibt zwei ternäre Operatoren. Sehen Sie, ob diese Art der Formatierung hilft:

!(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? 
    process.env.NODE_ENV !== 'production' ? 
     invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : 
     invariant(false) : 
    undefined; 
0

Sie könnten geeignete Einzüge verwenden. Die innere ternären zusammen gruppiert wie

condition1 ? condition2 ? value1 : value2 : value3 

ist die gleiche wie

condition1 ? (condition2 ? value1 : value2) : value3 

mit Ihrem Code;

!(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? 
    process.env.NODE_ENV !== 'production' ? 
     invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : 
     invariant(false) : 
    undefined;