A Tour of Go をやる! – その14 「Type conversions」 1は1.0になれる! 【Go言語/A Tour of Go】

記事ヘッダー_Type_conversions IT

「A Tour of Go をやる!」シリーズの第14回目。
今回も変数…というか、型変換な話です。

- PR -

今回進めるページ「Type conversions」

今回進める「A Tour of Go」のページはこちら。

A Tour of Go

タイトルの「Type conversions」とは?

Type (型)の conversions (変換) ですな。
ここでいう Type は int や string などを指す データ型(Data type)のこと。

言語仕様の確認

続いて言語仕様をチェック。
下記は型変換の仕様が説明されている「Conversions」から引用。

A conversion changes the type of an expression to the type specified by the conversion. A conversion may appear literally in the source, or it may be implied by the context in which an expression appears.

An explicit conversion is an expression of the form T(x) where T is a type and x is an expression that can be converted to type T.

変換により、式のタイプが変換で指定されたタイプに変更されます。変換は、文字通りソースに表示される場合もあれば、式が表示されるコンテキストによって暗示される場合もあります。

明示的な変換は、T(x)形式の式です。ここで、Tは型であり、xは型Tに変換できる式です。(by Google Translated.)

The Go Programming Language Specification - The Go Programming Language

型変換の基本として T(x) な形で型変換が出来るらしい。
ちなみに T は 型 のことで x は 式 のこと指すと書いてある。

型変換の構文

型変換の構文 T(x) を詳しく見てみる。

Go
// 構文 T(x)
[型] ( 式 )

// e.g.
var zorome int = 666           // zorome を int型 で宣言
var omen uint = uint( zorome ) // T(x) の形で uint型 に変換
                ^^^^^^^^^^^^^^
Expand

さて、型変換の基本がわかったところで、今回のサンプルプログラムを眺めます。

異なる型で値の代入を行うと…

怒られる…

Go
package main

import "fmt"

func main() {

  var suji int = 4649
  var moji string = suji

  fmt.Println( suji, moji )

}
Expand

Go Playground

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

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

Go
package main

import (
  "fmt"
  "math"
)

func main() {

  // x,y は int型
  var x, y int = 3, 4

  // 式に int型 の変数が使われているが float64 型に型変換されている
  var f float64 = math.Sqrt( float64( x*x + y*y ) )

  // float64型 の変数が uint型 に型変換されている
  var z uint = uint( f )

  fmt.Println( x, y, z )

}
Expand

Go Playground

処理の内容は、int型 の変数を基に何度か計算と型変換を行い、最後に各変数の中身を出力している。
型変換は何れも T(x) の構文が使用されている。

さいごに

ということで、型変換を覚えました。
Go言語では暗黙的な型変換といったことができないようですので、コーディングでは常に気を配らないとですね。

まぁ、実際のところは忘れたとしても構文チェックで引っかかるから大丈夫さぁ…_(:3」∠)_タブンナ

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

コメント

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