Previous Up

B.7  Pièges et astuces

Cette section regroupe des astuces de programmation ou corrige des erreurs fréquemment rencontrées.

B.7.1  Sur les caractères

Les codes des caractères de '0' à '9' se suivent, de sorte que les deux trucs suivants s’appliquent. Pour savoir si un caractère c est un chiffre (arabe) :

  '0' <= c && c <= '9'

Il existe aussi une méthode Character.isDigit(char c) qui tient compte de tous les chiffres possibles (en arabe c’est-à-dire indiens, etc.). Pour récupérer la valeur d’un chiffre :

  int i = c - '0' ;

Ici encore il y a des méthodes statiques qui donnent les valeurs de chiffres dans la classe Character.

B.7.2  Opérateurs

Java possède un opérateur ternaire (à trois arguments) l’expression conditionnelle ec ? et : ef. L’expression ec est de type boolean, tandis que le types de et et ef sont identiques. L’expression conditionnelle vaut et si ec vaut true, et ef si ec vaut false. De sorte que l’on peut afficher un booléen ainsi :

// b est un boolean, on veut afficher '+' si b est vrai et '-' autrement.
   System.out.println(b ? '+' : '-') ;

B.7.3  Connecteurs « paresseux »

Les opérateurs || et && sont respectivement la disjonction (ou logique) et la conjonction (et logique), ils sont de la variété dite séquentielle (gauche-droite) ou parfois paresseuse : si évaluer la première condition suffit pour déterminer le résultat, alors la seconde condition n’est pas évaluée. Plus précisément, si dans e1 || e2 (resp. e1 && e2) e1 vaut true (resp. false) , alors e2 n’est pas évaluée, et la disjonction (resp. conjonction) vaut true (resp. false). C’est un idiome de profiter de ce comportement pour écrire des conditions concises. Par exemple, pour savoir si la liste xs contient au moins deux éléments, on peut écrire

   … xs != null && xs.next != null …

Cette expression n’échoue jamais, cas si xs vaut null alors l’accès xs.next n’est pas tenté.

On remarque que les connecteurs && et || peuvent s’exprimer à l’aide d’un seul opérateur : l’opérateur ternaire e1 ? e2 : e3. La conjonction e1 && e2 s’exprime comme e1 ? e2 : false et la disjonction e1 || e2 comme e1 ? true : e2


Previous Up