Perulangan dan Uji Kondisi (2)

.

Operator Logika

Operator logika adalah operator perhitungan logika, yang berlaku khusus pada nilai bertipe data logika, terdiri dari:

  1. Operasi negasi (not) dengan tanda ! (tanda seru) di depan nilai,
  2. Operasi dan (and) dengan tanda && (dua ampersand) di antara dua nilai,
  3. Operasi atau (or) dengan tanda || (dua garis tegak) di antara dua nilai.

Bagi yang belum mengerti operasi logika, berikut penjelasan singkatnya:

  • Operasi negasi menghasilkan kebalikan dari nilai yang diberikan, sehingga negasi dari benar adalah salah, negasi dari salah adalah benar.
  • Operasi ‘dan’ menghasilkan nilai benar jika dan hanya jika kedua nilai yang diberikan bernilai benar, sehingga hanya benar dan benar saja yang bisa menghasilkan benar.
  • Operasi ‘atau’ menghasilkan nilai salah jika dan hanya jika kedua nilai yang diberikan bernilai salah, sehingga hanya salah dan salah saja yang bisa menghasilkan salah.

Contoh:

// buat dua konstanta bertipe data logika
let a = true
let b = false
!a  // not a = false
!b // not b = true
a && b   // a and b = true  and false = false
a && a // a and a = true and true = true
b && b // b and b = false and false = false
a || b   // a or b = true  or false = true
a || a // a or a = true or true = true
b || b // b or b = false or false = false

Dalam operasi logika, berlaku juga tanda kurung untuk mengubah urutan prioritas perhitungan. Contoh:

// buat dua konstanta bertipe data logika
let a = true
let b = false
!a         // not a = false
!a && b // (not a) and b = false and false = false
!(a && b) // not (a and b) = not false = true
a && b && a    // (a and b) and a = false and true = false
a && b || a // (a and b) or a = false or true = true
a && (b || a) // a and (b or a) = true and true = true
a || b || a    // (a or b) or a  = true or  true  = true
a || b && a // (a or b) and a = true and true = true
a || (b && a) // a or (b and a) = true or false = true

Operator rentang

Operator rentang adalah operator yang menghasilkan kumpulan nilai dari yang terendah (lower bound) ke yang tertinggi (higher bound). Operator ini umum digunakan pada perintah perulangan dan seleksi kondisi. Ada 2 (dua) jenis operator rentang dalam Swift, yaitu:

  1. Operator rentang tertutup (closed range) dengan tanda ... (tiga buah titik) dengan nilai terendah di sebelah kiri dan nilai tertinggi di sebelah kanan. Nilai tertinggi termasuk dalam rentang.
  2. Operator rentang setengah terbuka (half-open range) dengan tanda ..< (dua buah titik dan kurang dari) dengan nilai terendah di sebelah kiri dan nilai tertinggi di sebelah kanan. Nilai tertinggi tidak termasuk dalam rentang.

Contoh:

1 ... 5    // bernilai 1, 2, 3, 4, 5 (rentang tertutup)
1 ..< 5 // bernilai 1, 2, 3, 4 (rentang setengah terbuka)
let c = 10  // buat konstanta c bernilai 10
0 ... c // bernilai 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
0 ..< c // bernilai 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Perlu diperhatikan bahwa operator bergerak dari nilai terendah (sisi kiri) ke tertinggi (sisi kanan), bukan sebaliknya. Sehingga apabila kita menuliskan 10 ... 1 akan terjadi kesalahan program. Oleh karena itu, hati-hati jika menentukan batas rentang dari suatu proses perhitungan. Pastikan hasil perhitungan tidak menyalahi aturan operator rentang ini.

Perulangan

Salah satu kelebihan komputer dibanding manusia adalah bisa melakukan hal yang sama berulang-ulang tanpa rasa bosan dan bisa melakukannya dengan konsisten. Oleh karena itu, di setiap bahasa pemrograman pasti ada perintah untuk melakukan perulangan.

Di bahasa Swift, ada 3 (tiga) jenis perintah perulangan, yaitu:

  1. Perulangan dengan perintah for untuk perulangan dalam jumlah tertentu.
  2. Perulangan dengan perintah while untuk perulangan dengan uji kondisi di awal perulangan.
  3. Perulangan dengan perintah repeat untuk perulangan dengan uji kondisi di akhir perulangan.

Perulangan “for”

