きっと Scalaz を使ってねこはる先生が・・・

14
りらっくみゃー @rirakkumya

【緩募:play2.0】play scalaでOptionの値をチェーンさせた場合にどんどん入れ子になっていくのをキレイに書く方法 http://t.co/woTldrG8 関数で外出しすれば見やすくなるけどいけてない #play20 #playframework #scala

2012-04-14 15:50:10
Yusuke KUOKA @mumoshu

@rirakkumya (for (id2 <- Cache.get(id); result <- Cache.get(id2)) yield (Ok(result)) getOrElse (NotFound) とか・・

2012-04-14 15:52:22
りらっくみゃー @rirakkumya

@mumoshu for式はシンプルな時はいいんですが…

2012-04-14 15:55:01
がくぞ @gakuzzzz

もろかぶりしてたwww

2012-04-14 15:56:24
がくぞ @gakuzzzz

for yield の後にメソッドチェーンで処理を繋げられないのがいつもちょっとだけ不満

2012-04-14 15:57:34
りらっくみゃー @rirakkumya

みんなfor式派か。Optionから戻って来た値をチェックして値によってBadRequestを返したい時とかだと、ごちゃごちゃしてきそう

2012-04-14 15:58:03
りらっくみゃー @rirakkumya

みんな反応速くてさすがだ。

2012-04-14 15:59:47
りらっくみゃー @rirakkumya

scalaz派はいないのか!とか言ってみる。

2012-04-14 16:01:46
りらっくみゃー @rirakkumya

@tototoshi これid2はどこから出て来たんですか?

2012-04-14 16:02:24
りらっくみゃー @rirakkumya

@pomu0325 @tototoshi @gakuzzzz 関数合成とかでカッコ良く書ける書き方とかないんですかね…

2012-04-14 16:04:45
がくぞ @gakuzzzz

for式だと途中で分岐ができないんだよね。 ArrowChoice の登場が望まれる

2012-04-14 16:04:57
🐶pomu0325 @pomu0325

@rirakkumya unfilteredのやつはちょっとそれに近いかもですね。とりあえずな時はEitherをyieldしちゃったりします。

2012-04-14 16:07:37
がくぞ @gakuzzzz

Option#fold で解決できるかな?

2012-04-14 16:08:03
りらっくみゃー @rirakkumya

@pomu0325 なるほど、Eitherをyieldすればシンプルになりそうですね。やってみます。

2012-04-14 16:09:19
がくぞ @gakuzzzz

@rirakkumya @pomu0325 @tototoshi 例題として仮に Cache.get(id2) が Null だったら NotFound じゃなくて BadRequest を返すケースでかっこよく書けるか考えて見ますね

2012-04-14 16:10:18
がくぞ @gakuzzzz

Null じゃないよ None だよ

2012-04-14 16:10:41
Yusuke KUOKA @mumoshu

@rirakkumya シンプルじゃない場合は、タプルに対するmatchですかね・・・と思ったら既に tototoshi さんが書かれてましたがw 一応修正版コメントしました

2012-04-14 16:11:11
🐶pomu0325 @pomu0325

@rirakkumya 単純なのならfor内にガード条件書いちゃえば…

2012-04-14 16:15:05
りらっくみゃー @rirakkumya

@pomu0325 ガード条件を外だしすれば複雑になった時もいけそう気がしますね。

2012-04-14 16:17:23
🐶pomu0325 @pomu0325

@rirakkumya エラーメッセージを変えたり…とかやろうとすると面倒そうですけど、単にBadRequestにしちゃうならそれアリですね。

2012-04-14 16:18:12
がくぞ @gakuzzzz

Either 自体は for yield できないよね。 LeftProjection か RightProjection が できるだけで。 途中で分岐したい場合は上手く行かないんだよなー

2012-04-14 16:18:26
1 ・・ 10 次へ