Зеҳн
Алгоритмсозӣ ва барномасозӣ дар забони Go

Китоби таълимии забони Go барои мактабиён, донишҷӯён ва омӯзгорон: аз алгоритм ва блок-схемаҳо то веб-сервер ва боти Телеграм. Таҷдиди китоби А. П. Назаров «Алгоритмсозӣ ва барномасозӣ дар забони Бейсик» (2009).

Агенти Зеҳнӣ · 26 октябри 2026 · 15 саҳифа

МаорифБарномасозӣТехнология
Аз аввал хондан

Боби 3. Тағйирёбандаҳо ва навъҳои додаҳо

Боби 3. Тағйирёбандаҳо ва навъҳои додаҳо

Ҳар як барномаи компютерӣ барои кор кардан ба маълумот ниёз дорад. Маълумот метавонад адад, матн, нархи маҳсулот ё номи корбар бошад. Барои нигоҳ доштани ин маълумот дар хотираи компютер ва истифодаи минбаъдаи он, аз тағйирёбандаҳо истифода мебаранд. Дар ин боб шумо тарзи эълон кардани тағйирёбандаҳо, навъҳои асосии додаҳо дар Go ва қоидаҳои кор бо онҳоро меомӯзед.

Дар ин боб меомӯзем

  • Тағйирёбанда чист ва компютер онро дар куҷо нигоҳ медорад.
  • Эълони тағйирёбандаҳо бо калимаи var ва шакли кӯтоҳи :=.
  • Навъҳои асосии додаҳо: ададҳои бутун (int), ҳақиқӣ (float64), матнӣ (string) ва мантиқӣ (bool).
  • Қимати пешфарз (zero value) дар забони Go.
  • Эълони собитҳо бо калимаи const.
  • Табдилдиҳии қатъии навъҳои додаҳо (type conversion).
  • Шарҳҳо дар код ва аҳамияти онҳо.

Тағйирёбанда чист?

Тасаввур кунед, ки хотираи фаврии компютер (RAM) мисли як ҷевони бузурги дорои ҳазорон қуттичаҳои рақамдор аст. Тағйирёбанда — ин қуттичаест дар хотираи компютер, ки мо ба он номе медиҳем ва дар дохили он қиматеро нигоҳ медорем. Мо метавонем дар рафти иҷрои барнома қимати дохили ин қуттичаро хонем ё онро бо қимати нав иваз намоем.

Дар забони Go ҳар як тағйирёбанда дорои се хусусияти асосӣ мебошад:

  1. Ном (номи тағйирёбанда): барои муроҷиат кардан ба он.
  2. Навъ (type): муайян мекунад, ки дар ин қуттича чӣ гуна маълумот ҷой мегирад (адад, матн ва ғ.).
  3. Қимат (value): худи маълумоте, ки дар он лаҳза дар тағйирёбанда нигоҳ дошта мешавад.

Эълони тағйирёбандаҳо дар Go

Дар забони Go ду тарзи асосии эълон кардани тағйирёбандаҳо вуҷуд дорад.

[!NOTE] Порчаҳои кӯтоҳи коди ин боб бояд дар дохили func main() навишта шаванд (бо import "fmt"). Дар Go тағйирёбандаи маҳаллие, ки эълон шудаасту истифода нашудааст, хато ба ҳисоб меравад (declared and not used). Барои ҳамин мо дар мисолҳо қиматҳоро бо fmt.Println чоп мекунем.

1. Бо истифода аз калимаи калидии var

Шакли пурраи эълон чунин аст:

var ном навъ = қимат

Дар ин ҷо ном — номи тағйирёбанда, навъ — навъи он (масалан, int ё string) ва қимат — қимати ибтидоӣ мебошад.

Масалан:

var sinf int = 10
var nom string = "Рустам"
fmt.Println(nom, sinf) // Рустам 10

Агар қимати ибтидоиро фавран надиҳем, метавонем танҳо навъи онро эълон кунем:

var xizmat float64
fmt.Println(xizmat) // 0

Дар ин ҳолат Go ба тағйирёбанда ба таври худкор қимати пешфарз медиҳад (барои ададҳо 0).

2. Шакли кӯтоҳи эълон бо оператори :=

Дар дохили функсияҳо (масалан, дар дохили func main()), роҳи қулайтар ва маъмултарини эълон кардани тағйирёбанда истифодаи аломати дунуқта-баробар (:=) мебошад:

sinf := 10
nom := "Рустам"
vazn := 65.5
fmt.Println(nom, sinf, vazn) // Рустам 10 65.5

Дар ин тарз мо калимаи var ва навъи тағйирёбандаро наменависем! Компилятори Go ба қимати тарафи рост нигоҳ карда, навъи тағйирёбандаро худаш ба таври худкор муайян мекунад (type inference). Масалан, чунки 10 адади бутун аст, sinf ба таври худкор аз навъи int мегардад.

