1.5.1 متغیر (Variable) #
در برنامهنویسی رایانه، یک متغیر یک مکان در حافظه (آدرس حافظه) است که دارای یک نام نمادین با عنوان است و میتواند حاوی اطلاعات یا یک مقدار معلوم یا مجهول که به آن ارزش یا مقدار میگویند، باشد. به زبان دیگر، متغیر در برنامهنویسی به فضایی که برای ذخیره دادهها کنار گذاشته شده است میگویند (به نقل از سایت ویکیپدیا)
تعریف یک متغیر رشته #
package main
import (
"fmt"
)
func main() {
var s string = "Hello World"
fmt.Println(s)
}
- یک متغیر
با استفاده از کلید واژه
var
ایجاد کردیم. - نام متغیر
را
s
گذاشتیم. - تایپ متغیر
را از نوع
string
تعیین کردیم. - سپس با عملگر
=
مقدار متغیر را مشخص از نوع رشته تعیین کردیم. - رشته
"Hello World"
به عنوان مقدار متغیرs
است و این مقدار در خانه مشخصی از حافظه قرار داده شده است. - از پکیج استاندارد
fmt
برای چاپ مقدار متغیرs
استفاده کردیم که این پکیج یکسری توابع جهت انجام عملیاتهای مختلفی نظیر چاپ مقادیر را دارد که در کد بالا ما از تابعPrintln
استفاده کردیم.
1.5.1.1 اختصاص مقدار جدید به متغیر از قبل ایجاد شده #
در کد زیر ما یک متغیر از قبل تعریف کردیم و مقدار جدید را در خط ۹ به متغیر اختصاص دادیم.
package main
import (
"fmt"
)
func main() {
var s string
s = "Hello World"
fmt.Println(s)
}
زمانی که شما یک متغیر بصورتvar s string
تعریف میکنید مقدار پیشفرض""
برای متغیر تعیین شده است.
1.5.1.2 اختصاص مقدار رشته به تایپ اشتباه #
package main
import (
"fmt"
)
func main() {
var i int
i = "One"
fmt.Println(i)
}
در کد بالا ما یک متغیر
از نوع int
تعریف کردیم و در خط ۹ مقدار "One"
را به آن تخصیص دادیم و پس از اجرا با خطای cannot use "One" (type string) as type int in assignment
مواجه شدیم. این خطا یعنی اینکه شما یک مقدار رشته را به تایپ اشتباه اختصاص دادهاید.
1.5.1.3 تعریف متغیر به صورت خلاصه #
زبان گو علاوه بر اینکه از کلید واژه
var
برای تعریف متغیر پشتیبانی میکند, از =:
به انگلیسی short variable declaration
نیز برای تعریف متغیرها پشتیبانی میکند. شما میتوانید یک متغیر
تعریف کنید و نیازی به مشخص کردن تایپ متغیر نیست، چون زبان گو بر اساس مقدار تعیین شده تایپ متغیر را تشخیص میدهد.
package main
import "fmt"
func main() {
s := "Hello World"
fmt.Println(s)
}
توجه کنید شما فقط داخل تابع میتوانید به صورت مختصر متغیر تعریف کنید و جهت تعریف متغیر بهصورت عمومی باید از کلید واژه
var
استفاده کنید.بهتر است برای تعریف متغیر داخل تابع از روش مختصر استفاده کنید و متغیر با
var
بصورت عمومی در بدنه کد باشد.package main
import ( “fmt” )
var s string = “Hello World”
func main() { fmt.Println(s) }
1.5.1.4 تعریف چند متغیر در یک خط #
در زبان گو شما میتوانید همزمان چند متغیر را در یک خط تعریف کنید که در زیر یک نمونه کد مثال زدیم :
package main
import "fmt"
func main() {
a, b, c := "hello", 1, 1.5
var d, e, f = "world", 13, 24
fmt.Println(a, b, c, d, e, f)
}
1.5.1.5 تعریف متغیر با مقدار پیشفرض #
در کد زیر ما یکسری متغیر با تایپهای مختلف تعریف کردیم که با مقدار پیشفرض ایجاد شدهاند.
package main
import "fmt"
func main() {
var i int
var f float32
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s) //0 0 false ""
}
1.5.2 مقدار ثابت (Constant) #
ثابت (Constant)
ها بر خلاف متغیرها که با کلید واژه var
تعریف میشود, با کلید واژه const
تعریف میشوند با این تفاوت که ثابتها در طول اجرای کد مقدارشان غیرقابل تغییر هست به انگلیسی Immutable
, و تضمین میکنند هیچ چیزی در طول اجرای برنامه, باعث تغییر مقدار ثابت
نشود.
package main
import (
"fmt"
)
const s string = "Hello World"
func main() {
fmt.Println(s)
}
همانطور که در مثال فوق گفتیم شما نمیتوانید ثابت
ها را مجددا مقدار دهی کنید. در مثال زیر خطایی که بعد از مقدار دهی دوباره یک ثابت
در زمان اجرا رخ داده است را قرار دادیم :
package main
func main() {
const a int = 8
a = 9
}
1.5.2.1 تعریف Constant بدون نیاز به تعیین تایپ #
در تعریف ثابت
ها همانند متغیر ها شما میتوانید یک ثابت
بدون تعیین تایپ تعریف کنید و زبان گو در زمان اجرا با توجه به مقدار اختصاص داده شده به ثابت
شما, تایپ را تشخیص می دهد.
const a = 1 //Default hidden type is int
const b = "circle" //Default hidden type is string
const c = 5.4 //Default hidden type is float64
const d = true //Default hidden type is bool
const e = 'a' //Default hidden type is rune
const f = 3+5i //Default hidden type is complex128
1.5.3 نحوه مشاهده تایپ متغیر یا Constant #
در مثال زیر ما با استفاده از یکی از توابع پکیج fmt
نوع و مقدار متغیر یا ثابت ها را چاپ کردیم.
package main
import "fmt"
// Named untyped constant
const a = 123 //Default hidden type is int
const b = "circle" //Default hidden type is string
const c = 5.6 //Default hidden type is float64
const d = true //Default hidden type is bool
const e = 'a' //Default hidden type is rune
const f = 3 + 5i //Default hidden type is complex8
var u = 123 //Default hidden type is int
var v = "circle" //Default hidden type is string
var w = 5.6 //Default hidden type is float64
var x = true //Default hidden type is bool
var y = 'a' //Default hidden type is rune
var z = 3 + 5i //Default hidden type is complex128
func main() {
fmt.Println("")
fmt.Printf("Type: %T Value: %v\n", a, a)
fmt.Printf("Type: %T Value: %v\n", b, b)
fmt.Printf("Type: %T Value: %v\n", c, c)
fmt.Printf("Type: %T Value: %v\n", d, d)
fmt.Printf("Type: %T Value: %v\n", e, e)
fmt.Printf("Type: %T Value: %v\n", f, f)
fmt.Printf("Type: %T Value: %v\n", u, u)
fmt.Printf("Type: %T Value: %v\n", v, v)
fmt.Printf("Type: %T Value: %v\n", w, w)
fmt.Printf("Type: %T Value: %v\n", x, x)
fmt.Printf("Type: %T Value: %v\n", y, y)
fmt.Printf("Type: %T Value: %v\n", z, z)
}
1.5.3.1 استفاده از iota در constant #
شناسه iota
فقط با ثابت
ها قابل استفاده است و با آن میتوانید اعداد auto increment
ایجاد کنید.
ایجاد auto increment بدون iota
:
const (
a = 0
b = 1
c = 2
)
ایجاد auto increment با iota
:
const (
a = iota // 0
b // 1
c // 2
)
توجه کنید مقدار پیشفرضiota
صفر, وثابت
ما از نوعint
است.
1.5.3.2 نحوه ایجاد enum #
از iota
و ثابت
برای ایجاد enum ها هم میتوان استفاده کرد که در مثال زیر یک نمونه کد برای ایجاد enum را نیز قرار دادهایم.
package main
import "fmt"
type Size uint8
const (
small Size = iota
medium
large
extraLarge
)
func main() {
fmt.Println(small)
fmt.Println(medium)
fmt.Println(large)
fmt.Println(extraLarge)
}
1.5.3.3 نادیده گرفتن مقدار اول iota #
وقتی که داریم از iota
استفاده میکنیم شاید هنگام استفاده از auto increament نیاز باشد مقدار اول را نادیده بگیریم. برای اینکار میتوان از _
استفاده کرد به شکل زیر :
const (
_ = iota // ignore
a // 1
b // 2
c // 3
)
1.5.3.4 خودآزمون iota #
خروجی کد زیر را در ذهن محاسبه کنید و با اجرای کد صحت آن را بررسی کنید.
package main
import "fmt"
func main() {
const (
A = iota
B
C
D = B + C
E
F
G = iota
H
I = H
J
K
)
fmt.Println(A, B, C, D, E, F, G, H, I, J, K)
}
1.5.4 قوانین نامگذاری متغیر و constant #
در زیر ما یکسری قوانین جهت نامگذاری متغیر و تابت
ها تعریف کردهایم :
- نام متغیر یا ثابت باید با یک حرف انگلیسی یا
_
شروع شود. - نامها میتوانند ترکیبی از اعداد و حروف انگلیسی یا
_
باشد. - زبان گو به حروف بزرگ و کوچک در نام ها حساس است و اگر شما
hello
یاHello
را تعریف کنید, ۲ متغیر یا ثابت متفاوت محسوب میشوند. - محدودیتی در تعداد حروف نامها وجود ندارد ولی بهتر است از یک تعداد مطلوب و مشخصی برای نامها استفاده کنید.
توجه داشته باشید اصولا اسم ثابتها را با حروف بزرگ و خارج از توابع تعریف میکنند.
- با تعریف کردن ثابتها با حروف بزرگ, هنگام استفاده مشخصتر خواهند بود.
- از آنجایی که ثابتها فقط امکان read یا همان خواندن را میدهند ممکن است در قسمتهای مختلف به آن مقادیر نیاز داشته باشیم.
- به دلیل اینکه با هر بار فراخوانی
تابع
, کامپایلر عملیات مقدار دهی ثابت را دوباره انجام میدهد, بهتر است آن را خارج از تابع تعریف کنیم.