最近、私はグーグルの新しいプログラミング言語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つのエラーをコミットする必要があります(コロンを忘れて)。したがって、そうする可能性が大幅に減少します。