CoffeeScriptを使用して何かを返さない方法はありますか?


116

CoffeeScriptは自動的にスコープの最後の項目を返すようです。この機能を回避できますか?


なぜあなたはしたいですか?必要なときに戻り値を破棄できませんか?
Chris

11
@Chris:意味のある戻り値がない場合は、最後のステートメントの結果であることが何であれリークすることは良い考えではありません。

11
ループの戻り値が使用される場合(またはそれが関数の最後の式の場合)のCoffeeScriptは、アレイ内の各反復の結果を収集することができるように、これは、あまりにもwhileループ/用内包/のパフォーマンスへの影響を有することができ、@クリス
アルノールブラン

1
私はちょうどこの問題を建設業者に抱えていました。コンストラクタの最後の行で関数を定義しました。したがって、これは私の「クラス関数」の代わりに返されました。これを明示的に返さなければなりませんでした。これは問題になる可能性があることを言っているだけです。
Markus

回答:


150

明示的に何も返さないか、関数の最後で式が未定義と評価されるようにする必要があります。

fun = ->
    doSomething()
    return

または:

fun = ->
    doSomething()
    undefined

これは、内包表記を使用するときにドキュメントが推奨するものです。

これらの場合、関数の下部に trueなどの意味のある戻り値またはnullを追加することにより、誤って理解の結果を返さないように注意してください。


ただし、次のようなラッパーを作成できます。

voidFun = (fun) ->
    ->
        fun(arguments...)
        return

(ここのスプラット演算子に注意してください(...))

関数を定義するときは、次のように使用します。

fun = voidFun ->
    doSomething()
    doSomethingElse()

またはこのように:

fun = voidFun(->
    doSomething()
    doSomethingElse()
)

この有益な回答をありがとうございます。私もコーヒースクリプトを学んでいるので、私もこれについて疑問に思っていました。何が最良の選択であるか、または値の戻りを防ぐときに最悪の選択が何であるかについていくつかの光を当てることができるかどうか私は興味がありますか?具体的には、私はオプションのいずれかを追加していると言われているreturnundefinedまたはnull私の関数の終わりに。ただし、null何らかの理由で追加するのは間違っているようです。3つのうち最悪の選択だと思いますか?
stefmikhail 2012年

2
JavaScriptでは、returnステートメントのない関数(または空のreturnステートメント)は未定義を返すため、最良のオプションは空のreturnを追加するかundfined、末尾にを残すことです。空のreturnステートメントを使用すると、関数の最後にを残すよりも何も返されないことを表すように見えるundefinedため、空returnの方がより良いオプションのようです。
Arnaud Le Blanc

2
の代わりにfun(arguments...)、呼び出す方が良いでしょうfun.apply(this, arguments)
ミゲルマデロ2013

4
実際、「return」と「undefined」は異なるJavaScriptを生成します。coffeescript.orgで「Try Coffeescript」を使用すると、コーヒースクリプトに「return」を明示的に含めると、JavaScriptからの戻りが削除されることがわかります。一方、「undefined」では、JavaScript関数は「return void 0;」で終わります。
Daniel

1
内部関数はパフォーマンス低下の原因となる可能性のある何でも返すのではないかと思うので、voidFunに注意する必要があると思います。
AturSams 2014年

10

はい、return関数の最後の行はaです。

例えば、

answer = () ->
  42

extrovert = (question) -> 
  answer()

introvert = (question) ->
  x = answer()
  # contemplate about the answer x
  return 

コーヒーがコンパイルされるjsを確認したい場合は、http://bit.ly/1enKdRlを試してください。(私は私の例のためにcoffeescript reduxを使用しました)


1
この回答は、トップ投票の回答にすでにそこにあるものとは別に価値を追加しないので、反対投票されたと思います。これは、この回答の2年前にも発生します。
kumarharsh 2015年

5

ただ楽しいもの(ctional)

suppressed = _.compose Function.prototype, -> 'do your stuff'

Function.prototypeそれ自体は常に何も返さない関数です。composeを使用して戻り値をこのブラックホールにパイプすることができ、合成された関数は何も返しません。



-1

CoffeeScriptの関数は常に何かを返す必要があるようですnull。Cではvoid、戻り値の型があります。 ->、空の関数はにコンパイルされる(function() {})ので、何も返さない唯一の関数です。


それは真実ではない。return;C、JavaScript、CoffeeScriptで動作し、void値を返します。
yyny 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.