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 i variable |
x = 5; |
Expression dont le type est le même que le type de la x variable |
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 |
---|---|
|
|
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 : |
---|---|
|
|
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-else
instruction 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-else
instruction :
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-else
instruction :
int age = 25;
int money = age > 30 ? 100 : 50;
Alors, qu'est-ce qu'il vaut mieux utiliser — une if-else
instruction 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-else
instruction.
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");
GO TO FULL VERSION