結論というか個人的見解
関心事がそこにないからではないだろうか。
極端な言い回しになるが
利用者はinterfaceを保証してさえいれば
List<T>::size()
の処理コストに興味はない。
Listにしなくてはいけない理由にはならないが
そこまで意識する明確な理由がない。
結果、事足りてるからListでいい。
だから、Listに代入している。
補足というか言い訳
もちろん、商用サービスであれば、PoCや性能試験などで検証しているべきだと思うし
その使い方が正しかったかどうかは別プロセスで検証する必要がある。
動けばいい、というコーディングを推奨する意図はない。
あと、Stream APIが追加されて以降new ArrayList<>()
なんて書く機会が減り
今となってはどーでもいいことなのかもしれない。
読んでくださった方への期待
炎上するような異論反論など、いろんな意見がいただけたら嬉しいです。
背景
今週前半、twitterのバズワードを見ていたら、都心の喫茶店が炎上していた。
皆が何についてどういう印象を持つのかを深掘りしている流れから、
気がつけばクレーマーの特性について調べていた。
(Wikipediaのリンクを辿っていくと、何故か必ず最後に宇宙にたどり着くような感じで。)
その時、ややコメント欄が炎上気味のとあるJavaの記事において、なぜ
ArrayList<T> list = new ArrayList<>();
ではなく、
List<T> list = new ArrayList<>();
なのか、という質問が目についた。
質問された側は
- gitやらOSS上にそんなコード無いでしょ
質問した側は
- 宗教的で理由がないのにそうしている
ということを書いていた。
そのコメント欄の荒れ方から、
当初は「こういうタイプもいるのね…」とスルーしたのだけれど、
次第に「でも確かに…なんでだろうな?」と思い
「同じ質問をされたら自分ならどう答えるか」をアウトプットしたかった。
今となっては、その人はクレーマーではなく、
何気なく書いていたコードに疑問を持つ機会をくださったと感謝しています。
名前は出しませんが、この場を借りてお礼申し上げます。