Articles taggés opérateur conditionnel
[C#] Utilisation de l’opérateur ? (opérateur ternaire/conditionnel)
0L’opérateur ternaire (aussi appelé opérateur conditionnel) vous connaissez ? Il s’utilise avec le point d’interrogation et permet en gros d’écrire des tests sur une seule ligne. Et il peut s’avérer parfois très pratique ! Démonstration :
conditionA ? retourTrue : retourFalse;
Si la conditionA est respectée (test == true) alors c’est retourTrue qui sera retourné, si la conditionA est fausse alors c’est retourFalse qui sera retourné ! On pourrait très bien aussi écrire la même chose à l’aide d’un IF/ELSE plus classique :
if(conditionA) { return retourTrue; } else { return retourFalse; } |
L’intérêt de l’opérateur ternaire est que l’on va pouvoir tout écrire sur la même ligne, et donc insérer des tests directement à des endroits où l’on n’aurait pas pu avec le classique IF/ELSE. La limite de la ternaire se situe dans le fait qu’elle doit nécessairement retourner une valeur, là ou un block IF/ELSE classique pourrait exécuter tout un bout de code ! Notez qu’il est tout à fait possible d’imbriquer plusieurs ternaires les unes dans les autres (TernaireCeption) afin d’obtenir un bout de code à la maintenabilité plus que douteuse !
Comme un exemple est toujours plus parlant :
int[] _productTypeID = GetProductTypeChecked(); var _products = from _product in db.PRODUCTs where (_productTypeID.Count() > 0 ? _productTypeID.Contains(_product.TypeID) : true) select _product; |
Voilà pour ce petit bout de code, imaginons que l’on souhaite retourner tous les produits d’une base tout en ayant la possibilité de filtrer par le type de produit. Si des Types de produit ont été “checkés” alors la clause where contiendra le filtre sur le Type, sinon la clause Where sera tout simplement “where true” et donc sera sans effet.
Et bien ici on réduit quand même grandement le nombre de lignes à produire en insérant le test directement dans la requête LinQ. Voilà ce que l’on aurait eu à coder avec un test normal :
int[] _productTypeID = GetProductTypeChecked(); if (_productTypeID.Count() > 0) { var _products = from _product in db.PRODUCTs where _productTypeID.Contains(_product.TypeID) select _product; } else { var _products = from _product in db.PRODUCTs select _product; } |
C’est pas très violent ici car le code est très basique, mais dans certain cas, c’est tout de même vraiment pratique alors pensez à les utiliser ! A noter que cet opérateur existe aussi en PHP et en Java !!

Commentaires récents