web-dev-qa-db-fra.com

Pourquoi Golang applique-t-il le support bouclé pour ne pas être sur la ligne suivante?

correct:

if(true) {

}

incorrect:

if(true)
{

}

Pourquoi ce style est-il appliqué, a-t-il quelque chose à voir avec la spécification de la langue ou est-ce simplement parce qu'ils préfèrent un style sur un autre?

28
jokoon

Pourquoi y a-t-il des accolades mais pas de points-virgules? Et pourquoi ne puis-je pas mettre la corse d'ouverture sur la ligne suivante?

Go utilise des crochets pour le regroupement de la déclaration, une syntaxe familière aux programmeurs qui ont travaillé avec n'importe quelle langue dans la famille C. Les points-virgules sont toutefois pour les analyses, pas pour les personnes et nous voulions les éliminer autant que possible. Pour atteindre cet objectif, allez emprunter un tour de BCPL: les points-virgules qui séparent des déclarations sont dans la grammaire formelle mais sont injectés automatiquement, sans lookahead, par la Lexer à la fin d'une ligne qui pourrait être la fin d'une déclaration. Cela fonctionne très bien dans la pratique mais a pour effet que cela force un style de corset. Par exemple, l'attelage d'ouverture d'une fonction ne peut pas apparaître sur une ligne par elle-même.

http://golang.org/doc/faq#semicolons

40
Matt Ball

La plupart C Les langues descendantes utilisent le style if ( <condition> ) <statement>, le statement est exécuté si condition est vrai . Le statement peut être une seule instruction ou un bloc fermé de la corde.

GO'S if _ Les déclarations nécessitent un bloc d'attelage suivant, pas une seule déclaration. Ceci est pour diriger une erreur courante que la plupart des guides de style tentent d'éviter d'éviter que toutes les instructions if utilisent des accolades.

//subtle error in C
if (<condition>)
  <statement1>;
  <statement2>;

Maintenant que Go Option nécessite un bloc d'assaut après la déclaration if énoncé () sont redondants. Ils servent que pour aider le Lexer à différencier entre la condition et la déclaration, sinon if <condition> <statement> est difficile à analyser. (Où commence la condition et la déclaration commence?)

Maintenant, les auteurs ont la décision de faire:

  • Garder le redondant ()
  • exiger { suivre le <condition>

Ils ont décidé que la redondance n'était pas souhaitable. Cela a eu un deuxième effet secondaire. Puisqu'il y a une implicite ; à chaque nouvelle ligne, si le { est sur la ligne suivante A ; se fait entre le <condition> et le {. Les auteurs de Go à nouveau sont confrontés à une décision:

  • cas spécial l'analyseur d'être intelligent sur le <condition>; { construire
  • exiger que tout le monde adopte un style commun de if ... { sur la même ligne.
  • exiger que le <condition> être sur une seule ligne.

Coffre spécial L'analyseur est un très mauvaise chose. Regardez la vitesse [[~ # ~] d [~ # ~ ~] Et allez des analyseurs par rapport à la terrible performance terrible de C++. Aussi un style uniforme est une bonne chose. Leur décision ultime est assez simple compte tenu des contraintes.

25
deft_code

Cela a à voir avec le spécifique , c'est-à-dire que ce n'est pas seulement quelque chose qu'ils ont intégré à leurs compilateurs

Semicolons

La grammaire formelle utilise des points-virgules ";" en tant que terminateurs dans un certain nombre de productions. Les programmes Go peuvent omettre la plupart de ces points-virgules en utilisant les deux règles suivantes:

Lorsque l'entrée est cassée en jetons, un point-virgule est automatiquement inséré dans le flux de jeton à la fin d'une ligne non vide si le jeton final de la ligne est

  • un identifiant
  • un entier, un point flottant, imaginaire, rune ou string littéral
  • l'un des mots-clés pause, continue, franchis ou retour
  • un des opérateurs et des délimiteurs ++, -,),], ou}

Pour permettre aux déclarations complexes d'occuper une seule ligne, un point-virgule peut être omis avant une fermeture ")" ou "}".

Pour refléter l'utilisation idiomatique, des exemples de code de ce document Elide des points-virgules à l'aide de ces règles.

En ce qui j'ai saisi de leurs discussions, ils voulaient se débarrasser des discussions en format et étendue l'idée avec le gorge de gofmt

6
tike