2016-06-22 18 views
0

Ich versuche eine Prozedur aufzurufen, um in einen anderen Zustand zu gelangen und diese Rückkehr zu erhalten. Vorher hatte ich es so codiert:Kann ich einen Ternäroperator verwenden, wenn es eine "Rückkehr" von den Bedingungen gibt?

if (self.word && row.wordId == self.word.wordId) { 
     return this.$state.go('r.s.s.a.w.w.edit', { 
      subjectId: self.sus.subject.id, 
      wordId: row.wordId 
     }); 
    } else { 
     return this.$state.go('r.s.s.a.w.w', { 
      subjectId: self.sus.subject.id, 
      wordId: row.wordId 
     }); 
    } 

Jetzt bin Codierung ich es so:

return self.word && row.wordId == self.word.wordId 
     ? self.$state.go('r.s.s.a.w.w.edit', { 
      subjectId: self.sus.subject.id, 
      wordId: row.wordId 
     }) 
     : self.$state.go('r.s.s.a.w.w', { 
      subjectId: self.sus.subject.id, 
      wordId: row.wordId 
     }); 
    } 

Kann jemand bestätigen, ob dies eine gültige Art und Weise, dies zu tun oder soll ich zurückkehrt, bevor die Selbst . $ state.go?

+1

ich Meinungs bin, dass Ihr vorheriger Code zu leicht war, lesen und verstehen. Warum das ternäre dann? –

+0

Sicher hättest du es einfach OP probiert. – Phil

+0

In den meisten Fällen werden ternär nur verwendet, um zwei verschiedene Werte demselben var zuzuweisen (Beispiel: if (boolean)? True: false), insbesondere für eine Bedingung mit einer Zeile. Es ist nicht gut lesbar, eine "komplexe" Bedingung (in vielen Zeilen) zu konvertieren, wie Sie es getan haben. Bevorzugen Sie eine andere Methode, wie Amadan es vorschlägt. – Aethyn

Antwort

5

Ihre Beispiele sind identisch, soweit ich sehen kann. Ich bevorzuge jedoch die Lesbarkeit des ersten.

In Ihrem speziellen Fall (nicht als allgemeine Lösung), würde ich wahrscheinlich schreiben:

var whereNext = self.word && row.wordId == self.word.wordId 
    ? 'r.s.s.a.w.w.edit' 
    : 'r.s.s.a.w.w'; 

return this.$state.go(whereNext, { 
    subjectId: self.sus.subject.id, 
    wordId: row.wordId 
}); 

oder sogar

var edit = self.word && row.wordId == self.word.wordId ? '.edit' : ''; 

return this.$state.go('r.s.s.a.w.w' + edit, { 
    subjectId: self.sus.subject.id, 
    wordId: row.wordId 
}); 
2

Sieht aus wie your're einige Klammern fehlen:

(self.word && row.wordId == self.word.wordId) 
    ? return this.$state.go('r.s.s.a.w.w.edit', { 
     subjectId: self.sus.subject.id, 
     wordId: row.wordId 
     }) 
    : return this.$state.go('r.s.s.a.w.w', { 
     subjectId: self.sus.subject.id, 
     wordId: row.wordId 
    }); 

Aber ich warum sollten Sie das tun? Dies macht Code weniger lesbar. Und du brauchst es nicht. Sie können "sonst" entfernen:

if (self.word && row.wordId == self.word.wordId) { 
    return this.$state.go('r.s.s.a.w.w.edit', { 
     subjectId: self.sus.subject.id, 
     wordId: row.wordId 
    }); 
} 
return this.$state.go('r.s.s.a.w.w', { 
    subjectId: self.sus.subject.id, 
    wordId: row.wordId 
}); 

Die Funktion kehrt in "if" zurück, so dass sonst nichts benötigt wird.

+0

Die * Klammern * sind unnötig, aber Ihr zweites Beispiel ist viel besser lesbar – Phil

Verwandte Themen