متغیرها | گولنگ به زبان ساده

تاریخ انتشار:
متغیرها | گولنگ به زبان ساده
در این قسمت با متغییرها و انواع آن آشنا می شویم و یاد میگیریم چطور یک متغییر تعریف کنیم و به درستی ازش استفاده کنیم.

توی این قسمت به بررسی موارد زیر میپردازیم:

  • متغیر چیست؟
  • چطور یک متغیر تعریف کنیم؟
  • چطور از یک متغیر استفاده کنیم؟
  • انواع داده
  • لیترال ها (literal)
  • type safe بودن گولنگ

متغیر چیست؟

متغیر در برنامه‌نویسی مثل یک جعبه یا ظرف است که می‌توانید در آن چیزهایی قرار دهید و هر وقت که بخواهید به آن چیزها دسترسی داشته باشید. هر متغیر یک نام دارد که با استفاده از آن نام می‌توانیم به مقدار داخل آن دسترسی پیدا کنیم.

هر متغیر دارای یک نوع است که با توجه به نوع آن میتوانیم داده ی مورد نظرمان را درون متغیر ذخیره کنیم. مثلا اگر نوع متغیری عددی است, به ما اجازه ذخیره کردن مقادیر عددی را میدهد و نمیتونیم داده متنی توی متغیری که عددی هست ذخیره کنیم.

چطور یک متغیر تعریف کنیم؟

در زبان Go، می‌توانیم به دو روش متغیرها را تعریف کنیم و به آنها مقدار بدهیم.

// 1. using var keyword:
var age int
age = 25
var height int = 155
var weight = 25

// 2. using := operator
weight := 71
name := "John Doe"

همچنین با یکبار استفاده از var می‌توانیم چند متغیر را همزمان تعریف کنیم:

// تعریف متغیر
var (
    job    string
    weight float64
)

// تعریف و مقداردهی متغیر
var (
    name    string = "Alice"
    age     int    = 25
    height  float64 = 1.68
    isStudent bool  = true
)

چطور از یک متغیر استفاده کنیم؟

بعد از تعریف متغیرها، با استفاده از نام متغیرها می‌توانیم از آنها در برنامه استفاده کنیم.

package main

import "fmt"

func main() {
    name := "Alice"
    age := 25
    height := 1.68
    isStudent := true
    fmt.Println("Name:", name)
    fmt.Println("Age:", age)
    fmt.Println("Height:", height)
    fmt.Println("Is Student:", isStudent)
}

همچنین میتونیم مقدار متغیرها را در طول برنامه تغییر دهیم:

package main

import "fmt"

func main() {
    age := 25
    fmt.Println("Age:", age)
    age = 26
    fmt.Println("New Age:", age)
}

انواع داده

در زبان برنامه‌نویسی Go، متغیرها می‌توانند انواع مختلفی داشته باشند که هر کدام برای ذخیره‌سازی نوع خاصی از داده‌ها به کار می‌روند.

نوع داده ۲ چیز را مشخص میکند:

  1. میزان حافظه
  2. نوع دیتایی که قرار است ذخیره شود

در زبان گولنگ میتوان داده ها را به 3 دسته تقسیم کرد:

  1. Built-in
    1.  Integer number
    2. Floating point number
    3. Complex number
    4. String
    5. Boolean
    6. Array
  2. User defined
    1. Struct
  3. Reference
    1. Pointer
    2. Slice
    3. Map
    4. Function
    5. Channel
    6. Interface

در اینجا فقط یک نمای کلی از نوع های داده توی ذهنتون داشته باشید, در قسمت های بعدی هرکدام از انواع داده رو بررسی خواهیم کرد.

لیترال ها (literal)

لیترال‌ ها (literal) عبارت‌های معین و ثابتی هستند که نوع خاصی از داده‌ها را نمایندگی می‌کنند. لیترال‌ها در برنامه‌نویسی به شما اجازه می‌دهند که مقادیر اولیه‌ای را برای متغیرها تعیین کنید.

در گولنگ ۴ نوع لیترال زیر بسیار رایج است:

  • اعداد صحیح (integer): یک عدد صحیح دنباله ای از اعداد است. حروف صحیح به طور پیش‌فرض بر مبنای 10 هستند، اما پیشوندهای مختلفی برای نشان دادن مبناهای دیگر استفاده می شود: 0b برای باینری (پایه ۲)، 0o برای اکتال (مبنای ۸)، یا 0x برای هگزا دسیمال (پایه ۱۶). می توانید از حروف بزرگ یا کوچک برای پیشوند استفاده کنید. پیشوند 0 بدون هیچ حرفی پس از آن, راه دیگری برای نشان دادن عدد در مبنای ۸ است. از آن استفاده نکنید، زیرا بسیار گیج کننده است.
