「A Tour of Go をやる!」シリーズの第13回目。
まだまだ続くぞ変数回。というわけで今回は宣言したての変数のお話。
今回進めるページ「Basic types」
今回進める「A Tour of Go」のページはこちら。
タイトルの「Zero values」とは?
宣言して直ぐの変数にはゼロ値が与えられます。の「ゼロ値」のことです。
言語仕様の確認
さて言語仕様を見てみます。
When storage is allocated for a variable, either through a declaration or a call of new, or when a new value is created, either through a composite literal or a call of make, and no explicit initialization is provided, the variable or value is given a default value. Each element of such a variable or value is set to the zero value for its type: false for booleans, 0 for numeric types, “” for strings, and nil for pointers, functions, interfaces, slices, channels, and maps. This initialization is done recursively, so for instance each element of an array of structs will have its fields zeroed if no value is specified.
宣言またはnewの呼び出しによって変数にストレージが割り当てられた場合、または複合リテラルまたはmakeの呼び出しによって新しい値が作成され、明示的な初期化が提供されていない場合、変数または値が指定されます。デフォルト値。このような変数または値の各要素は、その型がゼロ値に設定されます。ブール型の場合はfalse、数値型の場合は0、文字列の場合は「」、ポインタ、関数、インターフェイス、スライス、チャネル、およびマップの場合はnilです。この初期化は再帰的に行われるため、たとえば、値が指定されていない場合、構造体の配列の各要素のフィールドはゼロになります。(by Google Translated.)
https://golang.org/ref/spec#The_zero_value
引用した文章を読んでみると、宣言時に初期化されなかった変数にはゼロ値が詰められるようです。そしてゼロ値は型によって値が変わり、それぞれ型ごとに次の値が詰められるようです。
それぞれの型に適用されるゼロ値(Zero values)
型 | ゼロ値 |
---|---|
bool | false |
int, uint, float, complex | 0 |
string | “” (空文字) |
* (Pointers), func, interface, [] (Slices), chan, map | nil |
サンプルプログラムを見てみる。
じゃ「Zero values」のサンプルプログラムを見てみます。
お題に関係する箇所にはコメント打ってます。
package main
import "fmt"
func main() {
// それぞれの型が割り当てられた変数を初期化せず宣言
var i int
var f float64
var b bool
var s string
// 変数の中身を出力
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
処理の内容は、各種型を割り当てた変数を宣言し、中身を出力するだけのプログラム。
実行結果を確認すると、言語仕様に記載の合った通りの値が詰まっていることが確認できる。
さいごに
今回は初期化しなかった変数のデフォルト値を知ることが出来ました。
ん~内容が薄いよう~。(;´∀`)
んではまた次回~٩( ‘ω’ )و
コメント