変数と定数は、ほとんどのプログラミング言語において基本的な概念であり、データの格納与管理のビルドブロックとして用いられます。
この記事では、Goでの変数と定数の働き方を見ていきます。
目次:
変数とは何ですか?
変数は、名前(または識別子)で标识された格納場所であり、そこに格納される値はプログラムの実行中に変更(または変動)することができます。これが変数と呼ばれる理由です。
たとえば、
myName := “temitope”
fmt.Println(myName)
myName:= ”oyedele”
fmt.Println(myName)
名前空間にmyName
という識別子を持つ変数を作成し、文字列の値を保持しています。
注意してください、私たちは、変数の値を他の文字列に変更し、これを複数回行うことができます。
変数は、整数、浮動小数点数、文字列、またはオブジェクトなどの異なる型のデータを格納することができます。
Goで変数を作成する方法
Goで変数を作成する主な2つの方法があります。それは明示的な宣言と短縮表記の宣言です。
明示的な宣言
これはGoで変数を作成する従来の方法であり、var
キーワードを使用して変数の型を宣言し、コードをより読みやすく、明确にすることができます。
package main
import "fmt"
func main() {
var age int = 25
var name string = "Temitope"
var height float64 = 5.7
fmt.Println(age, name, height)
}
各変数につき、そのデータ型を宣言した後で値を割り当てることができます。
output:
25 Temitope 5.7
var
キーワードとデータ型は、初期値を持たない場合でも使用できます。
package main
import "fmt"
func main() {
var age int
var name string
var height float64
age = 25
name = "Temitope"
height = 5.7
fmt.Println(age, name, height)
}
この方法で、初期値を持たないまま変数を宣言し、後のコードで値を割り当てます。最初と同じ出力が得られます。
短縮変数宣言
短縮変数宣言構文 (:=
)は、変数を宣言するより簡潔な方法です。この方法は、型を明示的に指定せず、割り当てられた値から型を推論することで、1行で変数を宣言および初期化することができます。
package main
import "fmt"
func main() {
age := 25
name := "Temitope"
height := 5.7
fmt.Println(age, name, height)
}
ここでは、それぞれの変数が値と共に宣言され、Goが型を推論しました。例えば、age
は25と宣言および初期化され、Goはその型をint
と推論しました。name
は”Temitope”と宣言され、Goはその型をstring
と推論しました。height
は5.7と宣言され、Goはその型をfloat64
と推論しました。
output:
25 Temitope 5.7
短縮変数宣言の欠点の一つは、それを関数の内部だけで使用できることです。
複数の変数宣言
コンマで区切ることで、同じ行で複数の変数を宣言および初期化することができます。このアプローチは単純で直接的です。変数が関連している場合や一緒に初期化したい場合によく使われます。例えば:
package main
import "fmt"
func main() {
var age, height int = 25, 180
var name, city string = "Temitope", "New York"
fmt.Println(age, height)
fmt.Println(name, city)
}
ここで、変数age
およびheight
はどちらも整数と宣言され、値は25および180に初期化されます。name
およびcity
はどちらも文字列と宣言され、”Temitope”および”New York”に初期化されます。
Output:
25 180
Temitope New York
以下のように、ブロック内で複数の変数を宣言することもできます:
package main
import "fmt"
func main() {
var (
age int = 25
name string = "Temitope"
height int = 180
city string = "New York"
)
fmt.Println(age, name, height, city)
}
ここで、変数age
、name
、height
、およびcity
は、それぞれの行を持つ単一のvarブロック内で宣言されます。
Output:
25 Temitope 180 New York
ゼロ値
変数が初期化されずに宣言された場合、デフォルトでゼロ値が割り当てられます。これらの値は変数の種類によって異なります。以下はデフォルト値を宣言する方法の例です:
package main
import "fmt"
func main() {
var intValue int
var floatValue float64
var boolValue bool
var stringValue string
var ptrValue *int
var sliceValue []int
var mapValue map[string]int
fmt.Println("Zero values:")
fmt.Println("int:", intValue)
fmt.Println("float64:", floatValue)
fmt.Println("bool:", boolValue)
fmt.Println("string:", stringValue)
fmt.Println("pointer:", ptrValue)
fmt.Println("slice:", sliceValue)
fmt.Println("map:", mapValue)
}
上記のコードでは、次のようになります:
-
整数
intValue
にはゼロ値の0が割り当てられます。 -
浮動小数点数
floatValue
にはゼロ値の0が割り当てられます。 -
ブール値
boolValue
にはゼロ値のfalse
が割り当てられます。 -
文字列
stringValue
にはゼロ値の””(空の文字列)が割り当てられます。 -
ポインタ
ptrValue
、スライスsliceValue
、およびマップmapValue
にはすべてゼロ値nil
が割り当てられます。
出力:
Output:
Zero values:
int: 0
float64: 0
bool: false
string:
pointer: <nil>
slice: []
map: map[]
変数のスコープとは何ですか?
変数はグローバルまたはローカルに宣言することができます。変数のスコープは、コード内でその変数にアクセスして変更できる範囲を決定します。
グローバル変数は、任意の関数の外側、通常はファイルの最上部に宣言されており、同じパッケージ内の任意の関数からアクセスできます。以下はその例です。
package main
import "fmt"
var globalCounter int = 0
func incrementCounter() {
globalCounter++
}
func main() {
fmt.Println("Initial Counter:", globalCounter)
incrementCounter()
fmt.Println("After Increment:", globalCounter)
}
上記の例で、globalCounter
はグローバル変数であり、incrementCounter
関数とmain
関数の両方からアクセス可能です。
また、globalCounter
の値は関数呼び出しの間に持続します。つまり、一度にそれに変更がある関数での変更は、プログラムの他の部分に影響を与えます。
一方、ローカル変数は関数やブロックの内部で宣言されており、それら特定の関数やブロックの内部だけでアクセス可能です。関数やブロックが実行されたときに作成され、完了すると破棄されます。以下はその例です。
package main
import "fmt"
func incrementCounter() {
localCounter := 0
localCounter++
fmt.Println("Local Counter:", localCounter)
}
func main() {
incrementCounter()
incrementCounter()
}
上記のコードで、incrementCounter
関数内のlocalCounter
をローカル変数として宣言しています。incrementCounter
を呼び出すたびに、新しいlocalCounter
が作成され、初期値が0に設定され、递增されます。
localCounter
の値は関数呼び出しの間に持続しないため、関数に変更があっても、プログラムの他の部分に影響を与えません。
Goでの命名規則
変数の適切な命名は、クリーンで読みやすく、保守可能なコードを書く上で非常に重要です。Goは、変数の名前について特定の慣例や規則を持っています。以下はそのいくつかの例です。
-
名前を記述的に使用する: 変数の目的や内容を明確に描述する名前を使用してください。例えば、不十分な名前 like x や y を使用する代わりに、
age
,totalPrice
, やuserName
のように、変数が表す内容を明確に伝える名前を使用してください。 -
複数の単語を含む名前にCamelCaseを使用する: Goでは、複数の単語を含む変数名にcamelCaseを使用することが一般的です。最初の単語は小文字、その後の各単語の最初の文字は大文字になります。
-
下線を使用しない: 他の言語とは異なり、Goは変数名の単語を区切る際にcamelCaseを使用することを好みます。下線を使用する代わりに、camelCaseに従ってGoの惯習的なスタイルに従ってください。
-
短命変数に短い名前を使用する: ループカウンターやインデックスなどの短命変数には、i、j、kなどの短い名前を使用することが許されます。
Goでの定数とは?
定数は、コンパイル時に定義され、プログラムの実行过程中で変更できない、不変の値です。事前に知られる値を定義するのに有用で、その値は常に同じになります。
オンラインストアを構築しているとき、標準的な送料が常に$10であるということを宣言することができます。定数として宣言すると、送料が適用される際にプログラムのどこからでも使用できます。送料の価格が変更されると、1つの場所でのみ値を更新する必要があります。
Goで定数を宣言する方法
定数を宣言するには、const
キーワードを使用し、名前、型(値が型を示す場合は省略可能)、定数的な値を記述します。以下は宣言方法です:
package main
import "fmt"
func main() {
const pi float64 = 3.14159
const greeting string = "Hello, World!"
fmt.Println("Pi:", pi)
fmt.Println("Greeting:", greeting)
}
定数が宣言された後に変更を試みると、コンパイル時のエラーが発生します。
Goでの定数の種類
定数は型付きまたは型無しに分かれます。両方のタイプの定数は同一の目的を果たします。プログラム中で固定した、不変の値を提供します。しかし、Goが型を処理する方法、使用する際の柔軟性において異なります。
未定義の定数には型が割り当てられないことに注意してください。型を宣言しない定数は、その定数が使用される場所でGoが推論を行います。これにより、未定義の定数は型変換不要で、いくつかの設定で使用できるようになります。
package main
import "fmt"
const gravity = 9.81
func main() {
var height int = 10
var acceleration float64 = gravity * float64(height)
fmt.Println("Acceleration:", acceleration)
}
ここでは、gravity
が未定義の定数であることに注意してください。これは、gravity
をどのように使用するかに応じて型を推論することができます。gravity
がfloat64
での計算で使用される場合、Goは自動的にfloat64
として处理します。
未定義の定数とは異なり、型を明示的に宣言した定数があります。これは、それらがその型に一致するコンテキストや、互換性のある型に変換できるコンテキストでのみ使用できます。型付き定数は厳格で、宣言された特定の型で常に値を処理することを保証します。
package main
import "fmt"
const speedOfLight int = 299792458
func main() {
var distance int = speedOfLight * 2
fmt.Println("Distance:", distance)
}
ここでは、型为int
のspeedOfLight
が型付き定数であることに注意してください。
これは、他のint
値との操作にのみ使用できるか、明示的に変換される必要がある異なる型にのみ使用できます。
これで終わりです。
この記事で、Goで変数と定数を宣言する方法を見てきました。
変数と定数は、プログラマーがデータを効率よく管理・操作するために重要なツールです。变数と定数を正しく理解することで、コードの品質を向上させることができます。
これが有益だった場合は共有してください。
Source:
https://www.freecodecamp.org/news/variables-and-constants-in-go/