1. Expressions vs déclarations

En Java, il est utile de distinguer deux catégories : les instructions et les expressions . On dit généralement qu'une instruction est exécutée , tandis qu'une expression est dite évaluée . Mais ce n'est pas le plus important.

La principale différence entre une instruction et une expression est que l'évaluation d'une expression a un résultat . Et ce résultat a un type, et il peut être assigné à une variable ou utilisé dans une autre expression.

Exemples:

Code Remarques
int x; Déclaration
(a < 10) Expression dont le type estboolean
i++; Expression dont le type est le même que le type de la ivariable
x = 5; Expression dont le type est le même que le type de la xvariable

Et qu'est-ce que cela nous donne ?

Tout d'abord, nous pouvons tirer parti du fait que de nombreuses instructions sont en fait des expressions (ce qui signifie qu'elles évaluent une valeur). Par exemple, un code comme celui-ci fonctionnera :

Code Remarques
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

Deuxièmement, si nous le voulons, nous pouvons ignorer le résultat de l'évaluation d'une expression.

Code Code où nous ignorons le résultat :
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

Nous ignorons le résultat de l'évaluation d'une expression, par exemple, si l'expression implique de faire quelque chose d'utile, et cette action est ce qui est important pour nous, pas le résultat lui-même.


2. Opérateur ternaire

Ce life hack est déjà plus intéressant que le précédent. Java a un opérateur ternaire spécial . Sa syntaxe est quelque peu similaire à la syntaxe de l' instruction :if-else

Condition ? Expression 1 : Expression 2;

Si la condition est vraie, alors l'expression 1 est évaluée, sinon l'expression 2 est évaluée. La condition est suivie d'un point d'interrogation et les deux expressions sont séparées par deux-points .

La principale différence entre l' opérateur ternaire et une if-elseinstruction est que l'opérateur ternaire est une expression, ce qui signifie que nous pouvons affecter son résultat à quelque chose.

Par exemple, supposons que nous voulions calculer le minimum de deux nombres. En utilisant l'opérateur ternaire, ce code ressemblerait à ceci :

int a = 2;
int b = 3;
int min = a < b ?  a : b;

Ou, disons que vous devez attribuer différentes valeurs à une variable en fonction de certaines conditions. Comment tu fais ça?

Une option consiste à utiliser une if-elseinstruction :

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

La deuxième option consiste à utiliser l' opérateur ternaire , c'est-à-dire un raccourci pour l' if-elseinstruction :

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

Alors, qu'est-ce qu'il vaut mieux utiliser — une if-elseinstruction ou l' opérateur ternaire ? En termes de vitesse d'exécution, il n'y a pas beaucoup de différence. C'est plus une question de lisibilité du code. Et c'est un point très important : le code doit non seulement fonctionner correctement, mais aussi être facile à lire pour les autres programmeurs.

La règle la plus simple est la suivante : si le code tient sur une seule ligne , alors utilisez l' opérateur ternaire ; mais s'il ne tient pas sur une seule ligne, il est préférable d'utiliser une if-elseinstruction.



3. Comparer des nombres réels

Comme mentionné précédemment, vous ne pouvez pas simplement saisir des nombres réels et les comparer. Il est toujours possible que certains chiffres significatifs soient ignorés, provoquant des effets secondaires inattendus.

C'est pourquoi il existe une approche éprouvée. Si deux nombres réels diffèrent d'une très petite valeur, ils peuvent être considérés comme égaux. Exemple:

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");

Mais ce n'est pas tout ce dont nous avons à nous soucier, car la différence entre les chiffres pourrait bien s'avérer négative. Donc, pour que cette approche fonctionne, vous devez comparer non seulement la différence entre les nombres, mais la valeur absolue de la différence entre les nombres :|a-b|

Java a une méthode pour calculer la valeur absolue d'un nombreMath.abs() :

int m = Math.abs(value);

En conséquence, la version corrigée de notre exemple ci-dessus ressemblera à ceci :

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");