package main

import "log"

func main() {
    // عدد ۱۶ در مبنای ده
    decimal := 16
	
    // عدد ۱۶ در مبنای ۸
    octal := 0o20
	
    // عدد ۱۶ در مبنای ۱۶
    hexadecimal := 0x10
	
    // روش دوم برای نشان دادن عدد ۱۶ در مبنای ۸
    alternateOctal := 020
	
    log.Println(decimal, octal, hexadecimal, alternateOctal)
}
  • اعداد اعشاری (float): اعداد اعشاری دنباله ای از اعداد به همراه بخش اعشار هستند.
package main

import "log"

func main() {
    a := .6
    b := 1.3
    c := .030

    log.Println(a, b, c)
}
  • رون (rune): برای نشان دادن کاراکتر ها در گولنگ از rune استفاده میکنیم. هر کاراکتر باید درون تک کوتیشن (') قرار گیرد. برای نشان دادن هر کاراکتر میتوانیم از خود کاراکتر , حالت اکتال(octal), هگزادسیمال(hex) و یا یونیکد(unicode) آن استفاده کنیم:
package main

import "log"

func main() {
    a := 'a'
    oct := '\141'
    hex := '\x61'
    unicode := '\u0061'

    log.Println(a, oct, hex, unicode)
}
  • متن (string) : دو روش برای نشان دادن متن یا رشته (string) وجود دارد. در اکثر موارد باید از کوتیشن دوتایی (") براش نشان دادن رشته ها استفاده کنید. روش دیگر استفاده از بک تیک (`) است.
package main

import "log"

func main() {
	// استفاده از کوتیشن دوتایی
    fmt.Println("Greetings and\n\"Salutations\"")

    // استفاده از بک تیک
    fmt.Println(`Greetings and\n\"Salutations\"`)
}

هنگامی که از کوتیشن دوتایی (") استفاده میکنید, محتوای متنی شما توسط گولنگ تفسیر میشود. برای مثال کاراکتر \n باعث میشود باقی محتوا در خط جدید نمایش داده شوند.

با استفاده از بک تیک (`) دقیقا همان چیزی که نوشته اید در خروجی نمایش داده میشود.

type safe بودن گولنگ

در زبان Go نوع مقادیری که در متغیری قرار داده اید به خودی خود (ناخواسته) تغییر نمی کند مگر آنکه شما آن را تغییر دهید. به این مفهوم type safe بودن می گویند. 

مثال اول :‌ در گولنگ نمیتوانید عملی را بر روی متغیر هایی که از یک نوع نیستند انجام دهید.

package main

import "log"

func main() {
    x := 1
    y := 1.2
    z := x+y

    log.Println(z)
}

در مثال بالا ما یک عدد صحیح را با عدد اعشاری جمع کردیم و نتیجه را نمایش دادیم. اینکار در گولنگ قابل انجام نیست و کد بالا در زمان کامپایل با خطا مواجهه خواهد شد. برای برطرف کردن خطا, مثال بالا رو به صورت زیر اصلاح می کنیم:

package main

import "log"

func main() {
    x := 1
    y := 1.2
    z := float64(x) + y

    log.Println(z)
}

در مثال بالا ابتدا نوع یک متغیر را به نوع مورد نظرمان تبدیل کردیم (type coversion) و سپس عملیات ریاضی را انجام دادیم.

به حالتی که نوع دیتا به صورت غیر صریح (خود به خود) به نوع دیگری تبدیل شود implicit type conversion میگویند.

مثال دوم: در گولنگ هیچگاه نوع ها به صورت ناخوداگاه به نوع دیگری تبدیل یا تفسیر نمی شوند.

package main

import "log"

func main() {
    x := 1

    if x {
        log.Println("x is:", x)
    }
}

در زبان های برنامه نویسی که type safe نیستند, کد بالا به درستی عمل خواهد کرد! اما در گولنگ کد شما در زمان کامپایل با خطا مواجهه خواهد شد.

در گولنگ تفسیر یا تبدیلِ نوعِ ضمنی (implicit conversion) انجام نخواهد شد و شما باید نوعِ متغیر را به صورت صریح اعلام کنید (explicit conversion).

بنابراین کد بالا رو میتونیم به صورت زیر اصلاح کنیم:

package main

import "log"

func main() {
    x := 1
    if x != 0 {
        log.Println("x is:", x)
    }
}

جمع بندی

در این قسمت با متغیرها و انواع آن آشنا شدیم. همچنین مفهوم literal و type safe بودن رو بررسی کردیم.


قسمت قبل: ساختار برنامه های گولنگی | گولنگ به زبان ساده

قسمت بعد: ثابت ها (constants) | گولنگ به زبان ساده