プログラミングにおいて、リストまたはストリーム内のすべての要素が特定の条件を満たしているかどうかを確認する必要があるシナリオに遭遇したことがありますか?これはコーディングではよくあるパターンですが、リストが空の場合はどうなるのでしょうか?ここで、空虚な真実という概念が登場します。
数学的な定義に入る前に、空虚な真実とは何かを理解するために、コードの実践的な例から始めましょう。
リスト内のすべての要素が特定の条件を満たしているかどうかを確認するというタスクを任されていると想像してください。そうなった場合は、特定のアクションを実行します。たとえば、次の Java コード スニペットを考えてみましょう:
public static void main(String[] args) { // Example - 1, expected to do something if (allNumbersAreOdd(Arrays.asList(1, 3, 5))) { System.out.println("do something 1"); } // Example - 2, NOT expected to do anything because NOT all numbers are odd if (allNumbersAreOdd(Arrays.asList(1, 2, 3, 4, 5))) { System.out.println("do something 2"); } // Example - 3, NOT expected to do anything because list is empty so there is no odd number. /* This is the surprising element which is known as "Vacuous truth" and it will print "do something". * It is applicable to both allMatch(Predicate<? super T> predicate) * and noneMatch(Predicate<? super T> predicate) */ if (allNumbersAreOdd(Collections.emptyList())) { System.out.println("do something 3"); } } private static boolean allNumbersAreOdd(@Nonnull List<Integer> numbers) { return numbers.stream().allMatch(integer -> integer % 2 != 0); }
3 番目の例は特に興味深いです。リストが空のときに「すべての数値が奇数」を返すのはなぜですか?
この行動は空虚な真実の一例です。数学的論理では、空のセットのすべての要素について何かを主張するステートメントは真とみなされます。これは、セット内にステートメントと矛盾する要素がないためです。
ウィキペディアによると:
「空の真実とは、空の集合のすべてのメンバーが特定の特性を持っていると主張するステートメントです。空のセットには反例がないため、そのようなステートメントは真であると見なされます。」
言い換えると、「集合 S のすべての要素はプロパティ P を持っている」と言うとき、S が空の場合、プロパティ P に違反する可能性のある要素は S に 1 つも存在しないため、このステートメントは事実上真です
空虚な真実を理解することは、特にコレクション、ストリーム、または入力が空になる可能性のあるシナリオを扱う場合、コードのロジックと結果に影響を与える可能性があるため、プログラミングにおいて重要です。
結論
次回、リストまたはストリーム内のすべての要素が条件を満たすかどうかをチェックする関数を作成するときは、空虚な真実の概念を思い出してください。これは、入力が空の場合にコードが予期しない動作をする理由を説明しています。これを認識すると、より堅牢で予測可能なプログラムを作成するのに役立ちます。
空のリスト/ストリームを true として評価してはいけないという要件がある場合は、リスト/ストリームの追加チェックを検討する必要があります。
private static boolean allNumbersAreOdd(@Nonnull List<Integer> numbers) { return !numbers.isEmpty() && numbers.stream().allMatch(integer -> integer % 2 != 0); }
以上がjava.util.stream API を使用してコーディングするときは、「空の真実」を念頭に置いてください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。