Section 2

2-dars — O'zgaruvchilar va tiplar

var, := qisqa e'lon, tiplar, null qiymatlar, type conversion va math.Pow bilan investitsiya kalkulyatori


Bu darsdan boshlab investment calculator (investitsiya kalkulyatori) dasturini quramiz — u investitsiyaning kelajakdagi qiymatini hisoblaydi. Birinchi qadam — o'zgaruvchilar va tiplar.

O'zgaruvchi (variable) nima?

O'zgaruvchi — bu qiymat saqlanadigan nomli quti (ma'lumot konteyneri). Qiymatni bir marta qutiga solib, keyin kodning istalgan joyida shu nom orqali ishlatamiz.

package main
 
import (
	"fmt"
	"math"
)
 
func main() {
	var investmentAmount = 1000
	var expectedReturnRate = 5.5
	var years = 10
 
	var futureValue = float64(investmentAmount) * math.Pow(1+expectedReturnRate/100, float64(years))
	fmt.Println(futureValue)
}

var bilan e'lon qilish va nomlash

var investmentAmount = 1000
  • var — yangi o'zgaruvchi yaratamiz
  • investmentAmount — nomi
  • = 1000 — boshlang'ich qiymati

Nomlash qoidasi (camelCase): nom kichik harf bilan boshlanadi, keyingi so'zlar bosh harf bilan: investmentAmount, expectedReturnRate. Nom qiymatni aniq tasvirlasin.

Bir nechta paketni import qilganda ularni qavs ichiga olamiz (orasiga vergul qo'yilmaydi):

import (
	"fmt"
	"math"
)

Tiplar (types)

Go statik tipli til — har bir qiymatning aniq tipi bor. Asosiy tiplar:

TipNimaMisol
intbutun son (kasrsiz)1000, -5, 42
float64kasrli son5.5, 3.14, -0.2
stringmatn"Salom"
boolrost yoki yolg'ontrue, false

Yana kamroq ishlatiladigan, lekin bilib qo'yish kerak bo'lganlari: uint (faqat musbat butun son), int32, int64 (diapazoni har xil butun sonlar), rune (bitta Unicode belgi — int32 ning taxallusi). Bularning ko'pi xotira tejash uchun: katta diapazon kerak bo'lmasa, kichikroq tip kamroq xotira oladi.

investmentAmount = 1000int (kasr yo'q), expectedReturnRate = 5.5float64 (kasrli). Go tipni qiymatga qarab o'zi aniqlaydi — buni type inference deyiladi.


Null (boshlang'ich) qiymatlar

Go'da o'zgaruvchini e'lon qilib, qiymat bermasangiz — u "bo'sh" qolib ketmaydi. Go avtomatik null qiymat (zero value) beradi:

TipNull qiymat
int0
float640.0
string"" (bo'sh matn)
boolfalse

Bu — Go'ning kuchli tomoni. JavaScript yoki Java'dagi null/undefined xatolari Go'da deyarli bo'lmaydi, chunki har doim aniq boshlang'ich qiymat bor.


Tiplarni o'zgartirish (type conversion)

Go qattiq tipli: int va float64 ni to'g'ridan-to'g'ri aralashtirib bo'lmaydi. Yuqorida investmentAmount (int) ni float64 qiymatlar bilan ko'paytiramiz, shuning uchun avval o'giramiz:

float64(investmentAmount)

float64(...)int qiymatni float64 ga aylantiradi. O'zgaruvchining o'zi hali int bo'lib qoladi, lekin shu hisobda float64 sifatida qatnashadi. Aks holda Go xato beradi: mismatched types.

math.Pow — daraja

Go'da darajaga ko'tarish operatori (^ yoki **) yo'q. Buning o'rniga standart math paketidagi math.Pow(asos, daraja) funksiyasidan foydalanamiz:

math.Pow(1+expectedReturnRate/100, float64(years))

Pow float64 talab qiladi, shuning uchun years ni ham float64() ichiga olamiz. Hisob natijasi futureValue ga saqlanadi — Go uning tipini avtomatik float64 deb aniqlaydi.

Natijani chiqaramiz:

fmt.Println(futureValue) // 1708.1444584506886

Loyihani go run . (nuqta — "shu papkadagi modulni ishga tushir") bilan ishga tushiring.


Qisqa e'lon: :=

var ... = o'rniga Go'da qisqaroq usul bor — :=. U var ni ham, tipni ham o'zi qo'shadi. Bu tavsiya etilgan usul (tip aniqlash kerak bo'lsa):

investmentAmount := 1000.0   // float64
years := 10.0
expectedReturnRate := 5.5
 
futureValue := investmentAmount * math.Pow(1+expectedReturnRate/100, years)
fmt.Println(futureValue)

1000.0 deb yozsak (.0 bilan), u darhol float64 bo'ladi — endi float64(...) o'rashga ham hojat qolmaydi, formula qisqaradi.

UsulQachon
var x = 5funksiya ichida ham, tashqarisida ham ishlaydi
x := 5faqat funksiya ichida, lekin qisqaroq (tavsiya etiladi)

Tipni qo'lda belgilash

Agar avtomatik tip sizni qoniqtirmasa, uni qo'lda yozasiz:

var investmentAmount float64 = 1000

1000 (butun ko'rinishda) endi float64 bo'lib saqlanadi. Bunda := ishlatib bo'lmaydi — tip annotatsiyasi faqat var bilan keladi.

Maslahat: agar bir butun son keyin kasrli hisobda kerak bo'lsa, uni boshidanoq float64 deb belgilang — har safar konvertatsiya qilib o'tirmaysiz.


O'zingiz sinab ko'ring

  1. Kodni yozing, go run . bilan ishga tushiring. 1000, 5.5, 10 qiymatlarini o'zgartirib natijani kuzating.
  2. Hamma o'zgaruvchini := orqali qayta yozing va formulani qisqartiring.
  3. years := 10.0 ni years := 10 (butun son) qiling — qanday xato chiqadi? Nega? (math.Pow float64 talab qiladi.)
  4. Yangi bool o'zgaruvchi yarating: isLongTerm := years > 5 va uni chiqaring.
  5. var x int deb yozib (qiymatsiz), uni chiqaring — qanday null qiymat chiqadi?

1-dars · → 3-dars — Konstantalar