19 / 103

Type inference

Tipni aniqlash

O'zgaruvchi aniq tip ko'rsatilmasdan e'lon qilinganda (ya'ni := sintaksisi yoki var = ifodasi orqali), o'zgaruvchining tipi o'ng tomondagi qiymatdan aniqlanadi (inferred).

E'longa o'ng tomondagi qiymat tipli bo'lsa, yangi o'zgaruvchi ham aynan shu tipda bo'ladi:

example.go
var i int
j := i // j — int

Lekin o'ng tomonda tipsiz sonli konstanta bo'lsa, yangi o'zgaruvchi konstantaning aniqligiga qarab int, float64 yoki complex128 bo'lishi mumkin:

example.go
i := 42           // int
f := 3.142        // float64
g := 0.867 + 0.5i // complex128

Misol koddagi v ning boshlang'ich qiymatini o'zgartirib, uning tipi qanday o'zgarishini kuzating.

Topshiriqlar

Yechimni kodning pastki qismidagi Topshiriqlar bo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.

1-topshiriq

tiplar() (string, string, string) funksiyasini yozing: a := 42, b := 3.14, c := 1 + 2i o'zgaruvchilarini e'lon qilib, ularning tip nomlarini (fmt.Sprintf("%T", ...)) shu tartibda qaytarsin. Tipni o'zingiz yozmang, kompilyator aniqlasin.

2-topshiriq

aralash() (string, string) funksiyasini yozing: a := 7 / 2 va b := 7 / 2.0 ifodalaridan hosil bo'lgan a va b o'zgaruvchilarining tip nomlarini (%T) qaytarsin. Nima uchun tiplar turlicha ekanini o'ylab ko'ring.