読み易さをあまり追求すると宗教になるのは、まぁその通りだと思いますが、私が普段指摘しているのは size() == 0 じゃなくて empty() を使ってくださいね、といった感じの、恐らくあまり反対される方はいらっしゃらないであろう内容が中心です。
2017-09-11 13:38:20ちょっと理解できない。「empty()」より「size() == 0」 の方が読みやすい。わざわざsizeが0である時だけ専用の関数を用意して覚える事を増やすのが嫌い。1つだけならともかくそこここでこのレベルの何もやってない関数が増えるとかなりつらい。 >
2017-09-11 23:28:06@nyaocat size() == 0 でも empty() でも読みやすさ(目に入って理解するまでの時間)はほとんど変わらないと思います。となると違いは修辞的な部分なわけで、そういうのはコード担当者の裁量に任せます。美意識の押し付けになっちゃう。
2017-09-11 23:45:11@nyaocat …まって。その2つ、英語の意味が違う… empty() って言うのは「ボウルのように容量はあるけれど、中身が入っていない」状態の事なので、size() == 1リットルで empty() とかあるし、size() == 0 の場合、empty() は真偽どちらでも良い事に…
2017-09-11 23:56:33size() == 0 でも empty() でも同等の機能であれば個人的にはどちらでもいい気はするけど、1つのコードで両方が混載していると『これ、なにか意味が違うんだろうか…』と勘ぐってしまうような弊害は発生しそう
2017-09-12 09:46:41empty()とsize()==0、利用する文脈によるとしか言えない 何をもって集合がemptyなのかはわからないけどとりあえず空ならOKなら前者、厳密にサイズにまつわる処理をしたいなら後者かな
2017-09-12 09:46:53size()==0 と empty() だと文字数はあまり変わらないからそう思うのでしょうか。find() を使うか、 for と if と break で書くか、という話にしておけば良かったですね。
2017-09-12 09:47:31この size が 0 か判定するのではなく empty を使うというのに同意しない人がわりと居るというのが面白い。size を取得する計算量が定数ではない場合があるから empty があるなら empty を使うのが刷り込まれているし size 使われると違和感ある。
2017-09-12 09:48:14まあ『size() == 0 を empty() になおして』は別におかしくはないけど『empty() を size() == 0 になおして』はおかしいし、そういうことでは
2017-09-12 09:51:12空かどうかが知りたいときに、長さを得るメソッドがsizeであってそのゼロ値がゼロであることを知りたくないので、emptyを使うのがよいと言う
2017-09-12 09:53:18他の文化は知らないが STL の文化においては empty を使うのが自然であるってのは Effective STL あたりから刷り込まれているんだな。この文化圏においては size を使うにはむしろ理由がいるはず。
2017-09-12 09:53:20末尾空白だろうが末尾タブだろうがタブスペース混在だろうがsize()==0だろうがempty()だろうがなんでもいいけど、機能追加とファイル移動とバグ修正とを一気にするな...
2017-09-12 09:55:52@rita0222 はい、もちろんその理由もその通りで正しいのですが、一応元々の話題としては読み易さの話でした。実際、データ構造によってはsize()とempty()でオーダーも変わりうるので、少なくともこの場合は読み易さには関係無く empty() を使うべきですね。
2017-09-12 09:56:55コンパイラの視点からみると empty() は実装しやすい。STLコンテナのデータ構造によって最適化が可能だ。例えば連結リストなら size() は線形時間かかる
2017-09-12 09:59:22分かるけど、「empty()」には利用者の判断が一切入らないのに対して、「size()==0」には利用者の判断が入る。……まあ、この程度で大袈裟な、って話なんだが、利用者の判断が入らない方が、より安全になる。 twitter.com/pleist/status/…
2017-09-12 10:06:47size と empty の話、結局は STL の文脈を共有しているかどうかっていう話になる。 size が定数の場合には empty は不要といっても STL に empty はあるし、STL 的には empty の意味論は明確なのですね。
2017-09-12 10:12:37list.size() も constant time であることが規定された C++11 以降から C++ がはじまっていれば、そもそも empty なんて作らなければ良かったんや、という気持ちは分かる。
2017-09-12 10:17:45list.size() == 0 と list.empty() にそんな読みやすさの違いがあるとは思わないけど絶対にその.size()はO(1)?というのは微妙に気になる
2017-09-12 10:32:11