2015-11-10 2 views
11

Ich möchte meinem const validation einen Wert basierend auf einer Bedingung zuweisen.Was ist der beste Weg in ES6, eine Konstante bedingt zuzuweisen?

Wenn this.showRequired() == true Dann sollte es 'required'

Else, wenn this.showError() == true Dann sollte es 'error' sein.

Ich weiß natürlich, dass ich es zu einer Funktion extrahieren könnte, oder Kaskade ternäre Operatoren, aber der erste scheint Code Bloat, der letztere hässlich.

Gibt es einen besseren Weg, es zu tun? Wenn-noch-Ausdrücke vielleicht?

+0

Was ist falsch an ternären Operatoren? Sie sind die viel prägnantere * Ausdruck * -Form von Wenn-sonst. – Bergi

+0

IMO die Syntax ist ein bisschen kryptisch. Ich bevorzuge Scalas if-else-Ausdrücke. – Midiparse

+0

@Midiparse Möglicherweise müssen Sie diese Einstellung vornehmen. Ternäre Operatoren sind in Javascript sehr verbreitet. Wenn Sie Open-Source-Code lesen oder Beiträge schreiben möchten, ist es hilfreich, sie auf einen Blick zu verstehen. – Tyrsius

Antwort

23

ternäre Operator Cascading sieht gut für mich:

const validation = this.showRequired() ? 'required' : this.showError() ? 'error' : null 

Wenn Sie diese Linie denken, zu lang ist, man könnte es aufgeteilt:

const validation = this.showRequired() ? 'required' 
        : this.showError() ? 'error' 
        : null 

Oder könnten Sie && und || statt:

const validation = (this.showRequired() && 'required') || 
        (this.showError() && 'error') 

Wie zum Ausziehen dieses Codes in einem sepa Rate-Funktion, können Sie immer eine Inline-Funktion anstelle von noch Methode eine andere Klasse zu schaffen verwenden:

const validation = (() => { 
    if (this.showRequired()) { 
    return 'required' 
    } else if (this.showError()) { 
    return 'error' 
    } 
})() 

Aber ternäre Operator trotzdem sieht besser aus, vor allem, wenn sie in mehrere Zeilen aufgeteilt wird.

Verwandte Themen