IF |
Si |
---|---|
ISO C99 |
Syntaxe
statement := if ( condition ) statement | if ( condition ) statement else statement condition ::= expression | type-specifier-seq declarator = assignment-expr |
Paramètres
Nom | Description |
---|---|
condition | Ce paramètre permet d'indiquer une condition vrai |
statement | Ce paramètre permet d'indiquer une instruction. |
type-specifier-seq | Ce paramètre permet d'indiquer un spécificateur de type séquentiel. |
Description
Ce mot réservé permet d'effectuer le traitement d'une condition.
Remarques
- Test répétitif : Si vous souhaitez répéter le même test plusieurs fois, il sera préférable d'utiliser une instruction boucle comme «while» plutôt qu'une instruction «goto».
- Si imbriqué : Si vous avez une redondance de «if» comme ceci «if(conditionA) if(conditionB) if(conditionC)», il est préférable d'utiliser un opérateur entre chacune de vos conditions comme ceci «if((conditionA) && (conditionB) && (conditionC))» afin d'augmenter la lisibilité de votre code source et d'offrir une meilleur chance au compilateur d'effectuer des optimisations de performances appropriés.
- Évaluation d'un cas : Si vous évaluer plusieurs fois la même expression avec des valeurs différentes, vous devriez plutôt utiliser le mot réservé «switch».
- Propreté du code : En général, lorsqu'on a une seule instruction a exécuter, si une condition est vrai, on met cette instruction sur la même ligne tandis que lorsqu'on a plusieurs instructions, on ouvre des accolades et on met les instructions sur plusieurs lignes. Toutefois, mettre inutilement des accolades lorsqu'une seule instruction est présente augmente considérablement le nombre de lignes que vous utilisez et le code source peut devenir aussi illisible dans le sens verticales qu'il l'était dans le sens horizontale au début. Donc, il est totalement faux qu'il faut toujours mettre votre condition sur plusieurs lignes pour ce genre de raison, mais il y aura toujours des adeptes pour le gaspillage d'espace, peu importe la raison qu'on leur donnera. Il est a noté que le compilateur accepte aussi bien les syntaxes sur une seule ligne que sur plusieurs lignes.
Bonnes pratiques
Lorsque vous avez plusieurs valeurs différentes à évaluer avec la même condition comme ceci :
Le code devient progressivement moins claire et peut également amener un certain lot d'erreurs comme les omissions de double égalité. Par contre, avec un mot réservé switch, le code devient plus claire et beaucoup plus optimale lors de sa compilation :
Si vous devez comparer une valeur immédiate dans votre test, il est préférable de mettre la valeur avant plutôt qu'après l'opérateur. Ainsi, c'est une mauvaise pratique :
Car si vous oubliez de mettre un symbole égale après l'expression, vous n'aurez pas d'erreur mais votre test ne donnera pas le résultat que vous souhaitez. Voir l'exemple suivant :
Ainsi, lorsque l'interpréteur PHP constate l'expression suivante «if($a = 1)», il commence par fixer la valeur de la variable «$a» à la valeur 1, ensuite puisque l'expression est déjà vrai, il affichera le message «TEST» de tout de façon même si la valeur est indéfini ou qu'elle vaut 45 ! Pour cette raison, il est recommander d'inverser lors valeur immédiate et la variable car le compilateur retournera une erreur si vous oubliez de mettre un symbole égale «=». Voici la bonne pratique :
Exemples
Cet exemple permet de tester une condition vrai :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- if( 1 ) {
- printf("La condition est vrai\n");
- }
- return 0;
- }
on obtiendra le résultat suivant :
La condition est vraiL'exemple suivant permet de faire des combinaisons de tests «ET LOGIQUE» ou «OU LOGIQUE» avec une instruction if :
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- int a = 1, b = 2;
- // A = 1 ET B = 2 ?
- if((1 == a)&&(2 == b)) {
- printf("A = 1 et B = 2\n");
- } else {
- printf("A != 1 ou B != 2\n");
- }
- // A = 1 OU B = 3 ?
- if((1 == a)||(3 == b)) {
- printf("A = 1 ou B = 3\n");
- } else {
- printf("A != 1 et B != 3\n");
- }
- return 0;
- }
on obtiendra le résultat suivant :
A = 1 et B = 2A = 1 ou B = 3
Voir également
Langage de programmation - C - Les instructions conditionnelles
Langage de programmation - C - Références de mots réservés (mots clefs) - else