CoffeeScriptによるparamsでsetTimeoutを書く方法


回答:


214

関数の最後の引数としてコールバックを使用するのは便利な規則だと思います。これは通常、たとえばNode.js APIの場合です。それを念頭に置いて:

delay = (ms, func) -> setTimeout func, ms

delay 1000, -> something param

確かに、これはsetTimeoutあなたが行うすべてに余分な関数呼び出しのオーバーヘッドを追加します。しかし、今日のJSインタープリターでは、毎秒数千回実行しない限り、パフォーマンス上の問題はほとんどありません。(とにかく、毎秒数千のタイムアウトを設定して何をしていますか?)

もちろん、より簡単な方法は、単にコールバックに名前を付けることです。これはとにかく読みやすいコードを生成する傾向があります(jashkenasはこのイディオムの大ファンです)。

callback = -> something param
setTimeout callback, 1000

ネストされたコールバックが必要でない限り、すばらしい
スティーブン・プリビリンスキー2014

184
setTimeout ( ->
  something param
), 1000

括弧はオプションですが、コンマで行を始めるのは面倒に思えました。


かっこを取り出して、コーヒーを飲みましょう〜)
ビリームーン

4
かっこでコンパイルできません。私はそれらを削除し、コンマで行を開始する必要があり、それは魅力のように機能しました。
Jeremy Thille、2014

括弧を使用すると、これを1行で行うこともできます。

1
@JeremyThilleは、開始の括弧とその間のスペースsetTimeoutが重要であることに注意してください。そこのスペースは、括弧がsetTimeoutへの最初のパラメーターとしてクロージャーを囲んでいることを意味します。それがtの直後にある場合、coffescriptは括弧が両方のパラメーターを囲むことを期待します。
jankins 2015

67
setTimeout -> 
  something param
, 1000

これは、無名関数のみを使用する場合に最適です。
Alex K

また、名前付き関数の場合、setTimeout namedFunc、5000
Dirk Smaverson、2013

空白が重要であることに注意してください。呼び出しは、上記とまったく同じ間隔で配置する必要があります。場合は、something param同じ行にあるsetTimeoutそれは、異なる解析されます。
henrebotha 2017

46

これはほぼ同等の翻訳になります(@Joel Muellerに感謝):

setTimeout (-> something param), 1000

匿名関数はsomething(param)スニペットのように未定義ではなく呼び出しの結果を返すため、これは正確な変換ではないことに注意してください。


1
括弧/セミコロンが多すぎます!これはCoffeeScriptです。余分な括弧を取り除くことはポイントの半分です。setTimeout (() -> something param), 1000
Joel Mueller

ニコラスは、空の括弧もオプションであることを指摘しています。
Joel Mueller


3

別のオプション:

setTimeout(
    -> something param
    1000
)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.