Você já encontrou um cenário de programação em que precisa verificar se todos os elementos de uma lista ou fluxo satisfazem uma determinada condição? Este é um padrão comum na codificação, mas o que acontece quando a lista está vazia? É aqui que entra em jogo o conceito de verdade vazia.
Antes de mergulharmos na definição matemática, vamos começar com um exemplo prático em código para entender o que é a verdade vazia.
Imagine que você tem a tarefa de verificar se todos os elementos de uma lista satisfazem uma determinada condição. Se o fizerem, você executa uma ação específica. Por exemplo, considere o seguinte trecho de código 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 Listnumbers) { return numbers.stream().allMatch(integer -> integer % 2 != 0); }
O terceiro exemplo é particularmente interessante. Por que retorna "Todos os números são ímpares" quando a lista está vazia?
Esse comportamento é um exemplo de verdade vazia. Na lógica matemática, uma afirmação que afirma algo sobre todos os elementos de um conjunto vazio é considerada verdadeira. Isso ocorre porque não há elementos no conjunto que contradigam a afirmação.
De acordo com a Wikipédia:
"Uma verdade vazia é uma afirmação que afirma que todos os membros do conjunto vazio têm uma certa propriedade. Tais afirmações são consideradas verdadeiras porque não há contra-exemplos no conjunto vazio."
Em outras palavras, quando dizemos, "Todos os elementos do conjunto S têm propriedade P", e se S estiver vazio, esta afirmação é vagamente verdadeira porque não há um único elemento em S que possa potencialmente violar a propriedade P
Compreender a verdade vazia é importante na programação porque pode impactar a lógica e os resultados do seu código, especialmente ao lidar com coleções, fluxos ou qualquer cenário onde sua entrada possa estar potencialmente vazia.
Conclusão
Da próxima vez que você escrever uma função que verifica se todos os elementos de uma lista ou fluxo satisfazem uma condição, lembre-se do conceito de verdade vazia. Explica por que seu código pode se comportar de maneira inesperada quando a entrada está vazia. Estar ciente disso pode ajudá-lo a escrever programas mais robustos e previsíveis.
Se você tiver o requisito de uma lista/fluxo vazio que não deve ser avaliado como verdadeiro, será necessário considerar uma verificação adicional na lista/fluxo.
private static boolean allNumbersAreOdd(@Nonnull Listnumbers) { return !numbers.isEmpty() && numbers.stream().allMatch(integer -> integer % 2 != 0); }
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3