Dernièrement, je jouais avec le nouveau langage de programmation de Google Aller
et se demandait pourquoi l'opérateur d'affectation :=
a deux points devant le signe égal =
Y a-t-il une raison particulière pour laquelle les auteurs de la langue ont voulu utiliser name := "John"
au lieu de name = "John"
La notation :=
Sert à la fois de déclaration et d'initialisation.
foo := "bar"
est équivalent à
var foo = "bar"
Pourquoi ne pas utiliser seulement foo = "bar"
Comme dans n'importe quel langage de script, vous pouvez demander? Eh bien, c'est pour éviter les fautes de frappe.
foo = "bar"
fooo = "baz" + foo + "baz" // Oops, is fooo a new variable or did I mean 'foo' ?
name := "John"
est juste du sucre syntaxique pour
var name string
name = "John"
Go est typé statiquement, vous devez donc déclarer des variables.
:=
n'est pas l'opérateur d'affectation. C'est une courte déclaration de variable. =
est l'opérateur d'affectation.
Déclarations de variables courtes
Une courte déclaration de variable utilise la syntaxe:
ShortVarDecl = IdentifierList ":=" ExpressionList .
C'est un raccourci pour une déclaration de variable régulière avec des expressions d'initialisation mais pas de types:
"var" IdentifierList = ExpressionList .
Assignment = ExpressionList assign_op ExpressionList .
assign_op = [ add_op | mul_op ] "=" .
Dans Go, name := "John"
est un raccourci pour var name = "John"
.
Rob Pike explique pourquoi Go a :=
lors de sa conférence "Origins of Go" (2010).
:=
était un pseudo-opérateur dans une autre langue signée par Pike, appelée Newsquek (1989). Qui avait la notation Pascal-ish et la capacité d'inférer le type pour déclarer et initialiser l'idiome ( page 15 )
// variable: [type] = value
x: int = 1
x := 1
Note marginale: Robert Griesemer évoque:=
opérateur répondant à la question "Quelle serait une chose que vous retireriez de Go?" lors de la session QA à Google I/O 2013. Se référant à cela comme pratique mais problématique .
Les deux sont les différentes techniques de déclaration de variables en langage Go.
var name = "John" // is a variable declaration
ET
name := "John" // is a short variable declaration.
Une déclaration de variable courte est un raccourci pour une déclaration de variable régulière avec des expressions d'initialisation mais pas de types.
Lisez ci-dessous pour plus de détails:
Contexte important pour la réponse:
:=
est un opérateur abrégé pour initialiser une variable. Dans Go, les opérations suivantes sont équivalentes:
var myNumb String = "one"
myNumb := "one"
Réponse:
La question implicite est maintenant: "Pourquoi est-ce que vous avez conçu la notation raccourcie :=
avoir un :
avant le =
? ". La raison est d'empêcher les fautes de frappe courantes. Si l'opérateur d'affectation de raccourci était simplement =
, alors vous pourriez avoir la situation suivante:
var myNumb String = "one"
myNumb = "two"
L'utilisateur qui a créé ce code a-t-il maintenant l'intention de réaffecter two
à myNumb
, ou a-t-il mal saisi myNumb
au lieu de taper correctement myNumbTwo
? En incluant les deux points dans :=
, le programmeur devrait commettre deux erreurs (oublier les deux points et oublier le var
) afin d'avoir un bug, diminuant ainsi la probabilité de le faire drastiquement.
Il y a au moins une différence subtile entre
name := "John"
et
var name = "John"
La première est une instruction non déclarative et n'est pas autorisée en dehors d'un corps de fonction, tandis que la seconde est une instruction valide au niveau du package.