2
votes

Est-il correct d'utiliser count + 1 dans l'opérateur ternaire?

Ce que je veux faire, c'est vérifier s'il y a un élément dans le tableau, si c'est le cas, je veux incrémenter le compteur. Le compilateur signale une erreur lorsque je compte ++ mais pas lorsque je compte + 1, et il s'incrémente correctement. Est-ce parce que count ++ est une opération et non une expression, et count + 1 est une expression?

let count = 0;

//not working
count = checkArr(arr) ? count++ : count;

//working
count = checkArr(arr) ? count + 1 : count;


2 commentaires

Si cela fonctionne, je ne vois pas pourquoi ce n'est pas correct d'utiliser: p


Postfix ++ renvoie d'abord une ancienne valeur, puis incrémente la valeur elle-même. Si vous le changez en préfixe un (tel que ++ count ), cela fonctionnera. Cependant, il n'est pas nécessaire de moduler le nombre dans l'opérateur ternaire, car vous lui assignez en conséquence


4 Réponses :


3
votes

Utilisez l'opérateur de préfixe. C'est parce qu'avec postfix, la valeur est incrémentée après sa première lecture. Avec le préfixe, vous obtiendrez la valeur count mise à jour avant sa lecture.

count = checkArr(arr) ? ++count : count;

Devrait fonctionner


1 commentaires

Cela fonctionnerait, mais c'est une construction vraiment étrange. Vous incrémentez d'abord la variable, puis vous la remplacez par la même valeur. Ce serait bien mieux sans l'OMI ternaire.



1
votes

Il est légal d'utiliser un opérateur ternaire comme celui-ci. Cependant, je discuterais du style de code ici.

if (checkArr(arr)) ++count;

Dans cette ligne, expressionFalse part (after :) est complètement inutile et ne fait rien et il n'est là que pour corriger la syntaxe des opérateurs ternaires.

Dans ce cas, la construction IMO suivante est plus lisible:

if (checkArr(arr)) {
    ++count;
}

ou

count = checkArr(arr) ? count + 1 : count;


0 commentaires

4
votes

Rien n'est interdit, mais certaines bonnes pratiques peuvent être adoptées.

Mélange d'assignation count = , de conditionnement ?: et de post incrémentation ++ est beaucoup à l'intérieur d'une même ligne.

Optez toujours pour la solution la plus simple lorsque vous codez quelque chose. Dans votre cas:

if (checkArr(arr)) {
  count += 1;
}

est bien plus facile à comprendre qu'un ternaire qui ne semble pas approprié dans ce contexte particulier.


Là sont des outils existants d'audit de la qualité du code, comme sonarqube, eslint ...

Ils demandent toujours de la simplicité.

Exemple de règles ternaires:

Exemple de post / pré-incrémentation:

Ils veulent que le codeur évite l'utilisation de ++ / - car pour certaines personnes, cela peut être trompeur. Beaucoup de gens ne connaissent pas la différence entre ++ var et var ++ ce qui peut conduire à des bogues. Préférez var + = 1; .


0 commentaires

0
votes

la valeur de count ++ et ++ count est différente.

En bref:

count = count ++ : La valeur de count ++ est la valeur AVANT l'incrément.

/ p>

count = ++ count : La valeur de ++ count est la valeur APRÈS l'incrément.

let count = 5;
console.log(count++); //return 5
console.log(count); //return 6

let count = 10;
console.log(++count); //return 11
console.log(count); //return 11

Cela fonctionne de la même manière pour count-- et --count

Cependant, une chose à noter ici est dans eslint cela serait considéré comme une erreur, et il est recommandé d'utiliser plutôt + = 1 .

Link fyi: https://eslint.org/docs/rules/no-plusplus


0 commentaires