BAB 9: Operator - Dasar Perhitungan dan Logika - Abd. Asis

BAB 9: Operator - Dasar Perhitungan dan Logika

Dari konstanta yang udah kita pelajari di bab sebelumnya, sekarang waktunya mengenal operator—tools yang akan membantu kamu melakukan berbagai operasi dalam program. Operator ini kayak kalkulator digital yang bisa melakukan perhitungan matematika, membandingkan nilai, dan membuat keputusan logis.

Go menyediakan tiga jenis operator utama yang akan sering kamu gunakan: operator aritmatika untuk perhitungan, operator perbandingan untuk membandingkan nilai, dan operator logika untuk mengombinasikan kondisi. Dengan memahami ketiga jenis operator ini, kamu bisa membuat program yang lebih interaktif dan dinamis.

Operator Aritmatika: Kalkulator dalam Code

Operator aritmatika adalah operator yang digunakan untuk melakukan operasi perhitungan matematika. Go mendukung semua operasi dasar matematika yang biasa kamu gunakan.

Jenis-jenis Operator Aritmatika

Berikut adalah operator aritmatika yang tersedia di Go:

OperatorFungsiContoh
+Penjumlahan5 + 3 = 8
-Pengurangan10 - 4 = 6
*Perkalian6 * 7 = 42
/Pembagian15 / 3 = 5
%Modulus (sisa bagi)17 % 5 = 2

Contoh Penggunaan Operator Aritmatika

Mari kita lihat bagaimana menggunakan operator aritmatika dalam program:

package main

import "fmt"

func main() {
    // Deklarasi variable untuk perhitungan
    angka1 := 10
    angka2 := 3
    
    // Operasi aritmatika dasar
    penjumlahan := angka1 + angka2
    pengurangan := angka1 - angka2
    perkalian := angka1 * angka2
    pembagian := angka1 / angka2  // Pembagian integer
    sisaBagi := angka1 % angka2
    
    fmt.Println("=== Hasil Operasi Aritmatika ===")
    fmt.Printf("%d + %d = %d\n", angka1, angka2, penjumlahan)
    fmt.Printf("%d - %d = %d\n", angka1, angka2, pengurangan)
    fmt.Printf("%d * %d = %d\n", angka1, angka2, perkalian)
    fmt.Printf("%d / %d = %d\n", angka1, angka2, pembagian)
    fmt.Printf("%d %% %d = %d\n", angka1, angka2, sisaBagi)
}

Output:

=== Hasil Operasi Aritmatika ===
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3
10 % 3 = 1

Operasi dengan Urutan Prioritas

Sama seperti matematika pada umumnya, Go juga mengikuti urutan prioritas operasi (operator precedence):

package main

import "fmt"

func main() {
    // Operasi kompleks dengan urutan prioritas
    hasil := (((2 + 6) % 3) * 4 - 2) / 3
    
    fmt.Println("Operasi: (((2 + 6) % 3) * 4 - 2) / 3")
    fmt.Printf("Hasil: %d\n", hasil)
    
    // Mari kita hitung step by step
    step1 := 2 + 6        // = 8
    step2 := step1 % 3    // = 2
    step3 := step2 * 4    // = 8
    step4 := step3 - 2    // = 6
    step5 := step4 / 3    // = 2
    
    fmt.Println("\n=== Step by Step ===")
    fmt.Printf("2 + 6 = %d\n", step1)
    fmt.Printf("8 %% 3 = %d\n", step2)
    fmt.Printf("2 * 4 = %d\n", step3)
    fmt.Printf("8 - 2 = %d\n", step4)
    fmt.Printf("6 / 3 = %d\n", step5)
}

Output:

Operasi: (((2 + 6) % 3) * 4 - 2) / 3
Hasil: 2

=== Step by Step ===
2 + 6 = 8
8 % 3 = 2
2 * 4 = 8
8 - 2 = 6
6 / 3 = 2

Operator Perbandingan: Membandingkan Nilai

Operator perbandingan digunakan untuk membandingkan dua nilai dan menghasilkan nilai boolean (true atau false). Operator ini sangat berguna untuk membuat keputusan dalam program.

Jenis-jenis Operator Perbandingan

OperatorFungsiContoh
==Sama dengan5 == 5true
!=Tidak sama dengan5 != 3true
<Lebih kecil dari3 < 5true
<=Lebih kecil atau sama dengan5 <= 5true
>Lebih besar dari7 > 3true
>=Lebih besar atau sama dengan6 >= 6true

Contoh Penggunaan Operator Perbandingan

package main

import "fmt"

