10周年のSPコンテンツ!
14
りらっくみゃー @rirakkumya
【緩募:play2.0】play scalaでOptionの値をチェーンさせた場合にどんどん入れ子になっていくのをキレイに書く方法 http://t.co/woTldrG8 関数で外出しすれば見やすくなるけどいけてない #play20 #playframework #scala
Yusuke KUOKA @mumoshu
@rirakkumya (for (id2 <- Cache.get(id); result <- Cache.get(id2)) yield (Ok(result)) getOrElse (NotFound) とか・・
りらっくみゃー @rirakkumya
@mumoshu for式はシンプルな時はいいんですが…
がくぞ @gakuzzzz
もろかぶりしてたwww
がくぞ @gakuzzzz
for yield の後にメソッドチェーンで処理を繋げられないのがいつもちょっとだけ不満
りらっくみゃー @rirakkumya
みんなfor式派か。Optionから戻って来た値をチェックして値によってBadRequestを返したい時とかだと、ごちゃごちゃしてきそう
りらっくみゃー @rirakkumya
みんな反応速くてさすがだ。
りらっくみゃー @rirakkumya
scalaz派はいないのか!とか言ってみる。
りらっくみゃー @rirakkumya
@tototoshi これid2はどこから出て来たんですか?
りらっくみゃー @rirakkumya
@pomu0325 @tototoshi @gakuzzzz 関数合成とかでカッコ良く書ける書き方とかないんですかね…
がくぞ @gakuzzzz
for式だと途中で分岐ができないんだよね。 ArrowChoice の登場が望まれる
🐶pomu0325 @pomu0325
@rirakkumya unfilteredのやつはちょっとそれに近いかもですね。とりあえずな時はEitherをyieldしちゃったりします。
がくぞ @gakuzzzz
Option#fold で解決できるかな?
りらっくみゃー @rirakkumya
@pomu0325 なるほど、Eitherをyieldすればシンプルになりそうですね。やってみます。
がくぞ @gakuzzzz
@rirakkumya @pomu0325 @tototoshi 例題として仮に Cache.get(id2) が Null だったら NotFound じゃなくて BadRequest を返すケースでかっこよく書けるか考えて見ますね
がくぞ @gakuzzzz
Null じゃないよ None だよ
Yusuke KUOKA @mumoshu
@rirakkumya シンプルじゃない場合は、タプルに対するmatchですかね・・・と思ったら既に tototoshi さんが書かれてましたがw 一応修正版コメントしました
🐶pomu0325 @pomu0325
@rirakkumya 単純なのならfor内にガード条件書いちゃえば…
りらっくみゃー @rirakkumya
@pomu0325 ガード条件を外だしすれば複雑になった時もいけそう気がしますね。
🐶pomu0325 @pomu0325
@rirakkumya エラーメッセージを変えたり…とかやろうとすると面倒そうですけど、単にBadRequestにしちゃうならそれアリですね。
がくぞ @gakuzzzz
Either 自体は for yield できないよね。 LeftProjection か RightProjection が できるだけで。 途中で分岐したい場合は上手く行かないんだよなー
残りを読む(219)

コメント

コメントがまだありません。感想を最初に伝えてみませんか?

ログインして広告を非表示にする
ログインして広告を非表示にする