2017-02-28 5 views
3

私は前にこの構文を見てきました。条件が真であれば私は何かしたいと思っています。タイプスクリプトのVoid(条件付き&&アクション)とは

() => void (x === 0 && this.setZero()) 

なぜx === 0 && this.setZero()を無効にしますか? このパターンの名前は何ですか?

Voidは未定義を返しますが、this.setZero()が未定義を返す場合はどうすればよいですか?

() => x === 0 && this.setZero() 

これらはどちらも有効です。ちょうどより安全なボトルでそれをラッピングしていますか?

答えて

3

これは単なるJavaScriptのものです。

voidは、非常に奇妙なJavaScript演算子です。オペランドを評価した結果、undefinedが結果として得られます。だからあなたの

() => void (x === 0 && this.setZero()) 

...常にthis.setZero()x === 0場合)を呼び出すの可能性副作用で、undefinedを返します矢印関数です。

なぜあなたは、ボイドのx === 0 & & this.setZeroを()ラップしていますか?

x === 0がfalseの場合)常に戻りundefinedではなくfalseを返す関数だからかthis.setZero()の結果(x === 0trueある場合)。

このパターンの名前は何ですか?

具体的には1つではないと思います。

() => x === 0 && this.setZero()の代わりにfalseまたはthis.setZero()の結果が返されます。

私はちょうど

() => void (x === 0 && this.setZero()) 

あなたはreturnを使用しない限り、冗長矢印関数は何も返さないので、

() => { x === 0 && this.setZero(); } 

は、まったく同じものをないことに注意してくださいます。別の代替は、次のようになります。

() => { if (x === 0) this.setZero(); } 
+0

それがここで使用されるかもしれない理由を説明するには、この矢印の機能が約束継続中で使用されている可能性がありますし、開発者は、特に* * 'false'のどちらかを返すように望んでいません'this.setZero()'の結果ですが、単純に約束/達成可能性は何もなしで達成されます。 'void 'は、この結果を達成するための非常にコンパクトな方法です。 – cdhowie

+0

@cdhowie:Heh、私はちょうどそれを追加しました(しかし、約束ビットではありません)。この場合、 'void 'は冗長な矢印よりコンパクトであることに注意してください。 –

+2

コンパクトながら、明らかに混乱しています。コードを混同すると、バグやメンテナンスの問題が発生します。冗長にして、細工者に自分のことをさせてもらいましょう。 –