web-dev-qa-db-ja.com

CoffeeScriptの三項演算子

条件に応じて値をaに設定する必要があります。

CoffeeScriptでこれを行うための最短の方法は何ですか?

例えば。これは私がJavaScriptでそれをする方法です:

a = true  ? 5 : 10  # => a = 5
a = false ? 5 : 10  # => a = 10
306
evfwcqcg

すべてが式であり、その結果値になるので、if/elseを使用することができます。

a = if true then 5 else 10
a = if false then 5 else 10

式の例についてもっと詳しく知ることができます ここ

528
loganfsmyth
a = if true then 5 else 10
a = if false then 5 else 10 

ドキュメント を参照してください。

67
Paul Oliver

ほとんどの言語でこれは代わりに動作するはずです。

a = true  && 5 || 10
a = false && 5 || 10
21
Alexander Senko

CoffeescriptJavaScriptの3項演算子をサポートしません。これがコーヒースクリプト作者の理由です。

私は三項演算子が次の人と同じぐらい大好きです(実際にはもう少し実際に)が、構文はそれらを良くするものではありません - 彼らはif/elseを単一行に収めることができるので素晴らしいです。式です。

それらの構文は、暗記する魔法のもう一つのちょっとした誤解であり、その言語の他のものと何の類似点もありません。結果が同じで、私はむしろif/elsesを常に同じように見せたい(そして常に式にコンパイルしたい)のです。

したがって、CoffeeScriptでは、else行を含まないif文の場合と同様に、複数行のifでも適切な場合には3項にコンパイルされます。

if sunny   
  go_outside() 
else   
  read_a_book().

if sunny then go_outside() else read_a_book()

どちらも三項になり、どちらも式として使用できます。それは一貫しており、学ぶべき新しい構文はありません。だから、提案をお寄せいただきありがとうございますが、私は "wontfix"としてこのチケットを閉じています。

Githubの問題を参照してください。 https://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802

11
Max Peng

それが主に真の用途であれば、2つのステートメントで書くこともできます。

a = 5
a = 10 if false

さらに可能性が必要な場合は、switchステートメントを使用してください。

a = switch x
  when true then 5
  when false then 10

ブール値でそれは特大かもしれませんが、私はそれが非常に読みやすいと思います。

3
Alinex

複数行バージョン(例えば、各行の後にコメントを追加する必要がある場合):

a = if b # a depends on b
then 5   # b is true 
else 10  # b is false
1
quotesBro

CoffeeScriptには三項演算子がありません。それがドキュメントが言うことです。

あなたはまだのような構文を使用することができます

a = true then 5 else 10

それははるかに明確です。