Operator didalam Ruby
Pada sub-bagian ini kita akan mempelajari dasar tentang operator yang digunakan dalam Ruby. Ruby mendukung banyak sekali jenis operator, seperti pada bahasa pemrograman terkenal lainnya seperti Java, PHP, Pyhton dan lain-lain.
Banyak operator dalam Ruby sebenarnya adalah proses pemanggilan sebuah method. Contohnya ketika kita menulis kode a + b
, Ruby akan menterjemahkan kode tersebut sebagai a.+(b)
, dimana +
adalah method dari a
, dan b
adalah argumen yang dikirim melalui method +
. Pada tabel dibawah, kita akan mengasumsikan nilai a
dan b
masing-masing adalah 20
dan 10
.
Operator Aritmatik Ruby
Operator | Deskripsi | Contoh |
---|---|---|
+ |
Penjumlahan | a + b = 30 |
- |
Pengurangan | a - b = 10 |
/ |
Pembagian | a / b = 2 |
* |
Perkalian | a * b = 200 |
% |
Modulus - Mendapatkan sisa dari hasil pembagian | a % b = 0 |
** |
Perpangkatan - a pangkat nilai dari b |
a ** b |
Operator Pembanding Ruby
Operator | Deskripsi | Contoh |
---|---|---|
== |
Cek apakah nilai dari kedua sisi sama atau tidak. Jika bernilai sama, maka akan menghasilkan nilai true |
a == b menghasilkan nilai false |
!= |
Cek apakah nilai dikedua sisi memiliki nilai yang berbeda. Jika iya, maka akan menghasilkan nilai true |
a != b menghasilkan true |
> |
Cek apakah nilai yang ada disebelah kiri lebih besar dari pada nilai disebelah kanan | a > b menghasilkan nilai true |
< |
Cek apakah nilai yang ada disebelah kiri lebih kecil dari pada nilai disebelah kanan | a < b menghasilkan nilai false |
>= |
Cek apakah nilai yang ada disebelah kiri lebih besar atau sama dengan nilai yang ada disebelah kanan | a >= b menghasilkan nilai true |
<= |
Cek apakah nilai yang ada disebelah kiri lebih kecil atau sama dengan nilai yang ada disebelah kanan | a <= b menghasilkan nilai false |
<=> |
Operator pembanding kombinasi. Jika nilai kiri dan kanan sama, maka akan menghasilkan nilai 0 . Jika nilai kiri lebih besar dari nilai kanan, maka akan menghasilkan nilai 1 , dan sebaliknya akan menghasilkan nilai -1 |
(a <=> b) menghasilkan 1 |
eql? |
Operator yang akan mengembalikan nilai true jika memiliki kesamaan tipe object dan nilai. |
1 == 1.0 akan menghasilkan true . Namun 1.eql? 1.0 akan menghasilkan false , karena tipe object yang dimiliki berbeda, yakni Float dan Fixnum . |
equal? |
Akan menghasilkan true jika object yang dibandingkan memiliki object_id yang sama |
a = "a"; b = a; a.equal? b akan menghasilkan true . Namun a = "a"; b = a.dup; a.equal? b akan menghasilkan false , karena sudah memiliki object_id yang berbeda. |
Operator Assignment / Pemberi Nilai Ruby
Operator | Deskripsi | Contoh |
---|---|---|
= |
Operator untuk memberikan nilai terhadap suatu variabel atau object. Ini adalah operator paling dasar dan yang akan paling sering digunakan. | c = a + b berarti hasil penjumlahan akan disimpan kedalam local variable c |
+= |
Menjumlahkan nilai yang ada disebelah kanan ke sebelah kiri dan menyimpan hasilnya di variable sebelah kiri | b += a sama artinya dengan b = b + a |
-= |
Menguraing nilai disebelah kiri dengan nilai yang ada disebelah kanan lalu menyimpan hasilnya di variable sebelah kiri | a -= b sama artinya dengan a = a - b |
*= |
Mengalikan nilai disebelah kanan dengan nilai yang ada disebelah kiri lalu menyimpan hasilnya di variable sebelah kiri | b *= a sama artinya dengan b = b * a |
/= |
Membagi nilai disebelah kanan dengan nilai yang ada disebelah kiri lalu menyimpan hasilnya di variable sebelah kiri | a /= b sama artinya dengan a = a / b |
%= |
Melakukan operasi modulus antara nilai disebelah kiri terhadap nilai disebelah kanan lalu menyimpan hasilnya di variable sebelah kiri | a %= b sama artinya dengan a = a % b |
**= |
Melakukan operasi perpangkatan antara nilai disebelah kiri dengan nilai disebelah kanan lalu menyimpan hasilnya divariable sebelah kir | a **= b sama artinya dengan a = a ** b |
Operator Bitwise Ruby
Operator bitwise melakukasi proses bit per bit pada nilai integer. Kita asumsikan bahwa nilai a
dan b
masing-masing adalah 10
dan 20
atau dalam format binari adalah 0000 1010
dan 0001 0100
.
Operator | Deskripsi | Contoh |
---|---|---|
& |
Operator AND . Menghasilkan nilai 1 jika kedua variable memiliki nilai 1 . Selain itu akan menghasilkan nilai 0 |
1 & 2 akan mengasilkan nilai 0 |
| |
Operator OR . Menghasilkan nilai 1 jika salah satu variable memiliki nilai 1 dan menghasilkan 0 jika kedua variable bernilai 0 |
1 | 2 menghasilkan nilai 3 |
^ |
Operator XOR . Menghasilkan nilai 1 jika kedua variable memiliki nilai yang berbeda |
1 ^ 2 menghasilkan nilai 3 |
~ |
Operator NOT . Mengkonversi nilai setiap bit ke nilai yang berlawanan |
Jika (~a) , maka untuk a nilai binernya akan menjadi 1111 0101 |
<< atau >> |
Operator Left Shift dan Right Shift. Operator ini digunakan untuk memindahkan atau menggeser bit pada nilai biner sebesar nilai yang diberikan pada variable disisi kanan. | Jika a adalah 0000 1010 , maka a >> 2 menghasilkan 0000 0010 karena nilai bit yang digeser kekanan sebesar 2 (dua) bit, dan sebaliknya dengan operator Left Shift |
Untuk mempermudah dalam memahami operator bitwise, perhatikan tabel dibawah ini:
Operator Bitwise | 0000 1010 0101 0010 |
---|---|
AND |
0000 0010 |
OR |
0101 1010 |
XOR |
0101 1000 |
Operator logika Ruby
Berikut ini adalah tabel operator logika di Ruby:
Operator | Deskripsi | Contoh |
---|---|---|
&& atau and |
Operator logika AND . Jika kedua nilai pembanding bernilai true maka menghasilkan nilai true |
true && true atau true and true menghasilkan true |
|| atau or |
Operator logika OR . Jika salah satu nilai pembanding bernilai true maka menghasilkan nilai true |
false or true atau false || true menghasilkan true |
! atau not |
Operator logika NOT . Digunakan untuk mengubah nilai yang didapat menjadi kebalikannya |
Jika !false atau not false maka menghasilkan true dan sebaliknya. |
[info] Catatan
Jika kita perhatikan tabel diatas, terdapat 2 (dua) cara untuk menggunakan masing-masing dari operator logika tersebut. Sebenarnya, kedua cara yang digunakan tersebut bekerja dengan cara yang sama, hanya saja ada sedikit perbedaan diantara keduanya. Yakni urutan pengeksekusian kode atau lebih sering disebut dengan Operator Precedence dimana
&&
memiliki hak lebih tinggi dibandingkan denganAND
sehingga akan dieksekusi lebih dulu oleh Ruby dan ini juga berlaku untuk operator||
dimana memiliki hak lebih tinggi dibandingkan denganOR
. Kita akan mengetahui lebih lanjut tentang urutan hak eksekusi kode di sub-bagian selanjutnya.
Operator Ternary Ruby
Ada 1 (satu) operator didalam Ruby yang disebut dengan operator ternary. Operator ini bisa dibilang sama dengan kondisi if..else
atau bisa juga disebut dengan inline condition. Operator ternary juga ada didalam bahasa pemrograman lain seperti Javascript.
Cara penggunaan operator ternary pertama menggunakan karakter tanda tanya (?
) lalu disusul dengan karakter titik dua (:
). Contoh penggunaannya adalah a > 1 ? true : false
. Cara membacanya adalah jika a
lebih besar dari 1
, maka akan mengambil nilai atau variabel disebelah kiri dari karakter :
, dan sebaliknya jika statement yang dievaluasi bernilai false
.
Operator Range Ruby
Operator range didalam Ruby cukup sederhana. Perhatikan tabel dibawah ini:
Operator | Deskripsi | Contoh |
---|---|---|
.. |
Operator range yang bersifat inclusive | Jika (1..10) , maka akan membuat daftar angka dari 1 hingga 10. Disini 10 ikut dihitung karena bersifat inclusive |
... |
Operator range yang bersifat exclusive | Jika (1..10) , maka akan membuat daftar angkar dari 1 hingga 9. Disini 10 tidak ikut dihitung karena bersifat exclusive |
Operator range ini biasa digunakan untuk proses perulangan atau looping, misalnya (1..10).each { |i| puts i }
dan lain-lain.
[info] Catatan
Selain membuat sebuah daftar angka, kita juga bisa membuat sebuah daftar huruf alfabet seperti
("a".."z").map { |alfabet| puts alfabet }
Operator defined?
, .
dan ::
Ada beberapa operator spesial dalam Ruby yang memang memiliki fungsi yang spesifik atau khusus. Yang pertama adalah operator defined?
. Operator defined?
biasanya digunakan untuk mengecek apakah sebuah method, class ataupun module sudah didefinisikan. Operator defined?
akan mengembalikan nilai nil
jika variabel yang dicek tidak ada atau belum didefinisikan dan jenis data dari ekspresi yang dievaluasi oleh operator defined?
. Berikut adalah beberapa contoh penggunaan operator defined?
.
defined? foo # Jika foo tidak ditemukan, maka nilai nil yang akan dikembalikan
foo = 1
defined? foo # Mengembalikan nilai "local-variable"
defined? $_ # Mengembalikan nilai "global-variable"
defined? __FILE__ # Mengembalikan nilai "expression"
Yang kedua adalah operator titik atau dot (.
) dan 2 (dua) titik dua atau double colon (::
). Kedua operator ini biasa digunakan untuk pemanggilan sebuah method ataupun konstan. Untuk diingat, class dan method juga bisa disebut sebagai konstan. Namun umumnya hanya operator dot sajalah yang digunakan untuk pemanggilan sebuah method, sedangkan double colon lebih sering digunakan lebih spesifik untuk pemanggilan sebuah konstan.
Perhatikan contoh dibawah.
CONS = 3
class Foo
CONS = 2
def initialize
puts CONS
end
end
puts Foo::CONS # Memanggil sebuah Constant didalam sebuah Class
Foo.new # Memanggil method "new"