Darsliklar Go Lang Operatorlar

Go Lang Go Lang Operatorlar

Operatorlar — qiymatlar ustida amal bajaradigan maxsus belgilar. Go’da ularning aksariyati boshqa C-oilasidagi tillarga o’xshaydi, lekin bir nechta muhim farq va o’ziga xos bitli operator bor.

Operatorbir yoki bir necha operand ustida ma’lum amalni bajaradigan belgi. Go’da operatorlar ham, boshqa amallar kabi, qat’iy tur mosligini talab qiladi.

Arifmetik operatorlar

Asosiy amallar tanish ko’rinishda, lekin Go’da Python yoki Ruby’dagi kabi daraja operatori (masalan 2**10) umuman yo’q — buning uchun math.Pow funksiyasi ishlatiladi:

package main

import "fmt"

func main() {
    a := 7
    b := 2
    fmt.Println(a+b, a-b, a*b)
    fmt.Println(a/b, a%b)
    fmt.Println(7.0 / 2)
}
9 5 14
3 1
3.5

a/b (7/2) — ikkala operand ham int bo’lgani uchun natija butunlashtiriladi (3), qoldiq % orqali (1) olinadi. 7.0 / 2 esa kamida bitta operand kasr bo’lgani uchun aniq natija (3.5) beradi — bu qoidani ma’lumot turlari darsida ham ko’rgan edik.

Solishtirish va mantiqiy operatorlar

Solishtirish (==, !=, <, >, <=, >=) natijada bool qaytaradi, mantiqiy operatorlar esa &&, ||, ! belgilari bilan yoziladi (Python’dagi and/or/not so’zlari emas):

package main

import "fmt"

func main() {
    yosh := 26
    faol := true

    fmt.Println(yosh > 18 && faol)
    fmt.Println(yosh > 30 || faol)
    fmt.Println(!faol)
}
true
true
false

&& — ikkala shart ham rost bo’lsagina rost, || — kamida bittasi rost bo’lsa yetarli, ! — qiymatni teskarisiga o’giradi.

++ va – — statement, ifoda emas

Go’da ++/-- ko’p tillardan farqli, mustaqil buyruq (statement) — ularni ifoda ichida (masalan, x := i++) ishlatib bo’lmaydi:

package main

import "fmt"

func main() {
    son := 5
    son++
    fmt.Println(son)
    son--
    son--
    fmt.Println(son)
}
6
4

son++ faqat mustaqil qator sifatida yoziladi, oldingi := son++ kabi yozuv kompilyatsiya xatosi beradi. Bu C++/Java dasturchilari uchun eng ko’p uchraydigan moslashish qiyinchiliklaridan biri.

Bitli operatorlar

Go raqamlar ustida bit darajasida ishlaydigan operatorlarni ham taqdim etadi — bulardan &^ (AND NOT) boshqa ko’p tillarda uchramaydigan, Go’ga xos operator:

Operator Ma’nosi
& bitli VA
\| bitli YOKI
^ bitli XOR
&^ AND NOT (bit tozalash)
<< chapga siljitish
>> o’ngga siljitish
package main

import "fmt"

func main() {
    a := 12 // 1100
    b := 10 // 1010

    fmt.Println(a & b)
    fmt.Println(a | b)
    fmt.Println(a ^ b)
    fmt.Println(a &^ b)
    fmt.Println(a << 2)
}
8
14
6
4
48

a &^ badagi bitlardan bda o’rnatilganlarini “tozalaydi” (o’chiradi): 1100 &^ 1010 = 0100 (4). Bu operator, masalan, bayroqlar (flags) to’plamidan muayyan bayroqni o’chirishda qulay — boshqa tillarda buning uchun odatda a & ~b yozish kerak bo’ladi.