Ist Ihnen beim Programmieren schon einmal ein Szenario passiert, in dem Sie prüfen müssen, ob alle Elemente in einer Liste oder einem Stream eine bestimmte Bedingung erfüllen? Dies ist ein häufiges Muster beim Codieren, aber was passiert, wenn die Liste leer ist? Hier kommt das Konzept der leeren Wahrheit ins Spiel.
Bevor wir uns mit der mathematischen Definition befassen, beginnen wir mit einem praktischen Beispiel im Code, um zu verstehen, was leere Wahrheit ist.
Stellen Sie sich vor, Sie hätten die Aufgabe zu prüfen, ob alle Elemente in einer Liste eine bestimmte Bedingung erfüllen. Wenn dies der Fall ist, führen Sie eine bestimmte Aktion aus. Betrachten Sie beispielsweise den folgenden Java-Codeausschnitt:
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 Listnumbers) { return numbers.stream().allMatch(integer -> integer % 2 != 0); }
Das dritte Beispiel ist besonders interessant. Warum wird „Alle Zahlen als ungerade“ zurückgegeben, wenn die Liste leer ist?
Dieses Verhalten ist ein Beispiel für leere Wahrheit. In der mathematischen Logik gilt eine Aussage als wahr, die etwas über alle Elemente einer leeren Menge aussagt. Dies liegt daran, dass es in der Menge keine Elemente gibt, die der Aussage widersprechen.
Laut Wikipedia:
„Eine leere Wahrheit ist eine Aussage, die behauptet, dass alle Mitglieder der leeren Menge eine bestimmte Eigenschaft haben. Solche Aussagen gelten als wahr, weil es in der leeren Menge keine Gegenbeispiele gibt.“
Mit anderen Worten, wenn wir sagen: „Alle Elemente der Menge S haben die Eigenschaft P“ und wenn S leer ist, ist diese Aussage vage wahr, weil es in S kein einziges Element gibt, das möglicherweise die Eigenschaft P verletzen könnte
Das Verständnis der leeren Wahrheit ist beim Programmieren wichtig, da es sich auf die Logik und die Ergebnisse Ihres Codes auswirken kann, insbesondere wenn es um Sammlungen, Streams oder andere Szenarien geht, in denen Ihre Eingabe möglicherweise leer sein könnte.
Abschluss
Wenn Sie das nächste Mal eine Funktion schreiben, die prüft, ob alle Elemente in einer Liste oder einem Stream eine Bedingung erfüllen, denken Sie an das Konzept der leeren Wahrheit. Es erklärt, warum sich Ihr Code möglicherweise unerwartet verhält, wenn die Eingabe leer ist. Wenn Sie sich dessen bewusst sind, können Sie robustere und vorhersehbarere Programme schreiben.
Wenn Sie die Anforderung haben, dass eine leere Liste/ein leerer Stream nicht als wahr ausgewertet werden darf, müssen Sie eine zusätzliche Prüfung der Liste/des Streams in Betracht ziehen.
private static boolean allNumbersAreOdd(@Nonnull Listnumbers) { return !numbers.isEmpty() && numbers.stream().allMatch(integer -> integer % 2 != 0); }
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3