"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Mantenha a \"verdade vazia\" em mente ao codificar com a API java.util.stream

Mantenha a \"verdade vazia\" em mente ao codificar com a API java.util.stream

Publicado em 2024-11-08
Navegar:164

Keep \

  • Introdução
  • O que é verdade vazia?
    • Declaração do problema
    • Entre na verdade vazia
      • Definição matemática de verdade vazia
    • Por que isso é importante na programação?
    • Referências

Introdução

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.

O que é 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.

Declaração do problema

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 List numbers) {
    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?

Entre na verdade 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.

Definição Matemática de Verdade Vazia

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

Por que isso é importante na programação?

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 List numbers) {
    return !numbers.isEmpty() && numbers.stream().allMatch(integer -> integer % 2 != 0);
  }

Referências

  • Wikipedia: verdade vazia
  • Nota da API na documentação Java:
    • boolean allMatch(Predicado super T> predicado)
    • boolean noneMatch(Predicado super T> predicado)
Declaração de lançamento Este artigo é reproduzido em: https://dev.to/prabhatkjena/keep-vacuous-truth-on-top-of-mind-coding-coding-with-javautilstream-api-4lnb?1 Se houver alguma infração, entre em contato com [email protected] para Delete.
Tutorial mais recente Mais>

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