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言語,変数

記事ヘッダー_Short_variable_declarations

「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言語のお勉強」インデックス

このシリーズについて

「A Tour of Go」を題材にした記事は現在書き直し中…。_(:3」∠)_
ほとんどサボりが原因で尻切れとなっていたシリーズですが、最近になってようやく続きを書きたくなり再開をしようと思ったんです。が、古い記事を見返すとデータ・フォーマットが古かったり内容が分かり難かったりに気づきまして、、、この際だからと最初の記事から書き直しをすることになりました…