引数にOptionalを使うことの是非について

18
Koichi Sakata (じゅくちょー) @jyukutyo

Javaでメソッドの引数がOptional<Hoge>型のときでも、やっぱり引数のnullチェックいるよね…

2015-11-20 15:50:00
たろう @ngsw_taro

@jyukutyo メソッドの仕様次第ですが基本的には不要だと思います

2015-11-20 15:53:07
Koichi Sakata (じゅくちょー) @jyukutyo

@ngsw_taro 引数がOptionalだからnullは渡すなよーと呼び出し側に伝わるからでしょうか??

2015-11-20 15:56:06
たろう @ngsw_taro

@jyukutyo 引数としてnullを期待しない仕様であると明示しているにも関わらずnullが渡ってきた(つまり事前条件が満たされていない)場合、メソッド使用者側に全責任があるからです

2015-11-20 15:59:54
Koichi Sakata (じゅくちょー) @jyukutyo

@ngsw_taro なるほど、ありがとうございます!契約によるという感じですね。

2015-11-20 16:01:50
たろう @ngsw_taro

@jyukutyo そうです!逆にnullをOptional.empty()と同様に扱う場合はそれを明記しないと混乱の元になりそうです

2015-11-20 16:02:27
はるじっく @haljik

Optionalを引数に取らない理由としてはこれもあるなぁ。 基本的にはmapを使いって、非決定性を副作用の発生する水際まで非決定性を持ったまま扱う場面でしか使ってない twitter.com/jyukutyo/statu…

2015-11-20 16:18:48
t_yano @t_yano

引数がOptionalであることで、メソッドを「使う側」がうれしい要素が見つからない

2015-11-20 16:34:56
t_yano @t_yano

@t_yano 戻り値がOptionalであることでうれしい要素ってのはあるんだけど。

2015-11-20 16:35:21
はるじっく @haljik

@haljik 日本語がだいぶおかしい…。非決定性を持ったものを、非決定性を保持したまま変換したりして副作用の水際まで運ぶ用途って言いたかった

2015-11-20 16:39:35
t_yano @t_yano

OracleでJava作ってる人のブログかなんかでも、戻り値で使うもんであって引数には使わんって書いてた覚えがあるんだけど、URLみつからん

2015-11-20 16:53:35
t_yano @t_yano

って話を毎回「ぜんぶOptionalにしろ」っていう人と話をしなければならず、非常にめんどくさいので、Effective Javaあたりでドドンって書いて欲しいなーと。

2015-11-20 17:03:03
t_yano @t_yano

Optionalは、実装側が楽をするために利用側に余計な手間をかけさせるためにあるものではないはずだ。

2015-11-20 17:05:51
Yuichi Sakuraba @skrb

@t_yano そういうことをJava SE 7/8 速攻入門に書きましたよ。 amazon.co.jp/dp/4774177385/

2015-11-20 17:08:46
AOE Takashi @aoetk

@t_yano これですねー。Brian Goetzさん自らのコメントですね。 mail.openjdk.java.net/pipermail/jdk8…

2015-11-20 17:11:01
Koichi Sakata (じゅくちょー) @jyukutyo

ちょっと恥ずかしく思いながらつぶやいた内容だったのだけれど、すごく知見が得られて、考えを教えてくださっているみなさんありがとうございます。 > 引数がOptional/Option

2015-11-20 17:14:00
山本ユースケ @yusuke

@zephiransas @jyukutyo 「Optionalは引数が空になる可能性を示唆するためのものであって、他の目的での利用は一切意図していない」とOracleの中の人が断言してます → stackoverflow.com/questions/2454…

2015-11-20 17:39:50
YOSHIDA Takafumi @zephiransas

@yusuke つまり引数としてのOptionalの利用は想定されていない・・・?

2015-11-20 17:47:37
YOSHIDA Takafumi @zephiransas

It was never intended for Optional to be used other ways, such as for optional method arguments からは引数に使うな、って意味な気がする・・・

2015-11-20 17:48:20
山本ユースケ @yusuke

@zephiransas はい、戻り値用に設計されたもので、引数やフィールドに使うものじゃない

2015-11-20 17:49:02
YOSHIDA Takafumi @zephiransas

@yusuke よかった。自分の理解と合ってますw

2015-11-20 17:49:38
YOSHIDA Takafumi @zephiransas

Optional引数については、レビュー時にホントに必要かどうか、吟味する必要がありそうですな

2015-11-20 17:53:10