空の配列問題
「配列のすべての要素が条件を満たすならtrueを返す」ってやつ。
このテーマがTwitterで盛り上がったときにすぐに手元でKotlinの all
any
none
を読み直した。
なるほど、たしかに! と思ったが、 true一択派の圧がすごくて驚いた。
学生時代に少しかじったC言語ではどう書いていただろうか。
要素数が1以上でないときの処理は仕様による、
でも良いと思っていたが、true一択と言わなければセンス無しと判定されるようだ。
こんな風に書かなければならないのかな?
#include<stdio.h>
#include <stdbool.h>
typedef struct {
bool flagA;
} Item;
bool Items_IsAllA( Item items[] , int len ) {
for ( int i = 0; i < len; i++ ) {
if ( ! items[ i ].flagA ) return false;
}
return true;
}
int main() {
Item items1[0];
int len1 = 0;
bool r1 = Items_IsAllA(items1, len1);
Item items2[1];
int len2 = 1;
bool r2 = Items_IsAllA(items2, len2);
Item items3[1];
items3[0].flagA = true;
int len3 = 1;
bool r3 = Items_IsAllA(items3, len3);
printf("r1=%d r2=%d r3=%d \n", r1, r2, r3);
return 0;
}
// r1=1 r2=0 r3=1
先生に、(上司や客に)
「なぜ 配列のすべての要素が条件を満たすならtrueを返す という要求なのに、一つでも条件を満たさない要素があればfalseを返して、それ以外はtrueを返す という処理にしたのですか?」
と訊かれたらなんと答えればよいのだろうか。
「そんなの自明だし、こっちのほうがセンスがよいからです。もっと論理的・数学的思考を身につけてください。」
と言うのだろうか。
それともこう書くべきなのかな?
bool Items_IsAllA( Item items[] , int len ) {
int trueCount = 0;
for ( int i = 0; i < len; i++ ) {
if ( items[ i ].flagA ) trueCount++;
}
return trueCount == len;
}
どちらにせよ 自分と異なる考えを馬鹿にするメンタル の人間は客前には出せないと考える経営者や営業マンは多いんじゃないかな。
客の定義にもよる?
Twitterの反応
例え話で、
「当店の女性従業員は全てノーパンです」という店にいったら従業員は全て男性だった
というのがあって、良いい例えだと思ったし、面白かった。
たしかに店は嘘はついていない。
「こんな時間にツイッターをやらないのが本当に良いプログラマ」
というツイートもあった。
確かに!