「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すかが、良いプログラマかどうかの一つの境目だ
スレッド
新しいツイートを表示
会話
「メールのすべての添付ファイルが安全であれば受信箱に入れる」という処理において、添付ファイルのないメールはどうすべきかを考えれば、自然と答えがイメージしやすい
返信を表示
空の配列では常にtrueを返すべきで、大概の関数はそうなっているとは思う。
が、例外を返す関数があったとして、それはおかしい、とは自分には言えないかも。
falseは違うかなあ、という気はする。
JavaScriptリファレンスをみると…
every() メソッド: 『このメソッドを空の配列に対して呼び出すと、無条件に true を返します。』
some() メソッド: 『このメソッドは空の配列ではあらゆる条件式に対して false を返します。』
関数にはロジックを閉じごめるべきで、
「全ての要素が満たす」ならtrueにすべき。
「ある要素が満たす」ならfalseにすべき。
こうしないと集合として考えた時におかしな動作になる。
空の配列の時に特定の動作を処理させたい場合は、空の配列判定をしてから特定の処理をさせる。
単関数として機能を提供する側なら、False返します。
条件を満たすなら
満たすものが存在しなければ、この文言が成り立たないから。メール添付の話例が出てるけど、用途特定ならそもそも関数名が決まるし、仕様も明示されるので、後付ってだけ。
なんで境目と言えるのかな。
わからない。
どうやらこれが真の答えっぽいのでリプぶら下げておきます。
引用ツイート
ども
@sore_yamete
返信先: @KeiKei47585517さん
女は...最初に「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すのか聞いて欲しいの...
そして、その答えをどうすれば良いのか一緒に考えて欲しいの...
それが答え...
自分がその配列をどういう風に使いたいかによる。配列が空なら問答無用でtrue/falseのどちらかを返すなんて事はないと思います。
(仕様が決まってるなら仕様に従う)
「与えられた文字型配列の全要素が数字だった時にtrueを返す関数」を定義する時、この関数はバリデーションチェックである可能性があるので、長さゼロの配列でtrueを返すと決めつけてしまうのは良くないプログラマですね。
基本的には関数名を何にするか、その名前としてどの動作が自然なのは何かによって決まるべきだろう
判断の根拠は関数名の英語における意味による
プログラミングは人間が理解できるように書くものなので
基本的にはtrueなんだろうけどfalseの方がロジック組みやすいとかない?
引用ツイート
ふみ a.k.a.DJ Monad
@fumieval
「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すかが、良いプログラマかどうかの一つの境目だ
このスレッドを表示
関数の要求仕様次第だと思います。
「条件を満たす/条件に反する配列であるかをチェックする」関数なら、該当なしで、false、0、フラグOFFを返す。
「空配列も含めて、条件に反する要素をチェックする」関数ならtrue、1、フラグONを返す。
だいたいはtrueだと思うけど、すべての条件を満たし、かつ要素が1つ以上という条件ならfalse(文にするとあたりまえだけど)
たとえば、有効な証明書が1つ以上必要なとき。
複合条件だからtrueでもヨシと考えられるけど、1つ以上という条件が明示されていないと気づかないでバグになる可能性がある。
いわゆるVacious Truth現象ですね。数学か関数型プログラミングをかじると、trueを返すことに納得がいくようになるように思います(自分は非直感的だと思っていたけどそのうち納得するようになった)。
Twitterを使ってみよう
今すぐ登録して、タイムラインをカスタマイズしましょう。
トレンド
いまどうしてる?
日本のトレンド
ノーパンしゃぶしゃぶ
5,842件のツイート
日本のトレンド
ドラフト指名
2,265件のツイート