size() == 0とempty() はどちらを使うべきか?の様々なご意見まとめ

個人的に気になったので後日読み返すためのメモです。
17
🎀にゃおきゃっと🐈Nyaocat🎀 @nyaocat

読み易さをあまり追求すると宗教になるのは、まぁその通りだと思いますが、私が普段指摘しているのは size() == 0 じゃなくて empty() を使ってくださいね、といった感じの、恐らくあまり反対される方はいらっしゃらないであろう内容が中心です。

2017-09-11 13:38:20
ボストン No.00 @chaco_LONI

sizeとemptyはSTLの話ならそもそもみやすさとかじゃなくて処理不可に直結する大問題なんだけど

2017-09-11 13:39:59
このツイートは権利者によって削除されています。
雷更新世 @pleist

ちょっと理解できない。「empty()」より「size() == 0」 の方が読みやすい。わざわざsizeが0である時だけ専用の関数を用意して覚える事を増やすのが嫌い。1つだけならともかくそこここでこのレベルの何もやってない関数が増えるとかなりつらい。 >

2017-09-11 23:28:06
雷更新世 @pleist

あと、読みにくさの他に書きにくさもある。「size」に加えて「empty」という関数を覚えないとプログラムが書けない。

2017-09-11 23:39:53
だい @dais197x

@nyaocat size() == 0 でも empty() でも読みやすさ(目に入って理解するまでの時間)はほとんど変わらないと思います。となると違いは修辞的な部分なわけで、そういうのはコード担当者の裁量に任せます。美意識の押し付けになっちゃう。

2017-09-11 23:45:11
fjのYog教祖様 @fjs_kyousosama

@nyaocat …まって。その2つ、英語の意味が違う… empty() って言うのは「ボウルのように容量はあるけれど、中身が入っていない」状態の事なので、size() == 1リットルで empty() とかあるし、size() == 0 の場合、empty() は真偽どちらでも良い事に…

2017-09-11 23:56:33
🎀にゃおきゃっと🐈Nyaocat🎀 @nyaocat

size() == 0 を empty() にしろと言うのは美意識の押し付けだそうです

2017-09-12 09:41:35
バンビちゃん@実際存在しません @pink_bangbi

size() == 0 でも empty() でも同等の機能であれば個人的にはどちらでもいい気はするけど、1つのコードで両方が混載していると『これ、なにか意味が違うんだろうか…』と勘ぐってしまうような弊害は発生しそう

2017-09-12 09:46:41
ぜろゆ🍥 @zer0_u

empty()とsize()==0、利用する文脈によるとしか言えない 何をもって集合がemptyなのかはわからないけどとりあえず空ならOKなら前者、厳密にサイズにまつわる処理をしたいなら後者かな

2017-09-12 09:46:53
🎀にゃおきゃっと🐈Nyaocat🎀 @nyaocat

size()==0 と empty() だと文字数はあまり変わらないからそう思うのでしょうか。find() を使うか、 for と if と break で書くか、という話にしておけば良かったですね。

2017-09-12 09:47:31
_ @apstndb

この size が 0 か判定するのではなく empty を使うというのに同意しない人がわりと居るというのが面白い。size を取得する計算量が定数ではない場合があるから empty があるなら empty を使うのが刷り込まれているし size 使われると違和感ある。

2017-09-12 09:48:14
バンビちゃん@実際存在しません @pink_bangbi

まあ『size() == 0 を empty() になおして』は別におかしくはないけど『empty() を size() == 0 になおして』はおかしいし、そういうことでは

2017-09-12 09:51:12
バンビちゃん@実際存在しません @pink_bangbi

そもそも size() == 0 と empty() は可読性の問題とはちょっと違う気はする

2017-09-12 09:52:41
berlysia💭❤️‍🔥 @berlysia

空かどうかが知りたいときに、長さを得るメソッドがsizeであってそのゼロ値がゼロであることを知りたくないので、emptyを使うのがよいと言う

2017-09-12 09:53:18
_ @apstndb

他の文化は知らないが STL の文化においては empty を使うのが自然であるってのは Effective STL あたりから刷り込まれているんだな。この文化圏においては size を使うにはむしろ理由がいるはず。

2017-09-12 09:53:20
🎹 @p_ck_

Rubyだと x.size == 0 よりも x.empty? の方が速かった気はする

2017-09-12 09:53:51
にゃははー仙人 @Flast_RO

末尾空白だろうが末尾タブだろうがタブスペース混在だろうがsize()==0だろうがempty()だろうがなんでもいいけど、機能追加とファイル移動とバグ修正とを一気にするな...

2017-09-12 09:55:52
🎀にゃおきゃっと🐈Nyaocat🎀 @nyaocat

@rita0222 はい、もちろんその理由もその通りで正しいのですが、一応元々の話題としては読み易さの話でした。実際、データ構造によってはsize()とempty()でオーダーも変わりうるので、少なくともこの場合は読み易さには関係無く empty() を使うべきですね。

2017-09-12 09:56:55
ogukei(焼き魚) @ogukei_t

コンパイラの視点からみると empty() は実装しやすい。STLコンテナのデータ構造によって最適化が可能だ。例えば連結リストなら size() は線形時間かかる

2017-09-12 09:59:22
しぐれ @shigure954rr

size() == 0より断然empty()のほうが読みやすいと思うけどなぁ

2017-09-12 10:02:57
STB a.k.a. さとまる @stb_nissie

分かるけど、「empty()」には利用者の判断が一切入らないのに対して、「size()==0」には利用者の判断が入る。……まあ、この程度で大袈裟な、って話なんだが、利用者の判断が入らない方が、より安全になる。 twitter.com/pleist/status/…

2017-09-12 10:06:47
_ @apstndb

size と empty の話、結局は STL の文脈を共有しているかどうかっていう話になる。 size が定数の場合には empty は不要といっても STL に empty はあるし、STL 的には empty の意味論は明確なのですね。

2017-09-12 10:12:37
_ @apstndb

list.size() も constant time であることが規定された C++11 以降から C++ がはじまっていれば、そもそも empty なんて作らなければ良かったんや、という気持ちは分かる。

2017-09-12 10:17:45
いわた @wonderful_panda

list.size() == 0 と list.empty() にそんな読みやすさの違いがあるとは思わないけど絶対にその.size()はO(1)?というのは微妙に気になる

2017-09-12 10:32:11
1 ・・ 5 次へ