func main() {
    nilai := 85
    bataslulus := 75
    
    // Operator perbandingan
    lulus := nilai >= bataslulus
    nilaiSempurna := nilai == 100
    tidakLulus := nilai < bataslulus
    
    fmt.Printf("Nilai: %d\n", nilai)
    fmt.Printf("Batas lulus: %d\n", bataslulus)
    fmt.Printf("Apakah lulus? %t\n", lulus)
    fmt.Printf("Apakah nilai sempurna? %t\n", nilaiSempurna)
    fmt.Printf("Apakah tidak lulus? %t\n", tidakLulus)
    
    // Contoh perbandingan string
    nama1 := "Budi"
    nama2 := "Andi"
    nama3 := "Budi"
    
    fmt.Printf("\n=== Perbandingan String ===\n")
    fmt.Printf("'%s' == '%s' : %t\n", nama1, nama2, nama1 == nama2)
    fmt.Printf("'%s' == '%s' : %t\n", nama1, nama3, nama1 == nama3)
    fmt.Printf("'%s' != '%s' : %t\n", nama1, nama2, nama1 != nama2)
}

Output:

Nilai: 85
Batas lulus: 75
Apakah lulus? true
Apakah nilai sempurna? false
Apakah tidak lulus? false

=== Perbandingan String ===
'Budi' == 'Andi' : false
'Budi' == 'Budi' : true
'Budi' != 'Andi' : true

Tips Penggunaan Layout Format Boolean

Untuk menampilkan nilai boolean dalam fmt.Printf(), gunakan layout format %t:

package main

import "fmt"

func main() {
    umur := 17
    dewasa := umur >= 18
    
    fmt.Printf("Umur: %d tahun\n", umur)
    fmt.Printf("Status dewasa: %t\n", dewasa)
    
    if dewasa {
        fmt.Println("Sudah boleh punya SIM")
    } else {
        fmt.Println("Belum boleh punya SIM")
    }
}

Output:

Umur: 17 tahun
Status dewasa: false
Belum boleh punya SIM

Operator Logika: Mengombinasikan Kondisi

Operator logika digunakan untuk mengombinasikan atau memodifikasi nilai boolean. Operator ini sangat berguna ketika kamu perlu menggabungkan beberapa kondisi dalam satu pengujian.

Jenis-jenis Operator Logika

OperatorFungsiDeskripsi
&&AND (dan)Kedua kondisi harus true
||OR (atau)Salah satu kondisi harus true
!NOT (negasi)Membalik nilai boolean

Contoh Penggunaan Operator Logika

package main

import "fmt"

func main() {
    // Variable boolean untuk demonstrasi
    cuacaCerah := true
    punyaUang := false
    libur := true
    
    fmt.Println("=== Status Kondisi ===")
    fmt.Printf("Cuaca cerah: %t\n", cuacaCerah)
    fmt.Printf("Punya uang: %t\n", punyaUang)
    fmt.Printf("Libur: %t\n", libur)
    
    // Operator AND (&&)
    bisaJalan := cuacaCerah && punyaUang
    fmt.Printf("\nBisa jalan-jalan (cuaca cerah DAN punya uang): %t\n", bisaJalan)
    
    // Operator OR (||)
    bisaRelax := libur || cuacaCerah
    fmt.Printf("Bisa santai (libur ATAU cuaca cerah): %t\n", bisaRelax)
    
    // Operator NOT (!)
    tidakPunyaUang := !punyaUang
    fmt.Printf("Tidak punya uang: %t\n", tidakPunyaUang)
    
    // Kombinasi kompleks
    bisaNonton := (libur && cuacaCerah) || !punyaUang
    fmt.Printf("Bisa nonton di rumah: %t\n", bisaNonton)
}

Output:

=== Status Kondisi ===
Cuaca cerah: true
Punya uang: false
Libur: true

Bisa jalan-jalan (cuaca cerah DAN punya uang): false
Bisa santai (libur ATAU cuaca cerah): true
Tidak punya uang: true
Bisa nonton di rumah: true

Memahami Logika AND, OR, dan NOT

Mari kita pelajari bagaimana operator logika bekerja dengan contoh yang lebih detail:

package main

import "fmt"

