Tarkibga o'tish

Go’da operatorlar

Operator — qiymatlar ustida amal bajaradigan belgi yoki belgilar birikmasi. Masalan, + ikki sonni qo‘shadi, == qiymatlarni taqqoslaydi, && esa mantiqiy shartlarni birlashtiradi.

Operator ishlaydigan qiymat operand deyiladi. a + b ifodasida + — operator, a va b esa operandlar.

Arifmetik operatorlar

Operator Amal Misol Natija
+ qo‘shish 10 + 3 13
- ayirish 10 - 3 7
* ko‘paytirish 10 * 3 30
/ bo‘lish 10 / 3 3
% bo‘lishdan qolgan qoldiq 10 % 3 1
main.go
package main

import "fmt"

func main() {
    a := 10
    b := 3

    fmt.Println("Qo‘shish:", a+b)
    fmt.Println("Ayirish:", a-b)
    fmt.Println("Ko‘paytirish:", a*b)
    fmt.Println("Bo‘lish:", a/b)
    fmt.Println("Qoldiq:", a%b)
}

Natija:

Qo‘shish: 13
Ayirish: 7
Ko‘paytirish: 30
Bo‘lish: 3
Qoldiq: 1

Butun va kasrli sonlarni bo‘lish

Ikkala operand ham butun son bo‘lsa, natija ham butun son bo‘ladi. Kasr qismi tashlab yuboriladi:

natija := 10 / 3 // 3

Kasrli natija uchun operandlar kasrli turda bo‘lishi kerak:

main.go
package main

import "fmt"

func main() {
    jami := 10
    odamlar := 3
    harBiriga := float64(jami) / float64(odamlar)

    fmt.Printf("Har biriga: %.2f\n", harBiriga)
}

Natija Har biriga: 3.33 bo‘ladi. float64(jami) va float64(odamlar) butun sonlarni hisoblash uchun kasrli turga o‘tkazadi.

Warning

Sonni nolga bo‘lish mumkin emas. Butun sonni 0ga bo‘lish dastur bajarilayotgan paytda xatoga olib keladi. Bo‘luvchi o‘zgaruvchidan olinsa, amal bajarilishidan oldin uning nol emasligini tekshiring.

Qoldiqli bo‘lish

% operatori butun sonni bo‘lgandan keyingi qoldiqni qaytaradi. Masalan, 17 % 5 natijasi 2.

Sonning juft yoki toqligini shu operator bilan aniqlash mumkin:

son := 14
juft := son%2 == 0
fmt.Println(juft) // true

% Go’da faqat butun sonlar bilan ishlaydi.

Birga oshirish va kamaytirish

++ qiymatni birga oshiradi, -- esa birga kamaytiradi:

main.go
package main

import "fmt"

func main() {
    hisob := 5
    hisob++
    fmt.Println(hisob)

    hisob--
    fmt.Println(hisob)
}

Natijada avval 6, keyin 5 chiqadi. Go’da hisob++ va hisob-- alohida buyruq. Ularni boshqa ifodaning ichida ishlatib bo‘lmaydi:

// natija := hisob++ // kompilyatsiya xatosi

Tayinlash operatorlari

= o‘ng tomondagi qiymatni chap tomondagi mavjud o‘zgaruvchiga beradi:

son := 10
son = 20

Arifmetik amal va tayinlashni qisqa yozish mumkin:

Qisqa yozuv To‘liq yozuv
son += 5 son = son + 5
son -= 5 son = son - 5
son *= 5 son = son * 5
son /= 5 son = son / 5
son %= 5 son = son % 5
main.go
package main

import "fmt"

func main() {
    balans := 100
    balans += 50
    balans -= 20

    fmt.Println("Balans:", balans)
}

Natija Balans: 130 bo‘ladi. := yangi o‘zgaruvchi e’lon qiladi, = esa mavjud o‘zgaruvchining qiymatini almashtiradi.

Taqqoslash operatorlari

Taqqoslash natijasi har doim bool, ya’ni true yoki false bo‘ladi.

Operator Ma’nosi Misol Natija
== teng 10 == 10 true
!= teng emas 10 != 3 true
> katta 10 > 3 true
< kichik 10 < 3 false
>= katta yoki teng 10 >= 10 true
<= kichik yoki teng 3 <= 10 true
main.go
package main

