Bekerjasama Dengan Operator, Session 5: Cast Operators

9:14 AM , 0 Comments

Hallo para pembaca yang budiman, ketemu lagi dengan saya setelah beberapa lama istirahat nyurhat karena banyak kesibukan kemaren. Okelah kita lanjutkan curhatan sebelumnya mengenai Operator, terakhir kemaren saya ngecurhat soal Bitwise Operators yang isinya mengenai operator-operator yang digunakan untuk memanipulasi tiap-tiap bit kode binary yang merepresentasikan variable character atau integer. Nah sekarang saya mau ngelanjutin curhatan saya, kali ini tentang Cast Operators.


Cast Operators digunakan untuk mengkonversi suatu tipe data menjadi tipe data yang lainnya dengan menggunakan operator "(tipe baru)". Cast operators diperlukan karena Java compiler tidak mengijinkan kita (secara tidak sengaja) mengkonversi data dari satu tipe data ke tipe data lainnya akibat dari kita melakukan operasi aritmatik dimana hasil dari operasi tersebut Java akan secara otomatis melakukan konversi tipe data dan ada informasi yang terbuang dari data tersebut.
int a = 2.65 + 3;
Operasi di atas akan menghasilkan error karena kita mencoba menjumlahkan data bertipe double floating point (2.65) dan integer/int (3) dan Java secara otomatis akan mengkonversi hasilnya menjadi bertipe double floating point, sedangkan kita mengharapkan hasilnya bertipe integer.
~ Kenapa begitu? Kan sama-sama angka juga.
* Ya itu kan dalam dunia manusia, kalo dalam dunia komputer, terutama Java, ga ngeliat itu angka atau huruf, tapi tipe datanya, apakah byte, short, integer, dll.
Java tidak mengijinkan operasi ini karena akan terdapat informasi yang hilang karena Java memberikan data bertipe double floating point (dengan koma) sedangkan kita menginginkan data bertipe integer (tanpa koma). Atau dapat diilustrasikan teman kita memberikan kita minuman sebanyak 1,5 liter sedangkan botol-botol yang kita miliki hanya berukuran 1 liter, maka akan ada minuman sebanyak 0,5 liter yang terbuang.
int a = 2.65 + 3;
Pada saat kita melakukan operasi di atas Java akan berteriak,
"Hai kamu, kami peringatkan kami tidak bisa mengkonversi data tersebut karena akan ada informasi yang hilang (angka di belakang koma)."
Maka peranan Cast Operators ini adalah untuk menjawab bentakan si Java,
"Hai Java, tidak apa-apa kalo ada sebagian informasi yang hilang, jadi konversi aja ga usah protes."
Dan Java pun akan menjawab,
"Oke, ya sudah kalo maunya gitu" 
Jadi untuk membungkam Java ketika melakukan operasi aritmatik di atas kita melakukannya seperti berikut.
int a = (int) 2.65 + 3;// Hasilnya 5, bukan 5.65
int b = (int) (1.5 + 3.2);//Hasilnya 4, bukan 4.7
Jadi pada intinya Cast Operators ini berfungsi untuk memberitahu Java bahwa kita memiliki intensi/maksud untuk merubah tipe data sesuai kebutuhan kita.

Untuk konversi tipe data primitive, selain karena perbedaan jenis data karena keberadaan koma java juga akan berteriak jika kita berusaha mengkonversi data yang walopun sama-sama tidak memiliki koma tapi di luar jangkauan, sehingga akan ada informasi yang hilang. Misalnya,
byte a = 100 + 50;
Kode di atas akan menghasilkan error karena kita berusaha menjumlahkan dua data integer dan mengharapkan hasil berupa byte. Data byte hanya memiliki jangkauan dari -128 sampai 127, sedangkan hasil dari penjumlahan tersebut sebesar 150. Untuk membungkam Java biar ga teriak tinggal ditambahkan cast (byte).
byte a = (byte) (100 + 50);
/*
Walopun Java diem tapi hasil dari penjumlahan ini bukan 150 tapi -106, silakan dicoba
*/
Cast Operators juga digunakan untuk merubah data berupa objek dari superclass objek ke subclass objek agar kita bisa mengakses member dari objek subclass. Contoh,
class Kendaraan{
    int jumlahPintu;
    int jumlahRoda;
    String merek;

    public int getJumlahPintu(){
        return jumlahPintu;
    }

    public int getJumlahRoda(){
        return jumlahRoda;
    }

    public String getMerek(){
        return merek;
    }
}

class Mobil extends Kendaraan{
    double diameterRoda;

    public double getDiameterRoda(){
        return diameterRoda;
    }
}

class Motor {
    String jenisVelg;

    public String getJenisVelg(){
        return jenisVelg;
    }
}


class Application {
    public static void main (String[] args){
        Kendaraan kendaraan= new Kendaraan();
        kendaraan.getDiameterRoda();
        /*
         Baris di atas akan menghasilkan error karena objek kendaraan tidak memiliki akses terhadap method getDiameterRoda(). Untuk mendapatkan akses terhadap method tersebut kita perlu mengkonversi objek tersebut menjadi objek yang memiliki method tersebut, yaitu Mobil.
        */

        Mobil mobil = (Mobil) kendaraan;
        mobil.getDiameterRoda();

        Motor motor = (Motor) kendaraan;
        /*
         Konversi di atas tidak bisa dilakukan (error) karena class Motor bukan subclass dari (tidak meng-extends) class Kendaraan.
        */
    }
}

Sepertinya udah ya curhat saya soal  Cast Operators ini, semoga kalian ga neg sama uneg-uneg saya. hehehe

Terima kasih udah mau mampir baca uneg-uneg saya. Sampai ketemu lagi di curhatan berikutnya.

0 comments: