Golangの定数(const キーワード)について総まとめ

Golang

定数とは、特定のデータ型を持つ不変の値です。

本記事ではGolangの定数について解説していきます。

定数(不変のものとなりうるもの

Golangではどんなリテラルも定数です。Golangの定数には次のようなものがあります。

  • 文字列(String): “Hello”
  • 数値(Integer): 1234
  • 浮動小数点数(Floating point): 23.56
  • 真偽値(Boolean): true, false
  • ルーン値(Rune): 0x0048
  • 複素数(Complex): 7+6i

Goで定数を宣言する方法(const キーワード)

const キーワードは、const値(定数)を宣言するために使用します。

一度宣言すると、新しい値を割り当てることができないため、不変となります。また、constはその型も変更することができません。

package main
 
import "fmt"
 
func main() {
    const name string = "Tanaka" // declaration
     
    // const b int := 3           // ":=" は使えない
   
    // name = "Sato"              // 再代入不可なのでエラーが発生する
 
    const p = 22/7               // 式の定数
    fmt.Println(p)               // prints 3
}

constは”:=”で宣言できません。

ブロックの中で複数の定数を宣言することができます。以下がそのコード例です。

const (
    a int = 42
    b string = "Hi"
)

Goにおける定数の型

定数には型付けがあり、型付けが与えられていない定数は、値から推測されます。

型付き定数

型付き定数は、すでに型が宣言されている定数である。以下はその例である。

package main
 
import (  
    "fmt"
)
 
func main() { 
    const test1 string = "Hello world"
    fmt.Println(test1)
}

上の例では、const test1は宣言されている通りstringの型を持っています。

型が明記されてない定数

型が明記されてない定数とは、型が宣言されていないconstのことです。

以下がその例です。

package main
 
import (  
    "fmt"
)
 
func main() { 
    const test2 = 30       // bの型は宣言されてない
    fmt.Println(test2)
}

上のコードでは、test2は整数リテラルですが、型が宣言されていません。

コンパイラはコンパイル時に型を推論します。よって上記の場合、test2の型はintになります。

定数表現

Golangでは、constは式を持つことができ、その式はその後評価されてconstの値になります。

式をconstとして使用する例を見てみましょう。

package main
 
import (  
    "fmt"
)
 
func main() { 
    const a = 1 + 5.4
    fmt.Printf("%f (%T)\n", a, a) // prints 6.400000 (float64)
     
    const b = 3 + 7
    fmt.Printf("%d (%T)\n", b, b) // prints 10 (int)
     
    // const c = 5 + true   // error: mismatched types
}

上記のコードでは、%Tは型を表示するために使用されています。

上記の例にあるように不一致の型は使用できず、もし両方が同じ型であれば、その型に評価されます。

その式の中で型を変更するには、その式の中で明示的に型を変更して、その型を私たちの望ましい型に変換する必要があります。その方法を見てみましょう。

package main
 
import (
    "fmt"
)
 
func main() {
    const a = 3.14 + 8
    fmt.Printf("%f (%T)\n", a, a)   // 11.140000 (float64)
 
    const b = float64(3) + 3.25     // float64に評価される
    fmt.Printf("%f (%T)\n", b, b)   // 6.250000 (float64)
}

Goにおけるconst(定数)の使いやすさ

constは、不変のものを宣言する必要がある場合に使用します。つまり、プログラムの途中で値が変わることはありません。

定数によって型も不変にせざるを得ないので、コードの保守性が向上します。

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