CodeGym /Cursos /Sintaxis Java Cero /Life hacks: cómo codificar mejor y más rápido

Life hacks: cómo codificar mejor y más rápido

Sintaxis Java Cero
Nivel 3 , Lección 7
Disponible

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 ivariable
x = 5; Expresión cuyo tipo es el mismo que el tipo de la xvariable

¿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
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

Segundo, si queremos, podemos ignorar el resultado de evaluar una expresión.

Código Código donde ignoramos el resultado:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

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-elsedeclaració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-elsedeclaració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-elsedeclaración:

int age = 25;
int money = age > 30 ? 100 : 50;

Entonces, ¿qué es mejor usar: una if-elsedeclaració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-elsedeclaració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");

Comentarios (10)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Ricardo Ramos Nivel 4, Veracruz, Mexico
18 febrero 2025
Interesante, un gran reto para cambiar el paradigma de programar
Oscar Raygoza Nivel 4, Mexico
6 noviembre 2024
No sabia ese metodo de la comparacion de resta por paso de valores a la funcion Math.abs(x-y)
huidos22 Nivel 4, Blue Bell, mexico
14 septiembre 2024
si se aprende algo nuevo
Pato Nivel 1, México
5 septiembre 2024
En la tarea 310 nada tiene que ver lo que piden con la solución. Después de una hora de reto terminé copiando y pegando la solución.
Denis Nivel 1, Lima
31 agosto 2024
Me parece que no formulan de manera correctas las preguntas o seré yo el equivocado?
Anonymous #11542003 Nivel 10, Spain
26 julio 2024
Vi los comentarios después de que lo había resuelto y perdido como 30 minutos en esa tontería
Lenin Nivel 12 Expert
22 mayo 2024
Tengan cuidado con las tildes, escribanlo tal cual
Luis José Cambero Carballo Nivel 3, Blue Bell, Venezuela
20 abril 2024
Asegúrense de escrbir bien "El número es igual a 5".
Luis José Cambero Carballo Nivel 3, Blue Bell, Venezuela
20 abril 2024
Asegúrense de escrbir bien "El número es igual a 5".
Facundo Cataldo Rogala Nivel 4, Argentina
4 abril 2024
Nice