Perulangan for atau for-in adalah perulangan yang berdasarkan jumlah perulangan yang dilakukan, atau perulangan yang dilakukan dalam rentang nilai tertentu. Perulangan for bekerja dengan nilai bertipe data rentang. Karena itu, perulangan ini biasanya digunakan untuk menyusuri (iterate) nilai dalam sebuah kelompok, misalnya menampilkan isi penyimpan bertipe deret, mengakses tiap huruf/karakter dalam nilai bertipe teks, dan lain sebagainya. Berikut cara penulisan perintah perulangan for di Swift:

for i in 1 ... 10 {
// kelompok perintah
}

Cara membaca kode program di atas adalah “untuk penyimpan i yang bernilai rentang dari 1 hingga 10, ulangi kelompok perintah berikut”. Pada contoh di atas, karena penyimpan i berisi nilai dari 1 hingga 10, maka kelompok perintah diulang sebanyak 10 kali.

Catatan: Kelompok perintah dibahas pada awal bab Perintah dan Nilai.
for i in 1 ..< 10 {
// kelompok perintah
}

Cara membaca kode program di atas adalah “untuk penyimpan i yang bernilai rentang dari 1 hingga kurang dari 10, ulangi kelompok perintah berikut”. Pada contoh di atas, karena penyimpan i berisi nilai dari 1 hingga 9 (rentang setengah terbuka), maka kelompok perintah diulang sebanyak 9 kali.

i pada contoh di atas adalah penyimpan konstanta. Jadi, perintah for di atas adalah seperti for let i in 1 ..< 10 namun let dihilangkan agar penulisannya lebih singkat. Konstanta i hanya tersedia dalam lingkup kelompok perintah perulangan sehingga begitu keluar dari lingkup perulangan, penyimpan i tak lagi tersedia (tak bisa diakses). Contoh:

for i in 1 ... 10 {
print(i) // mencetak nilai i berulang dari 1 ke 10
}
i = 9   // penyimpan i tak lagi dikenali ⬅︎ salah!

Bagaimana jika kita ingin melakukan perulangan yang bergerak dari nilai tinggi ke rendah atau kebalikan dari nilai rentang? Swift telah menyediakan fungsi reversed() untuk nilai bertipe data rentang yang tugasnya adalah membalik nilai rentang. Contoh:

for i in (1 ... 10).reversed() {
print(i) // mencetak nilai i berulang dari 10 ke 1
}

Contoh perulangan for untuk menampilkan teks per huruf/karakter:

let text = "🐱 and 🐶"   // ya, teks juga menerima emoji
for ch in text.characters {
print(ch) // mencetak isi penyimpan text per huruf
}
for ch in (text.characters).reversed() {
print(ch) // mencetak isi penyimpan text per huruf terbalik
}

Contoh perulangan for untuk menampilkan elemen penyimpan deret:

// buat deret daftar buah
let
fruits = ["🍎","🍓","🍒","🍅"]
// cetak setiap elemen deret buah
for
fruit in fruits {
print(fruit)
}
// cetak setiap elemen deret dan nomor urutnya
for (i, fruit) in fruits.enumerated() {
print("Buah ke-\(i+1) adalah", fruit)
}

Nilai tipe data deret mempunyai fungsi enumerated() yang menghasilkan nilai bertipe data gabungan terdiri dari 2 (dua) elemen, yaitu nomor urut deret bertipe bilangan bulat dan nilai elemen pada nomor urut tersebut.

Keluaran contoh program di atas dalam Xcode Playground. Sumber: sendiri.
Tips: Perintah print() bisa mencetak nilai bertipe data apa pun dengan cara memisahkan nilai yang berbeda tipe data dengan tanda , (koma).

Contoh perulangan for untuk menampilkan elemen penyimpan kamus:

// buat kamus daftar buah
let
fruits = ["🍎":"Apel","🍓":"Stroberi","🍒":"Ceri","🍅":"Tomat"]
// cetak setiap elemen kamus buah
for (emoji, name) in fruits {
print("Buah", emoji, "disebut", name)
}
// cetak setiap emoji elemen kamus buah, abaikan namanya
for (emoji, _) in fruits {
print("Buah", emoji)
}

Mengakses penyimpan kamus dengan perintah for akan mengembalikan tiap pasangan nilai dalam elemen. Jika kita hanya memerlukan salah satu saja dari pasangan dan mengabaikan nilai yang lain, gunakan tanda _ (garis bawah) sebagai pengganti penyimpan pada nilai yang diabaikan.

bersambung ke bagian 3

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.