"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Tenga presente la \"Verdad vacía\" mientras codifica con la API java.util.stream

Tenga presente la \"Verdad vacía\" mientras codifica con la API java.util.stream

Publicado el 2024-11-08
Navegar:382

Keep \

  • Introducción
  • ¿Qué es la verdad vacía?
    • Declaración del problema
    • Introduzca la verdad vacía
      • Definición matemática de verdad vacía
    • ¿Por qué es importante esto en la programación?
    • Referencias

Introducción

¿Alguna vez te has encontrado con un escenario en programación donde necesitas verificar si todos los elementos en una lista o secuencia satisfacen una determinada condición? Este es un patrón común en la codificación, pero ¿qué sucede cuando la lista está vacía? Aquí es donde entra en juego el concepto de verdad vacía.

¿Qué es la verdad vacía?

Antes de profundizar en la definición matemática, comencemos con un ejemplo práctico en código para comprender qué es la verdad vacía.

Declaración del problema

Imagina que tienes la tarea de comprobar si todos los elementos de una lista cumplen una determinada condición. Si lo hacen, realizas una acción específica. Por ejemplo, considere el siguiente fragmento 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);
  }

El tercer ejemplo es particularmente interesante. ¿Por qué devuelve "Todos los números impares" cuando la lista está vacía?

Introduzca la verdad vacía

Este comportamiento es un ejemplo de verdad vacía. En lógica matemática, una afirmación que afirma algo sobre todos los elementos de un conjunto vacío se considera verdadera. Esto se debe a que no hay elementos en el conjunto que contradigan la afirmación.

Definición matemática de verdad vacía

Según Wikipedia:

"Una verdad vacía es una afirmación que afirma que todos los miembros del conjunto vacío tienen una determinada propiedad. Dichas afirmaciones se consideran verdaderas porque no hay contraejemplos en el conjunto vacío."

En otras palabras, cuando decimos: "Todos los elementos del conjunto S tienen la propiedad P", y si S está vacío, esta afirmación es vagamente cierta porque no hay un solo elemento en S que potencialmente pueda violar la propiedad P

¿Por qué es importante esto en la programación?

Comprender la verdad vacía es importante en la programación porque puede afectar la lógica y los resultados de su código, especialmente cuando se trata de colecciones, transmisiones o cualquier escenario donde su entrada podría estar potencialmente vacía.

Conclusión
La próxima vez que escriba una función que verifique si todos los elementos de una lista o secuencia satisfacen una condición, recuerde el concepto de verdad vacía. Explica por qué su código puede comportarse de manera inesperada cuando la entrada está vacía. Ser consciente de esto puede ayudarte a escribir programas más sólidos y predecibles.
Si su requisito de que una lista/secuencia vacía no se evalúe como verdadero, entonces debe considerar una verificación adicional en la lista/secuencia.

  private static boolean allNumbersAreOdd(@Nonnull List numbers) {
    return !numbers.isEmpty() && numbers.stream().allMatch(integer -> integer % 2 != 0);
  }

Referencias

  • Wikipedia: verdad vacía
  • Nota de API en la documentación de Java:
    • boolean allMatch(Predicado super T> predicado)
    • booleano noneMatch(Predicado super T> predicado)
Declaración de liberación Este artículo se reproduce en: https://dev.to/prabhatkjena/keep-vacuous-truth-on-top-of-mind- while-coding-with-javautilstream-api-4lnb?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3