1. Expresiones vs declaraciones
En Java, es útil distinguir entre dos categorías: sentencias y expresiones . Por lo general, se dice que se ejecuta una declaración , mientras que se dice que se evalúa una expresión . Pero eso no es lo más importante.
La principal diferencia entre un enunciado y una expresión es que evaluar una expresión tiene un resultado . Y este resultado tiene un tipo, y puede asignarse a una variable o usarse en alguna otra expresión.
Ejemplos:
Código | notas |
---|---|
int x; |
Declaración |
(a < 10) |
Expresión cuyo tipo esboolean |
i++; |
Expresión cuyo tipo es el mismo que el tipo de la i variable |
x = 5; |
Expresión cuyo tipo es el mismo que el tipo de la x variable |
¿Y qué nos da esto?
Primero, podemos aprovechar el hecho de que muchas declaraciones son en realidad expresiones (lo que significa que se evalúan como un valor). Por ejemplo, un código como este funcionará:
Código | notas |
---|---|
|
|
Segundo, si queremos, podemos ignorar el resultado de evaluar una expresión.
Código | Código donde ignoramos el resultado: |
---|---|
|
|
Ignoramos el resultado de evaluar una expresión, por ejemplo, si la expresión implica hacer algo útil, y esta acción es lo que nos importa, no el resultado en sí.
2. Operador ternario
Este truco de la vida ya es más interesante que el anterior. Java tiene un operador ternario especial . Su sintaxis es algo similar a la sintaxis de la declaración:if-else
Condition ? Expression 1 : Expression 2;
Si la condición es verdadera, se evalúa la Expresión 1 ; de lo contrario , se evalúa la Expresión 2 . La condición va seguida de un signo de interrogación y las dos expresiones están separadas por dos puntos .
La principal diferencia entre el operador ternario y una if-else
declaración es que el operador ternario es una expresión, lo que significa que podemos asignar su resultado a algo.
Por ejemplo, supongamos que queremos calcular el mínimo de dos números. Usando el operador ternario, este código se vería así:
int a = 2;
int b = 3;
int min = a < b ? a : b;
O, digamos que necesita asignar diferentes valores a una variable dependiendo de alguna condición. ¿Cómo haces eso?
Una opción es usar una if-else
declaración:
int age = 25;
int money;
if (age > 30)
money = 100;
else
money = 50;
La segunda opción es usar el operador ternario , es decir, abreviatura de la if-else
declaración:
int age = 25;
int money = age > 30 ? 100 : 50;
Entonces, ¿qué es mejor usar: una if-else
declaración o el operador ternario ? En términos de velocidad de ejecución, no hay mucha diferencia. Esto es más una cuestión de legibilidad del código. Y este es un punto muy importante: el código no solo debe funcionar correctamente, sino que también debe ser fácil de leer para otros programadores.
La regla más simple es esta: si el código cabe en una línea , entonces use el operador ternario ; pero si no cabe en una línea, entonces es mejor usar una if-else
declaración.
3. Comparar números reales
Como se mencionó anteriormente, no puede simplemente tomar números reales y compararlos. Siempre existe la posibilidad de que se descarten algunos dígitos significativos, lo que provocaría efectos secundarios inesperados.
Es por eso que existe un enfoque probado en el tiempo. Si dos números reales difieren en un valor muy pequeño, entonces pueden considerarse iguales. Ejemplo:
double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
System.out.println("The numbers are equal");
else
System.out.println("The numbers are not equal");
Pero eso no es todo lo que nos debe preocupar, ya que la diferencia entre los números bien puede resultar negativa. Entonces, para que este enfoque funcione, debe comparar no solo la diferencia entre los números, sino también el valor absoluto de la diferencia entre los números:|a-b|
Java tiene un método para calcular el valor absoluto de un número Math.abs()
:
int m = Math.abs(value);
Como resultado, la versión corregida de nuestro ejemplo anterior se verá así:
double a = 1.000001;
double b = 1.000002;
if ( Math.abs(b - a) < 0.0001 )
System.out.println("The numbers are equal");
else
System.out.println("The numbers are not equal");
GO TO FULL VERSION