[!IMPORTANT] Шакли кӯтоҳи := барои эълони тағйирёбанда истифода мешавад. Ҳангоми эълони чанд тағйирёбанда ҳадди ақал яке бояд нав бошад; тағйирёбандаҳои ҳамон блокро бо навъи пешинаашон метавон дубора истифода бурд. Барои танҳо иваз кардани қимати тағйирёбандаи мавҷуда аломати =-ро истифода баред:

x := 5         // эълони тағйирёбандаи нав
x = 10         // бахшидани қимати нав ба тағйирёбандаи мавҷуда
fmt.Println(x) // 10

Навъҳои асосии додаҳо дар Go

Go забони дорои навъгузории статикӣ ва қатъӣ (statically and strongly typed) аст. Ин маънои онро дорад, ки ҳар як дода бояд навъи дақиқ дошта бошад ва навъи тағйирёбанда пас аз эълон дигар ҳеҷ гоҳ иваз намешавад.

Биёед чор гурӯҳи асосии навъҳоро баррасӣ кунем:

1. Ададҳои бутун (Integers)

Барои нигоҳ доштани ададҳои бе каср (мусбат, манфӣ ё сифр) истифода мешаванд:

  • int — навъи стандартии адади бутун (дар компютерҳои муосири 64-бита он 64 бит мебошад ва ададҳоро аз тақрибан −9 · 10¹⁸ то +9 · 10¹⁸ нигоҳ медорад).
  • int64, int32, int16, int8 — ададҳои бутуни дорои андозаи собит.
  • uint (unsigned int) — навъи адади бутуни беаломат барои нигоҳ доштани сифр ва ададҳои мусбат дар ҳудуди андозаи ин навъ.
  • byte — синоними uint8 буда, ададҳоро аз 0 то 255 ифода мекунад (аксар вақт барои кор бо байтҳои хотира истифода мешавад).
var sol int = 2026
var harorat int = -12
fmt.Println(sol, harorat) // 2026 -12

2. Ададҳои ҳақиқӣ / касрӣ (Floating-point)

Барои ададҳое, ки қисми касрӣ (пас аз нуқта) доранд:

  • float64 — навъи ададҳои нуқтаи шинокунандаи 64-бита, ки барои бисёр ҳисоббарориҳои риёзӣ истифода мешавад. Он тақрибан 15–17 рақами маънодори даҳӣ дорад; на ҳамаи касрҳо дар он дақиқ ифода мешаванд.
  • float32 — барои ҳолатҳое, ки сарфаи хотира муҳимтар аз дақиқии баланд аст.
pi := 3.1415926535
vazn := 72.45
fmt.Println(pi, vazn) // 3.1415926535 72.45

Дар навишти ададҳои калон ё хеле хурд метавон аз намуди экспоненсиалӣ истифода бурд:

suratiNur := 3e8              // 3 * 10^8 = 300000000.0
massa := 1.67e-27             // 1.67 * 10^(-27)
fmt.Println(suratiNur, massa) // 3e+08 1.67e-27

3. Навъи мантиқӣ (Boolean)

Навъи bool метавонад танҳо ду қиматро қабул кунад:

  • true (дуруст / ҳа)
  • false (нодуруст / не)
var darsBaqaydGiriftaShud bool = true
var imtihonSuporida bool = false
fmt.Println(darsBaqaydGiriftaShud, imtihonSuporida) // true false

Ин навъ барои идоракунии шартҳо ва алгоритмҳои шоханок васеъ истифода мегардад.

4. Сатрҳо (Strings)

Навъи string барои нигоҳ доштани матн истифода мешавад. Дар мисоли зерин матн дар дохили нохунакҳои дугона ("...") навишта шудааст:

var shahr string = "Душанбе"
payom := "Хуш омадед ба омӯзиши забони Go!"
fmt.Println(shahr, payom) // Душанбе Хуш омадед ба омӯзиши забони Go!

Матни бевосита дар коди Go навишташуда бо UTF-8 рамзгузорӣ мешавад, бинобар ин ҳарфҳои тоҷикӣ (ӯ, ӣ, ҳ, қ, ғ, ҷ)-ро истифода бурдан мумкин аст. Аммо қимати string дар умум пайдарпайии байтҳо мебошад ва ҳатман матни дурусти UTF-8 нест.


Қимати пешфарз (Zero Value)

Дар баъзе забонҳои дигар (масалан, дар C ё C++), агар тағйирёбандаи маҳаллиро дар дохили функсия эълон кунеду ба он қимат надиҳед, дар дохили он «партов»-и тасодуфии хотира боқӣ мемонад, ки сабаби хатогиҳои хатарнок мегардад.

Дар забони Go ин мушкил комилан бартараф шудааст. Ҳар як тағйирёбандае, ки бе қимати ибтидоӣ эълон мешавад, фавран соҳиби қимати бехатари пешфарз мегардад:

Навъи додаҚимати пешфарз (Zero value)
int, int64 ва дигар бутунҳо0
float64, float320.0
boolfalse
string"" (сатри холӣ)

Биёед инро дар амал санҷем:

