Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

418
Vistas
Cómo omitir la evaluación de la parte restante de la expresión aritmética después de 0 * ... en Java

En expresiones lógicas, la parte restante se omitiría si no es necesaria

 boolean b = false && checkSomething( something) //checkSomething() doesn't get called

¿Cuál es una buena manera de lograr lo mismo con expresiones aritméticas?

 int i = 0 * calculateSomethig ( something )

Es posible agregar ifs antes de * . Pero, ¿hay una forma más elegante de resolver este problema? Sin agregar muchas cosas a la expresión, para que la expresión en sí se vea lo más cerca posible del original

¿Por qué no quiero usar ifs? desde

 return calculateA() * calculateB()

se volverá voluminoso y poco claro

 int result int a = calculateA(); if (a!=0) { result = a*calculateB() }else{ result = 0 } return result
  • 8 líneas de código en lugar de 1,
  • esas expresiones pueden ser más complejas que a*b
  • esas expresiones representan la lógica comercial, por lo que quiero que sean claras y fáciles de leer
  • puede haber un montón de ellos

¿Por qué me molesto con esto en absoluto? Porque los métodos de cálculo pueden ser costosos

  • utiliza valores de otros lugares, donde se realizan búsquedas y clasificaciones
  • muchas de esas expresiones se pueden ejecutar a la vez (después del evento del usuario y el usuario debería ver el resultado "instantáneamente"
  • P(*0 en expresión) >0.5
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

&& y || se denominan operadores de cortocircuito porque no evalúan si la JVM encontrará el valor de la expresión completa sin evaluar la expresión completa. Por ejemplo, la JVM no tiene que evaluar la segunda parte de la siguiente expresión para indicar que se evalúa como true :

 6 == (2 + 4) || 8 == 9

La JVM no tiene que evaluar todas las expresiones siguientes para indicar que se evalúa como false :

 9 == 8 && 7 == 7

El operador de multiplicación (*) no es un operador de cortocircuito. Y así, no se comporta de esa manera. Puede hacer esto como mencionó usando declaraciones if . No hay una forma predefinida de hacer esto.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede crear una estructura que use lambdas para evaluar sus argumentos de forma perezosa:

 class LazyMul implements IntSupplier { private final IntSupplier [] args; private LazyMul(IntSupplier[] args) { //argument checking omitted for brevity :) this.args = args; } public static LazyMul of(IntSupplier ... args) { return new LazyMul(args); } @Override public int getAsInt() { int res = 1; for (IntSupplier arg: args) { res *= arg.getAsInt(); if (res == 0) break; } return res; } }

Por supuesto, esto es aún más largo, pero usarlo es tan simple como LazyMul.of(this::calculateA, this::calculateB) , por lo que si lo usa varias veces, es mejor que tener un if cada vez.

Desafortunadamente, con expresiones complicadas (particularmente anidadas), la legibilidad sufre, pero estas son las limitaciones de Java como lenguaje.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda