62 votes

Quelle est la différence entre les points-virgules en JavaScript et en Python?

Python et JavaScript permettent aux développeurs d'utiliser ou d'omettre les points-virgules. Cependant, je l'ai souvent vu suggérer (dans des livres et des blogs) que je ne devrais pas utiliser de points-virgules en Python, alors que je devrais toujours les utiliser en JavaScript.

Existe-t-il une différence technique entre la manière dont les langues utilisent les points-virgules ou s'agit-il simplement d'une différence culturelle?

72voto

NullUserException Points 42268

Des points-virgules en Python sont totalement facultatives (sauf si vous voulez avoir plusieurs instructions sur une seule ligne, bien sûr). Personnellement, je pense que le code Python avec des points-virgules à la fin de chaque instruction est très moche.

Maintenant, en Javascript, si vous n'écrivez pas un point-virgule, on est automatiquement inséré1 à la fin de la ligne. Et cela peut causer des problèmes. Considérer:

function add(a, b) {
  return
    a + b
}

Vous pensez que cela renvoie a + b, Javascript, mais seulement déjoué vous et voit ce que:

function add() {
  return;
    a + b;
}

De retour undefined à la place.

1 Voir à la page 27, paragraphe 7.9 - Automatique point-Virgule Insertion sur la Spécification du Langage ECMAScript pour plus de détails et des mises en garde.

69voto

Jeremy Banks Points 32470

Cela m'avait confondu pour plus de temps. Je pensais que c'était juste une différence de culture, et que tout le monde se plaindre de point-virgule insertion étant le pire aspect de la langue était un idiot. La lancinante exemple de NullUserException la réponse de ne pas me balancent parce que, en faisant abstraction de l'indentation, Python a le même comportement que le JavaScript dans ce cas.

Puis un jour, j'ai écrit vaguement quelque chose comme ceci:

alert(2)
(x = $("#foo")).detach()

Je m'attendais à être interprété comme ceci:

alert(2);
(x = $("#foo")).detach();

Il a effectivement été interprété comme ceci:

alert(2)(x = $("#foo")).detach();

Je vais maintenant utiliser des points-virgules.

JavaScript, seulement1 traiter un retour à la ligne comme un point-virgule dans ces cas:

  • C'est une erreur de syntaxe.
  • Le retour à la ligne est entre l' throw ou return mot-clé et une expression.
  • Le retour à la ligne est entre l' continue ou break mot-clé et d'un identifiant.
  • Le retour à la ligne est entre une variable et d'un suffixe ++ ou -- de l'opérateur.

Cela laisse les cas de ce genre où le comportement n'est pas ce que vous attendez. Certaines personnes,2 ont adopté des conventions qui utilisent uniquement des points-virgules, si nécessaire. Je préfère suivre la norme de la convention de toujours le faire avec eux, maintenant que je sais qu'il n'est pas inutile.


1 j'ai omis quelques détails mineurs, consulter ECMA-262 5e Section 7.9 pour la description exacte.
2Twitter Bootstrap est un exemple très connu.

8voto

cdarke Points 8020

Outre les problèmes de syntaxe, il est en partie culturel. Dans la culture Python, tous les caractères superflus sont un anathème, et ceux qui ne sont ni des espaces ni des caractères alphanumériques, encore plus.

Ainsi, les choses comme les signes de début de ligne, les points-virgules et les accolades ne sont pas appréciées. Ce que vous faites dans votre code, cependant, dépend de vous, mais pour bien comprendre une langue, il ne suffit pas d'apprendre la syntaxe.

8voto

lbruder Points 1834

JavaScript est conçu pour "ressembler à C", donc les points-virgules font partie de la culture. La syntaxe Python est suffisamment différente pour que les programmeurs ne se sentent pas mal à l'aise si les points-virgules sont "manquants".

7voto

hamstergene Points 14041

La réponse pourquoi vous ne les voyez pas dans le code Python est: personne n'a besoin d'eux, et le code est plus propre sans eux.

En règle générale, les points-virgules est juste une tradition. Beaucoup de nouvelles langues ont juste laissé tomber pour de bon (prendre Python, Ruby, Scala, Allez, Groovy, Io par exemple). Les programmeurs n'ont pas besoin d'eux, ni ne les compilateurs. Si une langue permet de ne pas taper un caractère supplémentaire vous n'avez jamais besoin, vous voulez prendre avantage de cela, n'est-ce pas?

C'est juste que JavaScript est de tenter de les déposer n'était pas très réussie, et beaucoup préfèrent la convention de toujours les utiliser, parce que cela rend le code moins ambigu.

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