78 votes

Point d'interrogation et deux points dans une déclaration. Qu'est-ce que cela signifie ?

Que font les points d'interrogation ( ? ) et deux-points ( : ) signifie ?

((OperationURL[1] == "GET") ? GetRequestSignature() : "")

Elle apparaît dans la déclaration suivante :

string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");

119voto

Anthony Pegram Points 58528

C'est l'expression de l'opérateur conditionnel.

(condition) ? [true path] : [false path];

Par exemple

 string value = someBooleanExpression ? "Alpha" : "Beta";

Ainsi, si l'expression booléenne est vraie, la valeur contiendra "Alpha", sinon, elle contiendra "Beta".

Pour un piège commun dans lequel les gens tombent, voir cette question en el Wiki de balises C# .

2 votes

Value == someBooleanExpression

8 votes

@YuZhang : non, c'est correct. Exemple : string value = 1 == 2 ? "Alpha" : "Beta" ; -> la valeur contiendra "Beta".

15voto

Oded Points 271275

C'est le ternaire opérateur conditionnel .

Si la condition contenue dans la parenthèse précédant l'élément ? est vrai, il renvoie la valeur située à gauche de l'élément : sinon la valeur à droite.

7voto

Spooks Points 2667

C'est un opérateur ternaire, ou la forme abrégée de if..else .

condition ? valeur si vrai : valeur si faux

Voir Microsoft Docs | ?: opérateur (référence C#) .

1voto

Kimtho6 Points 3897
string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");

peut être traduit en :

string requestUri="";
if ((OperationURL[1] == "GET")
{
    requestUri = _apiURL + "?e=" + GetRequestSignature();
}
else
{
   requestUri = _apiURL + "?e=";
}

1voto

T.S Points 326

On l'appelle aussi "inline if", ou comme ci-dessus l'opérateur ternaire. https://en.wikipedia.org/wiki/%3F :

Il est utilisé pour réduire le code, bien qu'il ne soit pas recommandé d'en utiliser beaucoup sur une seule ligne car cela peut rendre la maintenance du code assez difficile. Imaginez :

a = b?c:(d?e:(f?g:h));

et vous pourriez continuer pendant un moment.

Cela revient à peu près au même que d'écrire :

if(b)
  a = c;
else if(d)
  a = e;
else if(f)
  a = g;
else
  a = h;

Dans votre cas, "string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "") ;"

On peut aussi l'écrire comme suit : (en omettant le else, puisque c'est une chaîne vide)

string requestUri = _apiURL + "?e=" + OperationURL[0];
if((OperationURL[1] == "GET")
    requestUri = requestUri + GetRequestSignature();

ou comme ça :

string requestUri;
if((OperationURL[1] == "GET")
    requestUri = _apiURL + "?e=" + OperationURL[0] + GetRequestSignature();
else
    requestUri = _apiURL + "?e=" + OperationURL[0];

En fonction de vos préférences / du style de code que votre patron vous demande d'utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X