web-dev-qa-db-ja.com

coffeescript try / catchの短い表記

私は時々次のようなコードを書きます:

try doSomething()
catch e
  handleError e

これは、すてきでクリーンなcoffeescriptコードがどのように見えるべきかではありません。

書く方法はありますか:

try doSomething()
catch e handleError e   #<-- will not compile

これにより、try/catchステートメントのコード行の約33%が節約されます;)

23
Juve

Try/catchワンライナーの記述は、thenキーワードを使用してif-thenワンライナーまたはループワンライナーのように機能します。

try doSomething()
catch e then handleError e
finally cleanUp()

必要に応じて、それを1行で記述することもできます。

try doSomething() catch e then handleError e finally cleanUp()
45
Juve

https://github.com/jashkenas/coffeescript/issues/241 からのクロスポスト

FWIW、私はあなたが書くことができることを発見しました

try
   compute something
catch error
    handle error 
unless error?
    handle success

これは、CSがcatch句の変数を周囲のスコープに入れるので可能ですが、JSはこれを行いません。 unless error?は、その位置にあるelse(これはif節ではありません)とcontinue(これはループではありません)のどちらよりも明確です。

ワンライナーを主張する人は書くことさえできます

try compute something catch error then handle error unless error? then handle success

これはややクールでやや読みにくいです。

もちろん、finally句はunlessの前に前に移動する必要があります。

1
John Frazer