最近、私はグーグルの新しいプログラミング言語Goで遊んでいました
代入演算子の:=
前に等号がコロンがあるのはなぜだろうと思ってい=
た言語の作者がname := "John"
代わりに使用したいと思った特別な理由はありますかname = "John"
最近、私はグーグルの新しいプログラミング言語Goで遊んでいました
代入演算子の:=
前に等号がコロンがあるのはなぜだろうと思ってい=
た言語の作者がname := "John"
代わりに使用したいと思った特別な理由はありますかname = "John"
回答:
name := "John"
のための単なる構文糖衣です
var name string
name = "John"
Goは静的に型付けされているため、変数を宣言する必要があります。
name := "John"
の省略形ですvar name = "John"
。
var name = "John"
ために短いvar name string = "John"
所定の2ライン分の短いです。
"var" IdentifierList = ExpressionList .
」。
:=
代入演算子ではありません。これは短い変数宣言です。=
は代入演算子です。
短い変数宣言は次の構文を使用します。
ShortVarDecl = IdentifierList ":=" ExpressionList .
これは、初期化式を使用し、型を使用しない通常の変数宣言の省略形です。
"var" IdentifierList = ExpressionList .
Assignment = ExpressionList assign_op ExpressionList .
assign_op = [ add_op | mul_op ] "=" .
Goでは、name := "John"
はの省略形ですvar name = "John"
。
Rob Pikeは、Goが:=
彼の講演「Originsof Go」(2010)でなぜ持っているのかを説明しています。
:=
Newsquek(1989)と呼ばれるPikeによってコード署名された別の言語の疑似演算子でした。パスカル風の表記法と、イディオムの宣言と初期化の型を推測する機能がありました(15ページ)。
// variable: [type] = value
x: int = 1
x := 1
限界メモ: Robert Griesemerが :=
、「Goから取り出したものの1つは何ですか?」という質問に答えるオペレーターを紹介します。Google I / O2013でのQAセッション中。便利ですが問題があると言及しています。
回答の重要なコンテキスト:
:=
変数を初期化するための省略演算子です。行く、以下の操作は同じです。
var myNumb String = "one"
myNumb := "one"
回答:
暗黙の質問は次のとおりです。「なぜ?の前に短縮表記:=
を設計した:
の=
ですか?」その理由は、一般的なタイプミスを防ぐためです。省略形の代入演算子がちょうどの場合、=
次の状況が発生する可能性があります。
var myNumb String = "one"
myNumb = "two"
そのコードを作成したユーザーは、に再割り当てtwo
するつもりmyNumb
でしたか、それともmyNumb
正しく入力する代わりにタイプミスしましたmyNumbTwo
か?にコロンを含めることにより:=
、プログラマーはvar
バグを発生させるために2つのエラーをコミットする必要があります(コロンを忘れて)。したがって、そうする可能性が大幅に減少します。