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 = 1000var— yangi o'zgaruvchi yaratamizinvestmentAmount— 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:
| Tip | Nima | Misol |
|---|---|---|
int | butun son (kasrsiz) | 1000, -5, 42 |
float64 | kasrli son | 5.5, 3.14, -0.2 |
string | matn | "Salom" |
bool | rost yoki yolg'on | true, 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 = 1000→int(kasr yo'q),expectedReturnRate = 5.5→float64(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:
| Tip | Null qiymat |
|---|---|
int | 0 |
float64 | 0.0 |
string | "" (bo'sh matn) |
bool | false |
Bu — Go'ning kuchli tomoni. JavaScript yoki Java'dagi
null/undefinedxatolari 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.1444584506886Loyihani 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.
| Usul | Qachon |
|---|---|
var x = 5 | funksiya ichida ham, tashqarisida ham ishlaydi |
x := 5 | faqat funksiya ichida, lekin qisqaroq (tavsiya etiladi) |
Tipni qo'lda belgilash
Agar avtomatik tip sizni qoniqtirmasa, uni qo'lda yozasiz:
var investmentAmount float64 = 10001000 (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
float64deb belgilang — har safar konvertatsiya qilib o'tirmaysiz.
O'zingiz sinab ko'ring
- Kodni yozing,
go run .bilan ishga tushiring.1000,5.5,10qiymatlarini o'zgartirib natijani kuzating. - Hamma o'zgaruvchini
:=orqali qayta yozing va formulani qisqartiring. years := 10.0niyears := 10(butun son) qiling — qanday xato chiqadi? Nega? (math.Powfloat64talab qiladi.)- Yangi
boolo'zgaruvchi yarating:isLongTerm := years > 5va uni chiqaring. var x intdeb yozib (qiymatsiz), uni chiqaring — qanday null qiymat chiqadi?
← 1-dars · → 3-dars — Konstantalar