func main() {
    fmt.Println("=== Truth Table AND (&&) ===")
    fmt.Printf("true && true = %t\n", true && true)
    fmt.Printf("true && false = %t\n", true && false)
    fmt.Printf("false && true = %t\n", false && true)
    fmt.Printf("false && false = %t\n", false && false)
    
    fmt.Println("\n=== Truth Table OR (||) ===")
    fmt.Printf("true || true = %t\n", true || true)
    fmt.Printf("true || false = %t\n", true || false)
    fmt.Printf("false || true = %t\n", false || true)
    fmt.Printf("false || false = %t\n", false || false)
    
    fmt.Println("\n=== Truth Table NOT (!) ===")
    fmt.Printf("!true = %t\n", !true)
    fmt.Printf("!false = %t\n", !false)
}

Output:

=== Truth Table AND (&&) ===
true && true = true
true && false = false
false && true = false
false && false = false

=== Truth Table OR (||) ===
true || true = true
true || false = true
false || true = true
false || false = false

=== Truth Table NOT (!) ===
!true = false
!false = true

Kombinasi Operator dalam Skenario Nyata

Sekarang mari kita lihat bagaimana mengombinasikan semua jenis operator dalam skenario nyata:

package main

import "fmt"

func main() {
    // Data mahasiswa
    nama := "Sari"
    nilaiUTS := 75
    nilaiUAS := 80
    kehadiran := 85 // persen
    
    // Hitung nilai akhir (40% UTS + 60% UAS)
    nilaiAkhir := (nilaiUTS * 40 / 100) + (nilaiUAS * 60 / 100)
    
    // Syarat lulus
    syaratNilai := nilaiAkhir >= 70
    syaratKehadiran := kehadiran >= 80
    lulus := syaratNilai && syaratKehadiran
    
    // Kategorisasi nilai
    predikatA := nilaiAkhir >= 85
    predikatB := nilaiAkhir >= 75 && nilaiAkhir < 85
    predikatC := nilaiAkhir >= 70 && nilaiAkhir < 75
    
    fmt.Printf("=== Laporan Nilai %s ===\n", nama)
    fmt.Printf("Nilai UTS: %d\n", nilaiUTS)
    fmt.Printf("Nilai UAS: %d\n", nilaiUAS)
    fmt.Printf("Kehadiran: %d%%\n", kehadiran)
    fmt.Printf("Nilai Akhir: %d\n", nilaiAkhir)
    
    fmt.Printf("\n=== Evaluasi ===\n")
    fmt.Printf("Memenuhi syarat nilai (>= 70): %t\n", syaratNilai)
    fmt.Printf("Memenuhi syarat kehadiran (>= 80%%): %t\n", syaratKehadiran)
    fmt.Printf("Status Lulus: %t\n", lulus)
    
    fmt.Printf("\n=== Predikat ===\n")
    fmt.Printf("Predikat A (>= 85): %t\n", predikatA)
    fmt.Printf("Predikat B (75-84): %t\n", predikatB)
    fmt.Printf("Predikat C (70-74): %t\n", predikatC)
}

Output:

=== Laporan Nilai Sari ===
Nilai UTS: 75
Nilai UAS: 80
Kehadiran: 85%
Nilai Akhir: 78

=== Evaluasi ===
Memenuhi syarat nilai (>= 70): true
Memenuhi syarat kehadiran (>= 80%): true
Status Lulus: true

=== Predikat ===
Predikat A (>= 85): false
Predikat B (75-84): true
Predikat C (70-74): false

Tips Format Output yang Rapi

Untuk membuat output yang lebih rapi dan mudah dibaca, kamu bisa menggunakan escape sequence \t untuk menambahkan tab:

package main

import "fmt"

func main() {
    x := 10
    y := 5
    
    fmt.Println("=== Perbandingan Nilai ===")
    fmt.Printf("x = %d, y = %d\n", x, y)
    fmt.Printf("x == y\t: %t\n", x == y)
    fmt.Printf("x != y\t: %t\n", x != y)
    fmt.Printf("x > y\t: %t\n", x > y)
    fmt.Printf("x < y\t: %t\n", x < y)
    fmt.Printf("x >= y\t: %t\n", x >= y)
    fmt.Printf("x <= y\t: %t\n", x <= y)
}

Output:

=== Perbandingan Nilai ===
x = 10, y = 5
x == y  : false
x != y  : true
x > y   : true
x < y   : false
x >= y  : true
x <= y  : false

Operator Assignment Singkat

Go juga menyediakan operator assignment yang mengombinasikan operasi aritmatika dengan assignment:

package main

import "fmt"

