Dois-je utiliser des points-virgules pour délimiter les instructions Scala?

9

J'ai l'habitude de délimiter les instructions par un point-virgule de Java, donc naturellement je le fais aussi en code Scala. Je pense également que le code est plus facile à lire, car il est évident où une instruction se termine et une autre commence. Mais souvent, lorsque je poste un morceau de code Scala sur SO, le code est modifié juste pour supprimer les points-virgules.

  1. Dois-je utiliser des points-virgules ou non? Existe-t-il des directives ou un style de codage "officiels"?
  2. Y a-t-il des cas où des points-virgules sont requis, sinon le code est ambigu?
Petr Pudlák
la source
5
Haskell ne t'a rien appris? ; P supprime la syntaxe inutile, les points-virgules ne doivent être utilisés que pour fractionner plusieurs clauses / instructions sur la même ligne
Jimmy Hoffa
@JimmyHoffa Haskell m'a appris que la syntaxe doit être belle et cohérente :).
Petr Pudlák
2
La première partie de cela est pourquoi je m'énerve chaque fois que je vois des extraits de Scala ...
Jimmy Hoffa

Réponses:

9

Il n'y a pas de manière officiellement "correcte" de le faire, mais la plupart des pratiquants omettent les points-virgules partout où ils le peuvent (c'est pourquoi tant de gens suppriment les points-virgules par réflexe).

Le langage essaie très fort de vous faire oublier la nécessité de mettre fin aux instructions. Malheureusement, cela ne réussit pas tout à fait , il existe donc diverses situations complexes dans lesquelles des points-virgules, ou un jeu supplémentaire de parenthèses, ou des "conseils" similaires sont nécessaires pour éviter une sémantique indésirable. De telles situations sont presque assez rares pour que normalement vous n'ayez pas à y penser. Les opinions divergent quant à savoir si cela signifie que vous devez ponctuer défensivement (c'est ce que je pense) ou ne jamais ponctuer jusqu'à ce que vous rencontriez des problèmes (c'est ce que pense la majorité des utilisateurs). En fin de compte, il s'agit de savoir si vous vous identifiez comme un renégat ou un citoyen modèle.

Kilian Foth
la source
Merci, pourriez-vous peut-être donner un exemple (ou quelques :)) de telles situations complexes?
Petr Pudlák
3
J'avais peur qu'on me pose la question ... La programmation en Scala en énumère plusieurs qui m'ont surpris, mais je n'ai pas le livre avec moi pour le moment, et j'oublie les détails. C'est ce que j'essayais de faire valoir: si je pouvais me souvenir de ces situations exceptionnelles, ce ne serait pas si grave, mais en l'état, je ne suis toujours pas certain de pouvoir vraiment omettre le point-virgule - alors je ne le fais pas.
Kilian Foth
Huh. Je n'ai jamais rencontré une seule fois où manquer un point-virgule à Scala m'a fait mal. Je ne les inclue jamais . Je n'ai aussi programmé Scala que pour des choses de loisir, alors peut-être que ça me mordra tôt ou tard.
KChaloux
4

Dans quelle mesure voulez-vous comprendre les langues que vous utilisez? Voulez-vous jouer à ses points forts ou non? La syntaxe de Scala encourage un code clair et concis; les quelques cas limites où tirer parti de cela pose des problèmes pour l'analyseur Scala sont instructifs (c'est-à-dire que vous en apprendrez plus sur Scala en les rencontrant et en apprenant à les éviter) et en étant progressivement corrigés (par exemple, la notation des suffixes ). L'utilisation défensive du point-virgule peut signifier que vous n'aurez jamais à vous renseigner sur ces problèmes, mais voyez-vous vraiment cela comme une bonne chose? Les correctifs de ces problèmes ont généralement d'autres implications, mais vous manquerez ces possibilités.

Une autre considération est que, comme le reconnaît Kilian, la plupart des développeurs Scala omettent les points-virgules par défaut. Comment prévoyez-vous de travailler avec le code d'autres personnes si vous évitez d'utiliser Scala idiomatique vous-même? Vous allez trouver cela beaucoup plus difficile que nécessaire.

Je ne saurais trop insister sur le fait que ces fonctionnalités de l'analyseur Scala ont été choisies pour encourager un code propre, réutilisable et fonctionnel (au sens fp). Prenons l'exemple de la syntaxe de l'opérateur infixe; il encourage les développeurs à fournir aux classes des méthodes simples et à usage unique qui se composent bien ensemble. La bibliothèque de collections de Scala montre à quel point cela peut fonctionner. Les développeurs Java de formation classique qui embrassent cela auront tendance à développer de meilleures habitudes et de nouvelles façons de penser leur code. Ceux qui s'en tiennent à tous ces points et crochets familiers vont manquer. Je soutiens que cela est également vrai pour ceux qui sont trop timides pour abandonner le point-virgule.

itsbruce
la source
8
-1 oui, étant "forcé" d'apprendre le langage à cause des accrochages du compilateur, il est passé de mode avec C ++. En outre, il y a peu de preuves derrière les affirmations, que je voudrais pour une réponse avec un ton si partial.
Telastyn
(1) Ce que @Telastyn a dit - si vous voulez vraiment apprendre une langue de cette façon, achetez un chat, ils adorent s'asseoir sur des claviers parce qu'ils se soucient de votre éducation. (2) Omettre les points-virgules n'a rien à voir avec un style propre ou l'encourager - si quelque chose, supprimer les points-virgules cache le fait que ce sont des instructions distinctes qui sont exécutées de manière séquentielle et peuvent avoir des effets secondaires. Laisser des points-virgules en vous fait prendre conscience de cela et préférez donc un style plus fonctionnel. La décision est donc purement syntaxique (par exemple, le style, l'analyse, etc.).
Eli Barzilay
Bien que «forcé d'apprendre la langue» ne vole pas, «utiliser la langue comme le souhaitent ses auteurs» et «comme la plupart des autres développeurs l'utilisent» sont des points de référence importants. Le maintien d'un style cohérent entre plusieurs développeurs est utile. De cette réponse et de @Killan Foth, les responsables et la plupart des développeurs considèrent apparemment le point-virgule comme étranger.
Sarah Messer