package main

import "fmt"

func main() {
	var a int
	var b float64
	var c bool
	var d string

	fmt.Println("Адади бутун:", a)
	fmt.Println("Адади ҳақиқӣ:", b)
	fmt.Println("Мантиқӣ:", c)
	fmt.Println("Сатр:", d)
}

Натиҷа дар экран:

Адади бутун: 0
Адади ҳақиқӣ: 0
Мантиқӣ: false
Сатр:

Собитҳо (Constants)

Собит (constant) — номест барои қимати доимӣ, ки ҳанӯз ҳангоми компилятсия муайян мешавад ва дар тамоми давраи кори барнома дигар ҳеҷ гоҳ тағйир намеёбад. Собит тағйирёбанда нест: ба он қимати нав бахшидан мумкин нест. Барои эълони собитҳо калимаи const истифода мешавад:

const Pi = 3.14159
const NomMaktab = "Мактаби рақами 1"

Агар шумо кӯшиш кунед, ки баъдтар қимати собитро тағйир диҳед, компилятори Go фавран хато эълон мекунад:

Pi = 3.14 // ХАТО: cannot assign to Pi (neither addressable nor a map index expression)

Табдилдиҳии қатъии навъҳо (Type Conversion)

Дар баъзе забонҳои барномасозӣ (масалан JavaScript ё Python), компютер метавонад адади бутун ва ҳақиқиро ба таври худкор якҷо кунад. Аммо дар Go ин тавр нест!

Дар Go шумо наметавонед тағйирёбандаи навъи int-ро бо float64 бе табдилдиҳии ошкоро ҷамъ ё зарб кунед:

var a int = 5
var b float64 = 2.5
// var c = a + b // ХАТО: mismatched types int and float64

Барои он ки ин амал дуруст иҷро шавад, мо бояд навъи яке аз онҳоро ошкоро табдил диҳем:

var a int = 5
var b float64 = 2.5
var c = float64(a) + b // Ҳоло дуруст аст: 5.0 + 2.5 = 7.5
fmt.Println(c)         // 7.5

Қоидаи табдилдиҳӣ чунин аст:

навъиНав(қимат)

Масалан, float64(a), int(x).

Мисолҳои дигар:

x := 10.85
y := int(x)    // y баробари 10 мешавад (қисми касрӣ танҳо партофта мешавад, на гирд карда!)
fmt.Println(y) // 10

Шарҳҳо дар код (Comments)

Шарҳҳо барои фаҳмондани мақсади код ба хонанда навишта мешаванд. Онҳо ҳамчун дастурҳои барнома иҷро намешаванд ва барои шарҳи роҳи ҳалли масъала муфиданд.

Дар Go ду тарзи навиштани шарҳ мавҷуд аст:

  1. Шарҳи яксатра: бо ду хати моил // оғоз мешавад:
    r := 2.0
    // Ин формула масоҳати доираро ҳисоб мекунад
    s := 3.14 * r * r
    fmt.Println(s) // 12.56
    
  2. Шарҳи бисёрсатра: байни аломатҳои /* ва */ навишта мешавад:
    /*
      Ин барнома барои ҳисоб кардани
      маош ва андози кормандон
      сохта шудааст.
    */
    

Худатон бисанҷед

3–1. Маълумоти хонанда: Барномае нависед, ки дар он барои нигоҳ доштани номи хонанда, синну сол, баҳои миёна ва иштирок дар маҳфили фаннӣ тағйирёбандаҳои мувофиқ (string, int, float64, bool) эълон шуда, қиматҳои онҳо бо fmt.Println чоп карда шаванд.

3–2. Ҳисоби масоҳат бо собит: Собити const Pi = 3.14159-ро эълон кунед. Барои радиуси R = 7.5 дарозии давра (L = 2 · π · R) ва масоҳати доираро (S = π · R²) ҳисоб карда, чоп намоед.

3–3. Таҷрибаи табдилдиҳӣ: Ду тағйирёбандаи var x int = 17 ва var y int = 4 эълон кунед. Натиҷаи тақсими онҳоро ҳамчун адади бутун (x / y) ва ҳамчун адади ҳақиқӣ (float64(x) / float64(y)) чоп кунед ва фарқи байни онҳоро муқоиса намоед.


Хулоса

Дар ин боб шумо бо сохтори тағйирёбандаҳо дар забони Go шинос шудед. Шумо фаҳмидед, ки тарзи кӯтоҳи := барои эълони сареъ чӣ гуна кор мекунад, чор навъи асосии додаҳо (int, float64, bool, string) кадомҳоянд ва чаро Go табдилдиҳии қатъии навъҳоро талаб менамояд.

Дар боби 4 мо ба амалҳои арифметикӣ, бастаи math ва воридоту содироти додаҳо мегузарем, ки ба мо имкон медиҳад барномаҳои воқеии муфидро барои ҳалли масъалаҳои риёзӣ ва физикӣ тартиб диҳем.

пешина
аз 15
навбатӣ