331

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

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

たとえば、これは私がJavaScriptで行う方法です。

a = true  ? 5 : 10  # => a = 5
a = false ? 5 : 10  # => a = 10
4

8 に答える 8

559

すべてが式であり、結果として値になるため、を使用できますif/else

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

式の例について詳しくは、こちらをご覧ください。

于 2012-04-13T18:14:05.740 に答える
69
a = if true then 5 else 10
a = if false then 5 else 10 

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

于 2012-04-13T18:15:48.143 に答える
23

ほとんどすべての言語で、これは代わりに機能するはずです:

a = true  && 5 || 10
a = false && 5 || 10
于 2013-03-27T15:27:44.080 に答える
16

Coffeescriptはjavascriptの三項演算子をサポートしていません。これがコーヒースクリプトの作者からの理由です:

私は次の人と同じくらい(おそらく実際にはもう少し)三項演算子が大好きですが、構文はそれらを良くするものではありません-それらは1行にif/elseを表現。

それらの構文は、覚えておくべきもう1つの神秘的な魔法であり、この言語の他の言語に類似したものはありません。結果が等しいので、私はむしろif/elses常に同じように見える(そして常に式にコンパイルされる)ことを望んでいます。

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

if sunny   
  go_outside() 
else   
  read_a_book().

if sunny then go_outside() else read_a_book()

どちらも3値になり、どちらも式として使用できます。それは一貫していて、学ぶべき新しい構文はありません。それで、提案に感謝します、しかし私はこのチケットを「wontfix」として閉じます。

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

于 2016-08-23T05:34:50.083 に答える
4

それがほとんど本当の使用であるならば、あなたはそれを2つのステートメントで書くこともできます:

a = 5
a = 10 if false

または、さらに可能性が必要な場合は、switchステートメントを使用します。

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

ブール値を使用すると、サイズが大きすぎる可能性がありますが、非常に読みやすいと思います。

于 2015-08-02T19:57:30.227 に答える
2

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

a = if b # a depends on b
then 5   # b is true 
else 10  # b is false
于 2017-09-18T07:29:15.087 に答える
0

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

次のような構文を引き続き使用できます

a = true then 5 else 10

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

于 2018-08-13T16:21:34.750 に答える
0

quotesBroの回答に似ていますが、thenキーワードはありません。これは、通常の複数行のifステートメントを使用するバージョンです。私にとって、これはうまくフォーマットされています。

この通常のifステートメントを検討してください

if true
    # do stuff
else
    # do stuff

次に、それを割り当てに使用します(ここでも、thenキーワードなしで)

value = if true
    5
else
    10

value = if false
    5
else
    10

これは、通常の3値としてjavascriptにコンパイルされます

value = true ? 5 : 10;
value = false ? 5 : 10;
于 2021-08-26T17:12:29.710 に答える