このツイートを中心に議論が巻き起こっているの目にして面白いなと思った。
「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すかが、良いプログラマかどうかの一つの境目だ
— ふみ (DJ Monad) (@fumieval) May 29, 2023
皆さんはどちら派ですか?
ちなみに私は直感的に true を返すのが自然だと思ったのですが、
案外 false 派も多くて私は少し意外でした。
集合と論理
true を返すのが自然だと思った理由を考えてみます。
配列 A のすべての要素は条件を満たす
この命題の対偶は、
配列 A の要素は少なくともひとつ条件を満たさない
配列 A が空配列のとき、命題の対偶は明らかに 偽 です。つまり、命題は 真 です。 Logical!!
以上から、「配列のすべての要素が条件を満たすなら true を返す」関数
は空配列を渡された時は true を返すのが自然。
と言えるのではないでしょうか?
空集合は任意の集合の部分集合である
これは 空集合の公理 ですね。
上で行った証明は、実はこの公理の証明まんまでした。
こうとも言えます。
空集合の公理に基づいて、配列のすべての要素が条件を満たす これを集合 S と置くと、空集合は集合 S の部分集合なので、
配列のすべての要素が条件を満たすなら true を返す ならば空配列も true ですね。
集合論なんて関係なくケースバイケースで良い
という意見も結構ありました。
とは言うものの、気になる人は気になるでしょうし、
開発メンバーのコンセンサスが得られなかった場合下手したら戦争になりそうです 💥
というか以前私は似たようなコードを目にしてこっそり true に直した記憶があるようなないような 😇