func main() {
    angka := 10
    fmt.Printf("Nilai awal: %d\n", angka)
    
    angka += 5  // sama dengan: angka = angka + 5
    fmt.Printf("Setelah += 5: %d\n", angka)
    
    angka -= 3  // sama dengan: angka = angka - 3
    fmt.Printf("Setelah -= 3: %d\n", angka)
    
    angka *= 2  // sama dengan: angka = angka * 2
    fmt.Printf("Setelah *= 2: %d\n", angka)
    
    angka /= 4  // sama dengan: angka = angka / 4
    fmt.Printf("Setelah /= 4: %d\n", angka)
    
    angka %= 3  // sama dengan: angka = angka % 3
    fmt.Printf("Setelah %%= 3: %d\n", angka)
}

Output:

Nilai awal: 10
Setelah += 5: 15
Setelah -= 3: 12
Setelah *= 2: 24
Setelah /= 4: 6
Setelah %= 3: 0

Latihan: Kalkulator Sederhana

Mari kita buat program kalkulator sederhana yang menggunakan semua operator yang sudah kita pelajari:

package main

import "fmt"

func main() {
    fmt.Println("=== KALKULATOR SEDERHANA ===")
    
    // Input angka
    angka1 := 25.0
    angka2 := 4.0
    
    fmt.Printf("Angka pertama: %.1f\n", angka1)
    fmt.Printf("Angka kedua: %.1f\n", angka2)
    
    // Operasi aritmatika
    fmt.Printf("\n=== Operasi Aritmatika ===\n")
    fmt.Printf("%.1f + %.1f = %.1f\n", angka1, angka2, angka1+angka2)
    fmt.Printf("%.1f - %.1f = %.1f\n", angka1, angka2, angka1-angka2)
    fmt.Printf("%.1f * %.1f = %.1f\n", angka1, angka2, angka1*angka2)
    fmt.Printf("%.1f / %.1f = %.1f\n", angka1, angka2, angka1/angka2)
    
    // Operasi perbandingan
    fmt.Printf("\n=== Operasi Perbandingan ===\n")
    fmt.Printf("%.1f == %.1f : %t\n", angka1, angka2, angka1 == angka2)
    fmt.Printf("%.1f != %.1f : %t\n", angka1, angka2, angka1 != angka2)
    fmt.Printf("%.1f > %.1f  : %t\n", angka1, angka2, angka1 > angka2)
    fmt.Printf("%.1f < %.1f  : %t\n", angka1, angka2, angka1 < angka2)
    
    // Operasi logika dengan kondisi
    lebihBesar := angka1 > angka2
    genap1 := int(angka1)%2 == 0
    genap2 := int(angka2)%2 == 0
    
    fmt.Printf("\n=== Operasi Logika ===\n")
    fmt.Printf("Angka1 lebih besar: %t\n", lebihBesar)
    fmt.Printf("Angka1 genap: %t\n", genap1)
    fmt.Printf("Angka2 genap: %t\n", genap2)
    fmt.Printf("Keduanya genap: %t\n", genap1 && genap2)
    fmt.Printf("Salah satu genap: %t\n", genap1 || genap2)
    fmt.Printf("Bukan keduanya genap: %t\n", !(genap1 && genap2))
}

Output:

=== KALKULATOR SEDERHANA ===
Angka pertama: 25.0
Angka kedua: 4.0

=== Operasi Aritmatika ===
25.0 + 4.0 = 29.0
25.0 - 4.0 = 21.0
25.0 * 4.0 = 100.0
25.0 / 4.0 = 6.2

=== Operasi Perbandingan ===
25.0 == 4.0 : false
25.0 != 4.0 : true
25.0 > 4.0  : true
25.0 < 4.0  : false

=== Operasi Logika ===
Angka1 lebih besar: true
Angka1 genap: false
Angka2 genap: true
Keduanya genap: false
Salah satu genap: true
Bukan keduanya genap: true

Ringkasan

Operator adalah fondasi penting dalam programming yang memungkinkan kamu untuk:

  1. Operator Aritmatika - Melakukan perhitungan matematika (+, -, *, /, %)
  2. Operator Perbandingan - Membandingkan nilai dan menghasilkan boolean (==, !=, <, <=, >, >=)
  3. Operator Logika - Mengombinasikan kondisi boolean (&&, ||, !)

Dengan menguasai ketiga jenis operator ini, kamu sudah punya tools yang powerful untuk membuat program yang bisa melakukan perhitungan, membuat keputusan, dan memproses data. Di bab selanjutnya, kita akan mempelajari cara menggunakan operator perbandingan dan logika untuk membuat program yang bisa mengambil keputusan dengan struktur kontrol if-else.

Yang penting diingat: operator ini akan menjadi building blocks untuk semua program yang kamu buat. Jadi pastikan kamu paham betul cara kerjanya, karena hampir setiap program pasti menggunakan operator dalam bentuk tertentu!