Daftar operator
Terdapat dua jenis operator:
- Operator ikaritas (unary)
- Operator dwiritas (binary)
- Operator berlapis (compound operator)
Operator ikaritas
Operator ikaritas adalah operator yang hanya bisa dioperasikan pada satu operand/variabel/objek.
= (penempatan nilai)
Nilai bisa ditempatkan pada variabel saat variabel tersebut pertama kali didefinisikan:
ada satu = 1
ada dua = satu + satu
Atau saat variabel telah terdefinisikan:
ada tiga
tiga = dua + satu
Penempatan pada banyak variabel saat inisialiasi juga dapat dilakukan bersamaan, dipisahkan dengan tanda ,
:
ada empat = dua + dua,
lima = 4 + 1,
enam = tiga * dua
Jika variabel telah dideklarasikan, kita juga bisa melakukan penempatan pada banyak variabel sekaligus, dipisahkan dengan tanda ,
:
empat = dua * dua, lima = empat + satu, enam = tiga + tiga
Operator penempatan juga dapat digunakan dengan opreator keduk, menjadikan operasi penempatan nilai lebih sederhana:
empat, lima, enam = ..[4, 5, tiga * dua]
ada tujuh, delapan, sembilan = ..<7, empat + empat, lima + empat>
++ (naikSetingkat)
Metode yang akan dipanggil: naikSetingkat
Operator ini menaikkan nilai dari suatu variabel ke satu tingkat yang lebih tinggi.
ada a = 1
a++ // menjadi 2
Operator ini membutuhkan variabel, dan operator ini akan mengubah nilai dari variabel itu sendiri.
Contoh penerapan operator ini pada kelas buatan sendiri.
kelas Cabai {
ada level
fn sta baru() {
punca.tuk(fn (obj) {
obj.level = "normal"
})
}
fn naikSetingkat() {
jika ini.level == "normal" {
ini.level = "pedas"
} lain jika ini.level == "pedas" {
ini.level = "sangat pedas"
} lain jika ini.level = "sangat pedas" {
ini.level = "pedas gila"
}
ini
}
}
ada cabai = Cabai.baru
cabai++
cabai++
cetak(cabai)
Menjalankan kode diatas akan mengeluarkan hasil seperti dibawah ini.
<Cabai: level="sangat pedas" @0x1e380d0>
-- (turunSetingkat)
Metode yang akan dipanggil: turunSetingkat
Operator ini menurunkan nilai dari suatu variabel ke satu tingkat yang lebih rendah.
ada a = 1
a-- // menjadi 0
Operator ini membutuhkan variabel, dan operator ini akan mengubah nilai dari variabel itu sendiri.
Contoh penerapan operator ini pada kelas buatan sendiri.
kelas Cabai {
ada level
fn sta baru() {
punca.tuk(fn (obj) {
obj.level = "normal"
})
}
fn turunSetingkat() {
jika ini.level == "pedas gila" {
ini.level = "sangat pedas"
} lain jika ini.level == "sangat pedas" {
ini.level = "pedas"
} lain jika ini.level = "pedas" {
ini.level = "normal"
}
ini
}
}
ada cabai = Cabai.baru
cabai.level = "sangat pedas"
cabai--
cetak(cabai)
Menjalankan kode diatas akan mengeluarkan hasil seperti dibawah ini.
<Cabai: level="pedas" @0x693c10>
! (negasi Boolean)
Operator negasi yang menegasikan nilai Boolean
menjadi kebalikannya, nil
menjadi salah
, dan nilai sebenar lain menjadi salah
.
cetak(!benar)
cetak(!salah)
cetak(!nil)
cetak(!123)
- (negasi angka)
Operator ikaritas -
mengubah angka yang positif menjadi negatif, dan negatif menjadi positif.
ada angka1 = -12.5
ada angka2 = 42
cetak(-angka1)
cetak(-angka2)
[] (padaPosisi)
Operator ini digunakan untuk mengakses elemen pada lokasi tertentu dalam Deret
, Rangkap
, Peta
atau kelas-kelas lain yang mengimplementasikan metode padaPosisi
.
ada ibukota = ["Jakarta", "London", "Tokyo"]
cetak(ibukota[0])
[k: n] (isiDi)
Operator ini digunakan untuk memanipulasi nilai pada lokasi tertentu dalam Deret
, Peta
atau kelas-kelas lain yang mengimplementasikan metode isiPosisi
.
ada biodata = {"nama": "Adam Notodikromo", "umur": 5}
biodata = biodata["umur": 6]
.. (keduk)
Operator ini sering disandingkan dengan objek dari kelas Deret
ataupun Rangkap
dalam suatu operasi penempatan.
ada nama, umur = ..["Adam Notodikromo", 6]
Operator dwiritas
Operator dwiritas adalah operator yang membutuhkan dua operand/variabel/objek untuk dapat dioperasikan.
+ (tambah)
Operator ini digunakan untuk menambahkan suatu objek ke objek lain. Operator ini sangat sering digunakan dengan tipe data angka seperti Integer
dan Real
, dan juga Deret
.
cetak(1 + 2)
cetak([1] + [2])
Contoh penerapan operator +
pada kelas buatan sendiri adalah sebagai berikut.
kelas Pecahan {
ada pembilang
ada penyebut
fn sta baru(pembilang, penyebut) {
baru.tuk(fn (p) {
p.pembilang = pembilang
p.penyebut = penyebut
})
}
fn tambah(pecLain) {
tuntut pecLain itu Pecahan
jika penyebut == pecLain.penyebut {
Pecahan.baru(pembilang + pecLain.pembilang, penyebut)
} lain {
// menyamakan penyebut
ada pIni = Pecahan.baru(pembilang * pecLain.penyebut, penyebut * pecLain.penyebut)
ada pItu = Pecahan.baru(pecLain.pembilang * penyebut, pecLain.penyebut * penyebut)
pIni + pItu
}
}
}
ada p1 = Pecahan.baru(1, 3)
ada p2 = Pecahan.baru(2, 7)
cetak(p1 + p2)
- (kurang)
Operator ini digunakan untuk mengurangi suatu objek dari objek lain. Operator ini sangat sering digunakan dengan tipe data angka seperti Integer
dan Real
, dan juga Deret
.
cetak(5 - 1)
cetak(-1.1253 - 5)
Contoh penerapan operator -
pada kelas buatan sendiri adalah sebagai berikut.
kelas Pecahan {
ada pembilang
ada penyebut
fn sta baru(pembilang, penyebut) {
baru.tuk(fn (p) {
p.pembilang = pembilang
p.penyebut = penyebut
})
}
fn kurang(pecLain) {
tuntut pecLain itu Pecahan
jika penyebut == pecLain.penyebut {
Pecahan.baru(pembilang - pecLain.pembilang, penyebut)
} lain {
// menyamakan penyebut
ada pIni = Pecahan.baru(pembilang * pecLain.penyebut, penyebut * pecLain.penyebut)
ada pItu = Pecahan.baru(pecLain.pembilang * penyebut, pecLain.penyebut * penyebut)
pIni - pItu
}
}
}
ada p1 = Pecahan.baru(1, 3)
ada p2 = Pecahan.baru(2, 7)
cetak(p1 - p2)
* (ganda)
Operator ini digunakan untuk menggandakan/mengalikan suatu objek dengan objek lain. Operator ini sangat sering digunakan dengan tipe data angka seperti Integer
dan Real
.
cetak(2 * 5)
cetak(2.5 * 5)
Contoh penerapan operator *
pada kelas buatan sendiri adalah sebagai berikut.
kelas Porsi {
ada isi = {}
fn ganda(angka) {
tuntut angka itu Angka
ada isiBaru = {}
isi.tiap(fn (n, k) {
isiBaru = isiBaru[n: k * angka]
})
Porsi.baru.tuk(fn (p) { p.isi = isiBaru })
}
}
ada p = Porsi.baru
p.isi = {"Nasi": 1, "Ayam Goreng": 2, "Es Soda": 1}
cetak(p * 2)
/ (bagi)
Operator ini digunakan untuk menggandakan/mengalikan suatu objek dengan objek lain. Operator ini sangat sering digunakan dengan tipe data angka seperti Integer
dan Real
.
cetak(5 / 2)
cetak(15.12 / 2.33)
Contoh penerapan operator /
pada kelas buatan sendiri adalah sebagai berikut.
kelas Porsi {
ada isi = {}
fn bagi(angka) {
tuntut angka itu Angka
ada isiBaru = {}
isi.tiap(fn (n, k) {
isiBaru = isiBaru[n: k.keRiil / angka]
})
Porsi.baru.tuk(fn (p) { p.isi = isiBaru })
}
}
ada p = Porsi.baru
p.isi = {"Nasi": 1, "Ayam Goreng": 2, "Es Soda": 1}
cetak(p / 2)
% (modulo)
Operator ini sering digunakan pada tipe data Integer
yang fungsinya adalah untuk mencari sisa hasil bagi suatu bilangan Integer
dengan bilangan Integer
lainnya. Operator.
cetak(5 % 2)
** (pangkat)
Operator ini umum digunakan dengan tipe data turunan dari Angka
. Dengan operator ini, kita bisa mendapatkan bilangan hasil pangkat antara bilangan tersebut dengan bilangan lainnya.
cetak(4 ** 7)
cetak(2 ** 2.5)
== (sama?)
Operator yang mengutus benar
jika dua objek dapat dianggap sama.
cetak(1 == 1)
cetak("Gara" == "Gara")
cetak(benar == salah)
Contoh penerapan operator ==
ini pada kelas buatan sendiri adalah sebagai berikut.
kelas Siswa {
ada nomorInduk
ada nama
fn sta baru(nomorInduk, nama) {
baru.tuk(fn (s) {
s.nomorInduk = nomorInduk
s.nama = nama
})
}
fn sama?(siswaLain) {
nomorInduk == siswaLain.nomorInduk &&
nama == siswaLain.nama
}
}
ada s1 = Siswa.baru(10122, "Feriawan")
ada s2 = Siswa.baru(10123, "Ferlin")
ada s3 = Siswa.baru(10122, "Feriawan")
cetak(s1 == s3)
cetak(s1 == s2)
cetak(s2 == s3)
!= (beda?)
Operator yang mengutus benar
jika dua objek tidak dapat dianggap sama.
cetak(benar != salah)
cetak(1 != 1)
Meskipun operator ini dapat ditimpa disuatu kelas dengan cara mengimplementasikan metode beda?
, ada baiknya hal tersebut tidak dilakukan.
=~ (sesuai?)
Operator yang mengutus benar
jika suatu objek dapat dinyatakan sesuai dengan suatu pola tertentu. Operator ini akan sering digunakan untuk mencocokkan suatu Kata
dengan suatu EkspresiRegular
.
ada erEmail = #r{^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$}
cetak("gara@kodegara.net" =~ erEmail)
cetak("bukan email yang @benar.com" =~ erEmail)
Operator ini juga dapat digunakan pada tipe data Riil
untuk mengecek apakah suatu nilai Riil
mendeketai nilai Riil
lainnya:
ada a = 1.25
ada b = a - 0.005
cetak(a =~ b)
Contoh penerapan operator =~
ini pada kelas buatan sendiri adalah sebagai berikut.
// representasi seluruh warna dalam komputer dihitung dari
// perpaduan 3 komponen warna utama: merah, hijau, biru
kelas Warna {
ada merah, hijau, biru
fn sta baru(merah, hijau, biru) {
baru.tuk(fn (w) {
tuntut merah.antara?(0, 255)
tuntut hijau.antara?(0, 255)
tuntut biru.antara?(0, 255)
w.merah = merah
w.hijau = hijau
w.biru = biru
})
}
fn sesuai?(wLain) {
((persenBedaMerah(wLain) +
persenBedaHijau(wLain) +
persenBedaBiru(wLain)) / 3 * 100) < 50.0
}
pribadi {
fn persenBedaMerah(wLain) { (merah - wLain.merah).mutlak.keRiil / 255 }
fn persenBedaHijau(wLain) { (hijau - wLain.hijau).mutlak.keRiil / 255 }
fn persenBedaBiru(wLain) { (biru - wLain.biru).mutlak.keRiil / 255 }
}
}
ada hijauTua = Warna.baru(0, 100, 0)
ada hijauLimau = Warna.baru(50, 205, 50)
ada merahMuda = Warna.baru(255, 105, 180)
ada tomat = Warna.baru(255, 99, 71)
cetak(hijauTua =~ hijauLimau)
cetak(hijauLimau =~ merahMuda)
cetak(tomat =~ merahMuda)
> (lebihDari?)
Operator yang mengutus benar
jika suatu objek dapat dinyatakan lebih besar atau lebih tinggi urutannya dari objek lain. Operator ini sering digunakan untuk membandingkan suatu Angka
(baik itu Integer
ataupun Riil
) dengan Angka
lainnya.
cetak(1.1 > 1)
cetak(2 > 3)
cetak(3 > 2)
Operator >
ini juga dapat diterapkan pada kelas buatan sendiri dengan menimplementasikan metode lebihDari?
.
>= (samaAtauLebihDari?)
Operator yang mengutus benar
jika suatu objek memenuhi salah satu syarat berikut ini:
- Lebih besar atau lebih tinggi urutannya dari objek lain
- Kedua objek dapat dinyatakan sama satu dengan lainnya
Operator ini sering digunakan untuk membandingkan suatu Angka
dengan Angka
lainnya.
cetak(1.1 >= 1.1)
cetak(2 >= 3)
cetak(3 >= 2)
Operator >=
ini juga dapat diterapkan pada kelas buatan sendiri dengan mengimplementasikan metode samaAtauLebihDari?
.
< (kurangDari?)
Operator yang mengutus benar
jika suatu objek dapat dinyatakan lebih kecil atau lebih rendah urutannya dari objek lain. Operator ini sering digunakan untuk membandingkan suatu Angka
(baik itu Integer
ataupun Riil
) dengan Angka
lainnya.
cetak(1.1 < 1)
cetak(2 < 3)
cetak(3 < 2)
Operator <
ini juga dapat diterapkan pada kelas buatan sendiri dengan mengimplementasikan metode kurangDari
.
<= (samaAtauKurangDari?)
Operator yang mengutus benar
jika suatu objek memenuhi salah satu syarat berikut ini:
- Lebih kecil atau lebih rendah urutannya dari objek lain
- Kedua objek dapat dinyatakan sama satu dengan lainnya
Operator ini sering digunakan untuk membandingkan suatu Angka
dengan Angka
lainnya.
cetak(1.1 <= 1.1)
cetak(2 <= 3)
cetak(3 <= 2)
Operator <=
ini juga dapat diterapkan pada kelas buatan sendiri dengan mengimplementasikan metode samaAtauKurangDari?
.
&& (logika "dan")
Operator logika yang mengutus nilai sebenar jika dua objek bernilai sebenar.
cetak(benar && benar)
cetak(1 && 2)
cetak(1 && salah)
cetak(1 && nil)
|| (logika "atau")
Operator logika yang mengutus nilai sebenar jika salah satu objek bernilai sebenar.
cetak(salah || benar)
cetak(salah || 123)
cetak(nil || benar)
<< (dorongMasuk!)
Operator ini mungkin akan sangat jarang digunakan. Belum ada tipe data yang menggunakan operator ini.
Contoh penerapan operator <<
ini pada kelas buatan sendiri adalah sebagai berikut.
kelas RuangKelas {
ada tingkat
ada derSiswa = []
fn dorongMasuk!(siswa) {
tuntut siswa itu Siswa
jika siswa.klas.tingkat == tingkat {
jika !derSiswa.berisi?(siswa) {
derSiswa += [siswa.nama]
}
} lain {
lempar "Beda tingkatan"
}
}
}
>> (dorongKeluar!)
Operator ini mungkin akan sangat jarang digunakan. Belum ada tipe data yang menggunakan operator ini.
Contoh penerapan operator >>
ini pada kelas buatan sendiri adalah sebagai berikut.
kelas RuangKelas {
ada derSiswa = []
fn dorongKeluar!(siswa) {
tuntut siswa itu Siswa
ada indeks = derSiswa.cari(siswa)
jika indeks != nil && indeks >= 0 {
ada terhapus, derSiswaBaru = ..derSiswa.hapusDi(indeks)
derSiswa = derSiswaBaru
terhapus
}
}
}
() (picu)
Operator ini digunakan untuk memicu suatu fungsi. Namun, jika sebuah metode dengan nama picu
didefinisikan di dalam sebuah kelas, maka instansi dari kelas tersebut dapat dipicu layaknya suatu fungsi, seperti dalam kasus Rangkap::Pabrik
yang telah kita diskusikan disini.
Umumnya sebaiknya kita tidak mendefinisikan metode ini dalam suatu kelas, tapi jika dirasa diperlukan dan tepat dalam penggunaannya, maka tentu kita bisa menggunakan fitur ini.
Contoh penerapan operator ()
ini pada kelas buatan sendiri adalah sebagai berikut. Kode berikut hanyalah demonstrasi, dan bukan merupakan contoh penerapan operator ()
yang layak ditiru.
kelas Contoh {
fn picu(rgArg) {
cetak("aku dipicu dengan argumen yakni: " + rgArg)
}
}
Operator berlapis
Operator berlapis adalah operator yang melibatkan satu variabel dan suatu objek. Terdapat empat jenis operator berlapis:
+=
(setara denganvar = var + obj
)-=
(setara denganvar = var - obj
)*=
(setara denganvar = var * obj
)/=
(setara denganvar = var / obj
)
Contoh penggunaan operator berlapis:
ada angka = 1
angka += 1
cetak(angka)
ada deret = [1, 2, 3]
deret += [4, 5, 6]
cetak(deret)