Modül dersleri (4/5)
Operatörler
Go'da beklediğiniz klasik operatörler var ve birkaç sürpriz var:
aritmetik, karşılaştırma, mantıksal, bitsel. Üçlü operatör yok
(a ? b : c), aşırı yükleme yok, türler arasında örtülü dönüşüm yok.
Sadelik bir özelliktir.
Aritmetik
a, b := 10, 3
fmt.Println(a + b) // 13
fmt.Println(a - b) // 7
fmt.Println(a * b) // 30
fmt.Println(a / b) // 3 ← divisione INTERA tra interi
fmt.Println(a % b) // 1 ← resto (modulo)Arttırma ve eksiltme ifade değil, AÇIKLAMADIR
x++ ve x-- bir değer üretmez: bunlar "eylemlerdir" ve hiçbir şey değildir
daha fazlası. C'deki gibi y := x++ yok.
x := 5
x++ // ok: incrementa x
// y := x++ // ERRORE di compilazione
fmt.Println(x) // 6Karşılaştırmak
== != < <= > >=, bool değerini döndürür. Sayılara ve dizelere uygulanırlar; için
TÜM alanların karşılaştırılabilir olması gerekir (içeride dilim/harita olmamalıdır).
"abc" == "abc" // true
"abc" < "abd" // true (ordine lessicografico)
3 != 4 // trueKısa devre ile mantıksal
&&, ||, !. Soldan sağa kısa devre yapıyorlar: eğer ilki
işlenen sonucu belirlemek için yeterlidir, ikincisi bile değildir
değerlendirildi.
adult := age >= 18
seniorAdult := age >= 18 && age < 65Bitsel
& AND, | VEYA, ^ XOR, << sola kaydırma, >> sağa kaydırma, &^ VE
DEĞİL (biraz net). Bayraklar, ikili ayrıştırma ve
optimizasyonlar:
flags := uint8(0b0000_0011)
flags |= 0b0000_0100 // imposta un bit: 0000_0111
flags &^= 0b0000_0010 // cancella un bit: 0000_0101
hasFlag := flags & 0b0000_0100 != 0 // trueÖrtülü dönüşüm yok
Go'da 1 + 1.5 derler, çünkü her ikisi de türlenmemiş değişmez değerlerdir.
Ancak var i int = 1; i + 1.5 DEĞİL yapmaz: float64(i) + 1.5'e ihtiyacınız vardır.
i := 1
f := 1.5
// i + f // ERRORE
float64(i) + f // 2.5Sıra sende
17'nin 5'e bölümünden kalan kısmı hesaplayıp yazdırın. Beklenen: 2.
İpucu göster
Modülo operatörü %'dir.
3 denemeden sonra çözüm mevcut
Yaş 18 ila 65 arasındaysa doğru, aksi takdirde yanlış yazdırın.
İpucu göster
İki karşılaştırmayı `&&` ile birleştirin.
3 denemeden sonra çözüm mevcut
Bu kod ne yazdırıyor?
a, b := 7, 2
fmt.Println(a/b, a%b)Özet
- Klasik aritmetik; Tam sayılar arasındaki
/tamsayı bölümüdür (keser). ++ve--ifadedir, ifade değildir: hayıry := x++.- Karşılaştırma ve mantıksal operatörler
boolüretir;&&/||kısa devre. - İşaretler ve ikili ayrıştırma için bit düzeyinde
& | ^ << >> &^. - Farklı türler arasında örtülü dönüşüm yok:
type(x)kullanın.