62 votes

Utilisation de la virgule et du point-virgule ?

Étant donné le code suivant :

var fn = function () {
    var x = 'x',
    y = 'y';
    this.a = 'a',
    this.b = 'b',
    this.c = 'c';
    this.d = 'd',
    this.e = 'e';   
}

Comme on peut le constater, il y a un mélange des deux.

Quel serait l'avantage d'utiliser l'un ou l'autre ?

Si je comprends bien, le point-virgule sert à terminer la déclaration. Et la virgule doit être utilisée pour enchaîner plusieurs déclarations.

Peut-on dire qu'avec cet exemple, il ne devrait y avoir que deux points-virgules ?

var fn = function () {
    var x = 'x',
    y = 'y';
    this.a = 'a',
    this.b = 'b',
    this.c = 'c',
    this.d = 'd',
    this.e = 'e';   
}

0 votes

@SteveValliere, sauf que cette question ne concerne pas Java.

1 votes

@SteveValliere c'était une question sur le javascript. La syntaxe serait invalide en java

0 votes

Notez qu'en tant que jeton de fin de ligne, ils ne sont pas toujours équivalents. Cet extrait : var a=1,b=2 déclarera 2 variables avec une seule instruction var. Mais en var a=1;b=2 maintenant b ne fait plus partie de l'instruction var, et crée une instruction globale implicite b .

89voto

templatetypedef Points 129554

L'opérateur virgule est un opérateur qui peut être utilisé à l'intérieur d'une expression. Il est utilisé pour séparer plusieurs expressions différentes et a pour signification "évaluer toutes les expressions suivantes, puis produire la valeur de l'expression finale". Par exemple :

a = 1, b = 2, c = 3

signifie "évaluer a = 1 alors b = 2 alors c = 3 puis évaluée à la valeur de l'expression c = 3 .

Le point-virgule n'est pas un opérateur et ne peut pas être utilisé à l'intérieur d'une expression. Il est utilisé dans le cadre de la syntaxe JavaScript pour marquer la fin d'une expression qui est traitée comme une déclaration. Par exemple, vous pourriez dire

a = 1; b = 2; c = 3;

Et cela signifierait "il y a trois déclarations à faire en séquence : évaluer la première expression comme première déclaration, la deuxième expression comme deuxième déclaration, et la troisième expression comme troisième déclaration".

À cet égard, les deux ne sont pas totalement interchangeables. Par exemple, vous ne pouvez pas écrire

var a = 1, var b = 2;

Parce que var a = 1 y var b = 2 sont des déclarations, et non des expressions, et ne peuvent donc pas être séparées par des virgules. Vous devez utiliser un point-virgule ici.

(Une note : vous pourriez dire

var a = 1, b = 2;

car le langage autorise spécifiquement cette utilisation de la virgule dans le cadre de la syntaxe d'une déclaration. Ici, la virgule n'est pas utilisée comme un opérateur).

De même, vous ne pouvez pas dire

a = (b = 1; c = 2);

Parce qu'ici le côté droit de l'expression doit être une expression, et non une déclaration, et que ; est utilisé pour séparer les déclarations. Le point-virgule intérieur devrait être remplacé par une virgule. (Encore une fois, ce code est plutôt maladroit et inhabituel en premier lieu, donc vous ne devriez probablement pas faire cela du tout).

D'un point de vue stylistique, l'opérateur virgule est rarement utilisé et est suffisamment obscur pour faire trébucher des codeurs JavaScript raisonnablement compétents. Par conséquent, je suggère fortement de ne pas l'utiliser et de suivre les conventions établies en JavaScript concernant l'utilisation du point-virgule pour terminer les déclarations, même s'il serait équivalent et syntaxiquement légal d'utiliser des virgules pour séparer les expressions qui sont chacune utilisées comme des déclarations.

J'espère que cela vous aidera !

63 votes

Comment est-il possible d'écrire tout cela en 5 minutes ? O_O

32voto

gdoron Points 61066

Non, la virgule a trois significations.

  1. Avec les déclarations de variables, il vous permet simplement d'omettre l'élément var avant chaque variable.
  2. Avec des expressions, "L'opérateur virgule évalue ses deux opérandes (de gauche à droite) et renvoie la valeur du second opérande."
  3. Séparer les arguments dans les déclarations de fonctions et les appels de fonctions, mais cela devrait être évident pour tout programmeur.

Exemple pour deux ;

alert((2,3)); //3

Notez que la virgule dans l'instruction var n'est pas l'opérateur virgule, car il n'existe pas dans une expression. Il s'agit plutôt d'un caractère spécial dans les instructions var pour en combiner plusieurs en une seule. En pratique, cette virgule se comporte presque comme l'opérateur virgule.

MDN

Quand l'opérateur virgule est-il utile ?

2 votes

3. Séparer les arguments dans les déclarations de fonctions et les appels de fonctions.

0 votes

Oui, mais c'est encore la troisième signification.

1 votes

Si nous sommes pointilleux, il est également utilisé dans la notation littérale des objets et des tableaux, ainsi que dans d'autres éléments éventuels des futures structures de données ES6+. Afin de ne pas avoir à maintenir cette réponse à jour avec le langage, je la modifierais personnellement pour dire quelque chose comme "en dehors de l'utilisation évidente des virgules dans les structures de données et les fonctions...".

10voto

Jivings Points 10892

Cela n'a vraiment aucune importance. Pour autant que je sache, il n'y a pas d'avantage en termes de vitesse à utiliser des virgules.

Utilisez ce que vous préférez :)

C'est ce que JavaScript - Les bons côtés a à dire :

L'opérateur virgule peut donner lieu à des expressions excessivement compliquées. Il peut également masquer certaines erreurs de programmation.

JSLint s'attend à voir la virgule utilisée comme séparateur, mais pas comme un (sauf dans les parties d'initialisation et d'incrémentation de l'instruction for). Il ne s'attend pas à voir des éléments élidés dans les tableaux dans les littéraux de tableaux. Les virgules supplémentaires ne doivent pas être utilisées. Une virgule ne doit pas apparaître après le dernier élément d'un tableau ou d'un objet, car elle peut être car elle peut être mal interprétée par certains navigateurs.

3voto

Il est préférable de toujours rester cohérent avec les conventions. C'est soit tous les points-virgules, soit toutes les virgules, et je suis sûr que vous préférez utiliser des points-virgules plutôt que des virgules partout.

Il n'y a pas non plus de gain de vitesse, il n'y a donc pas de quoi s'inquiéter.

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