A Tour of Go をやる! – その11 「Short variable declarations」 略パート2! 【Go言語/A Tour of Go】

記事ヘッダー_Short_variable_declarations IT

「A Tour of Go をやる!」シリーズの第11回目。

3連続の変数回。今回の内容は…いや、今回も内容は薄めな「:=」のお話。

- PR -

今回進めるページ「Short variable declarations」

これもタイトルがなげぇ…、はどうでもいいですね。「A Tour of Go」のページはこちら。

A Tour of Go

タイトルの「Short variable declarations」とは?

Google さんに翻訳させると「短い変数宣言」。
書いちゃうと var キーワードを省略した書き方の事を指すようです。

というわけで仕様確認。

言語仕様の確認

Go言語仕様の「Short variable declarations」から引用しました。

A short variable declaration uses the syntax:

短い変数宣言は次の構文を使用します。(by Google Translated.)

The Go Programming Language Specification - The Go Programming Language
Go
ShortVarDecl = IdentifierList ":=" ExpressionList .
Expand

言語仕様の方程式みたいなやつ

今更な事ですが、言語仕様でよく見かける方程式(?)みたいなやつ。コレの見方は多分こんな感じ。それぞれ意訳を書きましたが…、ふわっとした知識で書いてるので間違ってるかもね!

// 方程式みたいなやつ
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 は式(値、演算子を絡めた値の組み合わせ、戻り値のあるファンクション等)のこと
そしてコレ以降はややこしくなるので割愛…

基本となる書き方

「:=」を使った書き方例です。

Go
// 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()
Expand

「:=」の使える場所

ファンクション中でのみ使えるようです。
なのでこんなのはダメ。

Go
package main

import "fmt"

age := 17

func main() {
  fmt.Println(age)
}
Expand

Go Playground

サンプルプログラムを見てみる。

「A Tour of Go」のサンプルプログラムを見てみます。今回のお題に関係する箇所にはコメント打ってます。

Go
package main

import "fmt"

func main() {

  // 省略しない変数宣言
  var i, j int = 1, 2
  // 省略した変数宣言、var k int = 3 と同じ
  k := 3
  // 省略した変数宣言を3つ同時に
  c, python, java := true, false, "no!"

  fmt.Println(i, j, k, c, python, java)

  // オマケ:暗黙的に決定された変数の型を調べる
  fmt.Printf("i:%T\nj:%T\nk:%T\nc:%T\npython:%T\njava:%T\n", i, j, k, c, python, java)

}
Expand

Go Playground

処理の内容ですが、特に何をするでもなく変数宣言とその出力してるだけ。
それと、「:=」を使うと型宣言が暗黙的になるので、各変数の型を出力する処理を追加してみました。

さいごに

今回は「:=」の使い方をラーニング。
そして変数回はまだ続きます…。

んでは次回~٩( ‘ω’ )و

コメント

タイトルとURLをコピーしました