A Tour of Go をやる! – その11 「Short variable declarations」 略パート2! 【Go言語/A Tour of Go】
2018年9月21日GoA Tour of Go,Goのお勉強,Go言語,変数Go,A Tour of Go,Goのお勉強,Go言語,変数
「A Tour of Go をやる!」シリーズの第11回目。
3連続の変数回。今回の内容は…いや、今回も内容は薄めな「:=」のお話。
今回進めるページ「Short variable declarations」
これもタイトルがなげぇ…、はどうでもいいですね。「A Tour of Go」のページはこちら。
タイトルの「Short variable declarations」とは?
Google さんに翻訳させると「短い変数宣言」。
書いちゃうと var キーワードを省略した書き方の事を指すようです。
というわけで仕様確認。
言語仕様の確認
Go言語仕様の「Short variable declarations」から引用しました。
A short variable declaration uses the syntax:
短い変数宣言は次の構文を使用します。(by Google Translated.)
https://golang.org/ref/spec#Short_variable_declarations
ShortVarDecl = IdentifierList ":=" ExpressionList .
今更な事ですが、言語仕様でよく見かける方程式(?)みたいなやつ。コレの見方は多分こんな感じ。
それぞれ意訳を書きましたが…、ふわっとした知識で書いてるので間違ってるかもね!
// 方程式みたいなやつ
ShortVarDecl = IdentifierList ":=" ExpressionList .
// この式の説明を書いてみると…
ShortVarDecl = IdentifierList ":=" ExpressionList .
↑ 式(値や演算子絡めた値、戻り値のあるファンクション等)を書く
↑ 演算子でつなげて
↑ 変数名のリストを書いて
↑ ShortVarDecl(Short variable declarations)の文法は
// 式中に出てくるワード(IdentifierList とか ExpressionList とか)を詳しく知りたければ
// 概ね言語仕様の何処かに記載があるのでページ内検索すると見つかるかも。
// 下記は先程の式に出てきたワードを追って調べてみたもの。
☆ IdentifierList を調べる
→ IdentifierList = identifier { "," identifier } .
意訳)IdentifierList は変数名のリストのこと
※ リスト({})はカンマ区切りを意味している
☆ identifier を調べる
→ identifier = letter { letter | unicode_digit } .
意訳)identifier は文字(変数名)または "_"(アンダーバー) のこと
☆ letter を調べる
→ letter = unicode_letter | "_" .
意訳)letter は Unicode文字 または "_" のこと
☆ unicode_letter を調べる
→ unicode_letter = /* a Unicode code point classified as "Letter" */ .
意訳)unicode_letter は Unicode で文字カテゴリとされる文字
具体的には、Lu、Ll、Lt、Lm、Lo が対象
☆ unicode_digit を調べる
→ unicode_digit = /* a Unicode code point classified as "Number, decimal digit" */ .
意訳)unicode_digit は unicode で数値/10進数カテゴリとされる数字
具体的には、Nd が対象
☆ ":=" を調べる
→ Go言語で使用可能な演算子
☆ ExpressionList を調べる
→ ExpressionList = Expression { "," Expression } .
意訳)ExpressionList は式のリストのこと
☆ Expressionを調べる
→ Expression = Alternative { "|" Alternative } .
意訳) Expression は式(値、演算子を絡めた値の組み合わせ、戻り値のあるファンクション等)のこと
そしてコレ以降はややこしくなるので割愛…
さて、ごちゃごちゃっと書きましたが、方程式に登場するワードの意味を知りたければ「ほとんどが言語仕様内の何処かに記載されてるよ」ということが書きたかったわけです。
基本となる書き方
「:=」を使った書き方例です。
// var を省略した変数宣言
[変数名] := [値]
// (一応これも、、、var 使って型を省略した変数宣言)
var [変数名] = [値]
// e.g.
// age 変数を初期値 17 で宣言
age := 17
// name 変数を初期値 "yukarin" で宣言
var name = "yukarin"
// true_age 変数を初期値 age + 28 で宣言
true_age := age + 28
// character_age 変数を初期値 believers_17() で宣言
// believers_17 は → func believers_17() int { return 17 }
character_age := believers_17()
「:=」の使える場所
ファンクション中でのみ使えるようです。
なのでこんなのはダメ。
サンプルプログラムを見てみる。
「A Tour of Go」のサンプルプログラムを見てみます。今回のお題に関係する箇所にはコメント打ってます。
処理の内容ですが、特に何をするでもなく変数宣言とその出力してるだけ。
それと、「:=」を使うと型宣言が暗黙的になるので、各変数の型を出力する処理を追加してみました。
さいごに
今回は「:=」の使い方をラーニング。
そして変数回はまだ続きます…。
んでは次回~٩( 'ω’ )و
「Go言語のお勉強」インデックス
- うっしー「Go言語」に手を出す…(準備編)
- 「A Tour of Go」をやる!
- その1 「Hello, 世界」
- その2 「Packages」だってさ~
- その3 「Imports」いんぽーっ!
- その4 「Exported names」見えますか?
- その5 「Functions」 これは機能です。
- その6 「Functions continued」(?) 型しょ~略っ!
- その7 「Multiple results」 一粒で二度美味しい?
- その8 「Named return values」 お前は戻り値だ…
- その9 「Variables」入れ物!
- その10 「Variables with initializers」砂でも詰めるか…
- その11 「Short variable declarations」 略パート2!
- その12 「Basic types」 型抜きってあったな…
- その13 「Zero values」 生まれ持った中身は?
- その14 「Type conversions」 1は1.0になれる!
- その15 「Type inference」 君の型は…?
- その16 「Constants」 変えられねぇよ?
- その17 「Numeric Constants」 型無し野郎?
- その18 「For」 ~いよいよループ!~
- その19 「For continued」 ~ Forの続き! ~
「A Tour of Go」を題材にした記事は現在書き直し中…。_(:3」∠)_
ほとんどサボりが原因で尻切れとなっていたシリーズですが、最近になってようやく続きを書きたくなり再開をしようと思ったんです。が、古い記事を見返すとデータ・フォーマットが古かったり内容が分かり難かったりに気づきまして、、、この際だからと最初の記事から書き直しをすることになりました…
関連記事
Luxeritas のシンタックスハイライターに他の言語を追加する
今回は Luxceritas のシンタックスハイライター機能に、初期状態では選べ ...
A Tour of Go をやる! – その10 「Variables with initializers」砂でも詰めるか… 【Go言語/A Tour of Go】
「A Tour of Go をやる!」シリーズの第10回目。 二桁回到達… ! ...
A Tour of Go をやる! – その14 「Type conversions」 1は1.0になれる! 【Go言語/A Tour of Go】
「A Tour of Go をやる!」シリーズの第14回目。 今回も変数…という ...
うっしー「Go言語」に手を出す…(準備編) 【Go言語】
いや~、しばらく更新が断絶してましたが久しぶりに投稿してみます。 今回から、Go ...
A Tour of Go をやる! – その15 「Type inference」 君の型は…?【Go言語/A Tour of Go】
「A Tour of Go をやる!」シリーズの第15回目。 今回も変数でまたし ...
ディスカッション
コメント一覧
まだ、コメントがありません