import "fmt"

func main() {
    yosh := 20
    minimalYosh := 18

    fmt.Println("Teng:", yosh == minimalYosh)
    fmt.Println("Teng emas:", yosh != minimalYosh)
    fmt.Println("Ruxsat etilgan:", yosh >= minimalYosh)
}

Info

= qiymat beradi, == esa tenglikni tekshiradi. Tashqi ko‘rinishi o‘xshash bo‘lsa ham, ularning vazifasi butunlay boshqa.

Sonlarni barcha taqqoslash operatorlari bilan solishtirish mumkin. Matnlar ham leksikografik tartibda taqqoslanadi. bool qiymatlarda faqat == va != ishlatiladi.

Mantiqiy operatorlar

Mantiqiy operatorlar bool qiymatlarni birlashtiradi yoki teskarisiga o‘zgartiradi:

Operator Nomi Qachon true bo‘ladi?
&& VA ikkala shart ham true bo‘lsa
\|\| YOKI shartlardan kamida biri true bo‘lsa
! EMAS operand false bo‘lsa
main.go
package main

import "fmt"

func main() {
    yosh := 22
    chiptasiBor := true
    taqiqlangan := false

    kirishiMumkin := yosh >= 18 && chiptasiBor && !taqiqlangan
    fmt.Println("Kirish mumkin:", kirishiMumkin)
}

Natija true, chunki yosh yetarli, chipta bor va foydalanuvchi taqiqlanmagan.

a b a && b a \|\| b
false false false false
false true false true
true false false true
true true true true

!true natijasi false, !false natijasi esa true.

Qisqa tutashuv

&& va || natija ma’lum bo‘lgach, ifodaning qolgan qismini tekshirmaydi. Bu qisqa tutashuv (short-circuit evaluation) deyiladi:

boluvchi := 0
xavfsiz := boluvchi != 0 && 10/boluvchi > 1

Birinchi shart false bo‘lgani sababli 10/boluvchi bajarilmaydi va nolga bo‘lish yuz bermaydi.

Bit operatorlari

Bit operatorlari butun sonlarning ikkilik ko‘rinishi ustida ishlaydi. Ular ruxsatlar to‘plami, protokollar va past darajali hisoblarda uchraydi.

Operator Amal
& bit bo‘yicha VA
\| bit bo‘yicha YOKI
^ bit bo‘yicha XOR yoki bitlarni inkor qilish
&^ bitni tozalash (AND NOT)
<< chapga surish
>> o‘ngga surish
main.go
package main

import "fmt"

func main() {
    a := 6 // ikkilik ko‘rinishi: 110
    b := 3 // ikkilik ko‘rinishi: 011

    fmt.Println(a & b)  // 010, ya’ni 2
    fmt.Println(a | b)  // 111, ya’ni 7
    fmt.Println(a ^ b)  // 101, ya’ni 5
    fmt.Println(a << 1) // 1100, ya’ni 12
}

Hozir bu operatorlarning vazifasini tanib olish yetarli. Ular kerak bo‘ladigan mavzularda batafsil ko‘rib chiqiladi.

Operatorlar ustuvorligi

Bitta ifodada bir nechta operator bo‘lsa, ayrim amallar boshqalaridan oldin bajariladi:

birinchi := 2 + 3*4   // 14
ikkinchi := (2 + 3) * 4 // 20

Ustuvorlikning soddalashtirilgan tartibi yuqoridan pastga:

  1. *, /, %, <<, >>, &, &^;
  2. +, -, |, ^;
  3. ==, !=, <, <=, >, >=;
  4. &&;
  5. ||.

Ifoda murakkab ko‘rinsa, maqsadni aniq ko‘rsatish uchun qavs ishlating.

Xulosa

Arifmetik operatorlar hisoblaydi, taqqoslash operatorlari bool natija qaytaradi, mantiqiy operatorlar shartlarni birlashtiradi. Tayinlash operatorlari o‘zgaruvchi qiymatini yangilaydi. Butun sonlarni bo‘lishda kasr qismi tashlab yuborilishini va = bilan ==ning farqini esda tuting.

Keyingi darsda qiymatlarni kodning ichida yozish o‘rniga ularni konsoldan kiritishni o‘rganamiz.