Kenali Data Type Supaya Tidak Salah Pilih
Selamat sore para pembaca yang baik hatinya, berjumpa lagi dengan saya mantan mahasiswa ekonomi yang konon katanya nyasar. Pada curhatan sebelumnya saya beberapa kali menyebut kata "data type". Apa sih data type? Ya kalo diterjemahin mentah ke dalam bahasa Indonesia jadinya tipe data. :P
Bahasa Java ga sesimple bahasa jawa, apalagi bahasa Indonesia, bahasa Java adalah strongly typed language. Ketika kita membuat program dalam bahasa Java kita harus mendefinisikan tipe-tipe data yang akan kita buat dalam program tersebut. Misalnya kita akan membuat variable
Java berbeda dengan javascript yang ketika membuat variable cukup dengan menambahkan kata "
Dalam bahasa Java ada 3 bentuk data type, yaitu Primitive Type, User-Defined Type, dan Array Type.
Bukan, primitive type adalah katagori tipe data yang didefinisikan atau dibuat oleh si Java itu sendiri, kita sebagai (calon) developer tinggal memanfaatkan saja, nilai yang disimpan dalam data bertipe primitive ini adalah non-objek, hanya data biasa, seperti angka 1, atau huruf a, atau nilai benar atau salah. Berikut ringkasan jenis primitive data type.
Mari gali sedikit saja apa maksudnya dari tabel diatas (cuma tahu sedikit, hehehe).
Yang pertama, yang paling atas, adalah data type Boolean. Variable yang didefinisikan ke dalam data type Boolean akan memiliki nilai berupa
Lanjut ke nomor 2, kita ketemu dengan Character. Pada dasarnya setiap yang kita ketik adalah character, bisa berupa angka, huruf, simbol, tanda baca, dll. Character memiliki ukuran sebesar 16 bit, maksudnya adalah setiap kita mendeklarasikan sebuah variable bertipe
Berikutnya, ada 4 data type untuk menyimpan data berupa angka bulat.
Jika diperhatikan keempat data type tersebut memiliki ukuran, nilai minimum, dan nilai maksimum yang berbeda, makin ke bawah makin besar. Ukuran data dan nilai minimum-maksimum memiliki hubungan. Untuk memahami konsepnya sepertinya cukup dijelaskan untuk yang tipe byte sebagai ilustrasi.
byte memiliki ukuran sebesar 8 bit. Tadi di atas sudah dijelaskan masalah memori, maka variable bertipe byte akan membutuhkan alokasi memori sebesar 8 bit untuk menyimpan data. Dari dalam tabel dapat dilihat bahwa semakin besar ukurannya maka jangkauan nilainya juga semakin besar.
Karena setiap bit itu merepresentasikan banyaknya digit kode binary, pernah denger binary? Ya, itu, yang angka 01010101 dst. Jadi jika sebuah data berukuran 8 bit dia akan menggunakan 8 digit kode binary yang diisi angka 0 atau 1.
Jadi, misalnya memori yang dialokasikan sebesar 8 bit maka nilai minimumnya adalah sebesar -(28-1) atau -(27) = -128 dan nilai maksimumnya sebesar 28-1-1 = 27-1 = 127. Angka 127 akan memiliki kode binary 01111111. Angka yang paling kiri menunjukan positif atau negatif, jika 0 maka positif jika 1 maka negatif. Untuk ilustrasi kode binary dibawah merepresentasikan angka 19,
Sedangkan untuk angkan -19 tidak semena-mena mengubah angka 0 di depan menjadi 1. Kode binary untuk angka -19 adalah 11101101. Sebenarnya saya masih belum paham masalah kode binary untuk yang minus ini. Jika pembaca ada yang mengerti tolong dijelaskan dengan simpel kepada saya yang masih pemula ini.
Tapi yang saya pahami dari angka -19 adalah kode binarynya 19 dibalik dari 0 jadi 1 dan 1 jadi 0 kemudian ditambahkan 1. Kode binary 19 adalah 00010011 dibalik menjadi 11101100 kemudian ditambahkan 1 jadi 11101101.
Karena sudah 1 maka ditambah 1 jadi 0, seperti 5+6, ada sisa lagi 1 digeser ke kiri, karena dikirinya 0 maka jadi 1, selesai, jadinya 11111110. Contoh lagi misalnya 4, kode binarynya 000000100 dibalik jadi 11111011 ditambah 1 jadi 11111100. (Mohon dikoreksi kalo salah :D)
Akhirnya saya paham mengenai kode binary untuk nilai negatif, lupakan penjelasan binary negatif sebelumnya, agak ngasal memang.
Kita ambil contoh terakhir, yaitu 4, kode binarynya adalah 000000100, sedangkan -4 kode binarynya 11111100 (sama kayak penjelasan sebelumnya). Dengan penjelasan:
Kembali kepada inti masalah, karena setiap tipe butuh alokasi memori yang berbeda maka bijaklah dalam menentukan data type yang akan dipake karena akan mempengaruhi penggunaan memori dan ujung-ujungnya mempengaruhi performance aplikasi kita. Jika hanya menyimpan angka dari 0 - 100 maka cukup gunakan
Yang perlu diingat untuk angka bulat, ketika memberikan nilai pada variable bertipe long tambahkan huruf l atau L dibelakang angka. Untuk tahu bedanya silakan buat variable bertipe long yang berada diluar jangkauan int, misalnya 10,000,000,000.
Berdasarkan pesan errornya jika kita tidak menambahkan hurf L (atau l) dibelakang angka maka compiler akan menganggapnya sebagai int. Walaupun terasa aneh (angka ada hurufnya) tapi demi kesuksesan masa bodo aja. :D
*Untuk lebih lengkap masalah binary code tadi silakan baca disini: http://en.wikipedia.org/wiki/Two%27s_complement
Lupakan masalah binary code jika Anda senasib dengan saya (ga mudeng). Kita lanjut ke 2 data type terkahir, yaitu Floating-point dan Double precision floating-point. Keduanya dipakai untuk menyimpan data berupa angka desimal. Masalah nilai minimum dan maksimumnya silakan baca di sini http://en.wikipedia.org/wiki/IEEE_floating_point.
Yang agak ngeselin dari
Tapi seharusnya ketidak-presisian itu tidak menjadi masalah, karena bedanya kecil sekali.
User-defined data type disebut juga sebagai reference type dimana si variable tidak menyimpan objek secara langsung tapi hanya menyimpan "alamat"nya dimana si objek tersebut disimpan dalam memori, sedangkan variable bertipe primitive menyimpan nilainya sendiri secara langsung.
Untuk mengambil permennya kita hanya nunjuk dimana letak permen yang kita ambil. Kalo array satu dimensi tinggal tunjuk dia ada di kaleng nomer berapa (element ke berapa). Kalo array dua dimensi kita tunjuk dia di kaleng besar ke berapa dan kaleng kecil ke berapa. Kalo dibayangkan sebagai tabel kita tunjuk dia di BARIS berapa dan KOLOM berapa, bahasa kerennya dia ada di koordinat berapa (x,y). Untuk yang tiga dimensi tinggal ngikutin aja polanya. hahaha
Sepertinya semua unek-unek saya soal Data Type sudah keluar semua. Jadi saya sudahi saja sesi curhat kali ini, semoga pembaca semuanya enggak neg dan bosen. Jangan sungkan-sungkan jika ada yang salah, silakan diprotes. Saya sangat terbuka menerima kritik.
Oke, sampai di sini saja, jumpa lagi di curhatan berikutnya
~ Udah? Gitu aja?
* Enggak juga sih, mari kita lanjutkan.
jumlahPintu
yang merepresentasikan berapa banyaknya pintu yang ada dalam rumah atau kamar atau gedung, seperti yang kita tahu "jumlah" merepresentasikan "angka" sehingga untuk variable jumlahPintu
harus kita definisikan sebagai variable dengan data type yang merepresentasikan numerical value seperti int
, long
, double
, dll. Contoh,int jumlahPintu;
Java berbeda dengan javascript yang ketika membuat variable cukup dengan menambahkan kata "
var
" sebelum nama variablenya, atau PHP yang cukup dengan menggunakan simbol dollar ($
) sebagai awalan nama variable. Untuk mendeklarasikan sebuah variable dalam Java harus diawali dengan data type identifier yang kita inginkan.Dalam bahasa Java ada 3 bentuk data type, yaitu Primitive Type, User-Defined Type, dan Array Type.
1. Primitive Type
Oke, kita masuk ke data type pertama, Primitive Type.~Makanan apakah itu?
~Apakah dia makhluk yang hidup di jaman purba?
Primitive Type | Reserved Word | Size | Min Value | Max Value |
Boolean | boolean | -- | -- | -- |
Character | char | 16-bit | Unicode 0 | Unicode 65,535 |
Byte integer | byte | 8-bit | -128 | +127 |
Short integer | short | 16-bit | -32,768 | +32,767 |
Integer | int | 32–bit | -2,147,483,648 | +2,147,483,647 |
Long integer | long | 64-bit | -9,223,372,036, 854,775,808 | +9,223,372,036, 854,775,807 |
Floating-point | float | 32–bit | IEEE 754 | IEEE 754 |
Double precision floating-point | double | 64-bit | IEEE 754 | IEEE 754 |
Mari gali sedikit saja apa maksudnya dari tabel diatas (cuma tahu sedikit, hehehe).
Yang pertama, yang paling atas, adalah data type Boolean. Variable yang didefinisikan ke dalam data type Boolean akan memiliki nilai berupa
true
atau false
. Contoh pendeklarasian,boolean bisaTerbang;
Lanjut ke nomor 2, kita ketemu dengan Character. Pada dasarnya setiap yang kita ketik adalah character, bisa berupa angka, huruf, simbol, tanda baca, dll. Character memiliki ukuran sebesar 16 bit, maksudnya adalah setiap kita mendeklarasikan sebuah variable bertipe
char
komputer akan mengalokasikan memori sebesar 16 bit untuk menyimpan nilai yang akan dimasukan ke dalam variable tersebut. Character memiliki nilai minimum Unicode 0, yang maksudnya Unicode code point pertama. Karena namanya character maka data yang bisa disimpan hanya "sebuah" character. Contoh pendeklarasian,char letter;
Berikutnya, ada 4 data type untuk menyimpan data berupa angka bulat.
~ Semuanya untuk menyimpan angka bulat?
* Ya
~ Terus kenapa harus ada 4 kalo semuanya sama-sama untuk menyimpan angka bulat?
* Karena...
byte memiliki ukuran sebesar 8 bit. Tadi di atas sudah dijelaskan masalah memori, maka variable bertipe byte akan membutuhkan alokasi memori sebesar 8 bit untuk menyimpan data. Dari dalam tabel dapat dilihat bahwa semakin besar ukurannya maka jangkauan nilainya juga semakin besar.
~ Kenapa bisa begitu?
~ Terus hubungannya sama jangkauan nilai gimana?
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 |
0 x 27 | 0 x 26 | 0 x 25 | 1 x 24 | 0 x 23 | 0 x 22 | 1 x 21 | 1 x 20 |
0 + 0 + 0 + 16 + 0 + 0 + 2 + 1 = 19
Sedangkan untuk angkan -19 tidak semena-mena mengubah angka 0 di depan menjadi 1. Kode binary untuk angka -19 adalah 11101101. Sebenarnya saya masih belum paham masalah kode binary untuk yang minus ini. Jika pembaca ada yang mengerti tolong dijelaskan dengan simpel kepada saya yang masih pemula ini.
Tapi yang saya pahami dari angka -19 adalah kode binarynya 19 dibalik dari 0 jadi 1 dan 1 jadi 0 kemudian ditambahkan 1. Kode binary 19 adalah 00010011 dibalik menjadi 11101100 kemudian ditambahkan 1 jadi 11101101.
~Gimana kalo 2? kan 00000010 dibalik jadi 11111101, di ujung
kanan sudah 1
====================
UPDATE 22 Juni 2015:Akhirnya saya paham mengenai kode binary untuk nilai negatif, lupakan penjelasan binary negatif sebelumnya, agak ngasal memang.
Kita ambil contoh terakhir, yaitu 4, kode binarynya adalah 000000100, sedangkan -4 kode binarynya 11111100 (sama kayak penjelasan sebelumnya). Dengan penjelasan:
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
- (1 x 27) | 1 x 26 | 1 x 25 | 1 x 24 | 1 x 23 | 1 x 22 | 0 x 21 | 0 x 20 |
-128 + 64 + 32 + 16 + 8 + 4 + 0 + 0 = -4
====================
Kembali kepada inti masalah, karena setiap tipe butuh alokasi memori yang berbeda maka bijaklah dalam menentukan data type yang akan dipake karena akan mempengaruhi penggunaan memori dan ujung-ujungnya mempengaruhi performance aplikasi kita. Jika hanya menyimpan angka dari 0 - 100 maka cukup gunakan
short
. Tapi ada kabar baik juga, dari buku yang saya baca, karena jaman sekarang komputer dan perangkat mobile sudah canggih punya power dan memori yang gede maka urusan data type ini sudah bukan jadi barang yang harus dipusingkan. Kalo mau pake long ya silakan-silakan saja.Yang perlu diingat untuk angka bulat, ketika memberikan nilai pada variable bertipe long tambahkan huruf l atau L dibelakang angka. Untuk tahu bedanya silakan buat variable bertipe long yang berada diluar jangkauan int, misalnya 10,000,000,000.
Berdasarkan pesan errornya jika kita tidak menambahkan hurf L (atau l) dibelakang angka maka compiler akan menganggapnya sebagai int. Walaupun terasa aneh (angka ada hurufnya) tapi demi kesuksesan masa bodo aja. :D
*Untuk lebih lengkap masalah binary code tadi silakan baca disini: http://en.wikipedia.org/wiki/Two%27s_complement
Lupakan masalah binary code jika Anda senasib dengan saya (ga mudeng). Kita lanjut ke 2 data type terkahir, yaitu Floating-point dan Double precision floating-point. Keduanya dipakai untuk menyimpan data berupa angka desimal. Masalah nilai minimum dan maksimumnya silakan baca di sini http://en.wikipedia.org/wiki/IEEE_floating_point.
Yang agak ngeselin dari
float
dan double
adalah jika kita melakukan operasi aritmatik terhadap data float
atau double
hasilnya bisa saja tidak sesuai dengan yang diharapkan, memang sih bedanya sangat tidak signifikan, tapi sebagai math-holic bikin agak kesel. Silakan dicoba kode berikut,public class Main {
static float a = 1.242f;
static float b = 24.02f;
static double x = 1.242d;
static double y = 24.02d;
public static void main(String[] args){
System.out.println(a * 5 / 100);
//Output 0.0621
System.out.println(b * 5 / 100);
//Output 1.2010001, kalo pake kalkulator hasilnya 1.201
System.out.println(x * 5 / 100);
//Output 0.0621
System.out.print(y * 5 / 100);
//Output 1.2009999999999998, kalo pake kalkulator hasilnya 1.201
}
}
Tapi seharusnya ketidak-presisian itu tidak menjadi masalah, karena bedanya kecil sekali.
2. User-Defined Data Type
Sekarang saatnya masuk ke data type berikutnya, yaitu User-Defined Data Type, atau dalam bahasa manusianya tipe data buatan user. Dalam pembuatan data type biasanya user menggunakan konsep dari dunia nyata. Jika Java membuat primitive data type sepertiint
, boolean
, double
yang kita ga kenal sebelumnya, user biasanya membuat data type mereka sendiri seperti Color
, Account
, dll. Untuk membuat data type sendiri user menggunakan class, interface, enum, atau annotation type, karena itu nilai yang tersimpan dalam variable bertipe data buatan user akan selalu berupa objek.User-defined data type disebut juga sebagai reference type dimana si variable tidak menyimpan objek secara langsung tapi hanya menyimpan "alamat"nya dimana si objek tersebut disimpan dalam memori, sedangkan variable bertipe primitive menyimpan nilainya sendiri secara langsung.
3. Array Type
Yang terakhir, Array Type, berfungsi untuk menyimpan data yang memiliki beberapa nilai ke dalam satu variable. Nilai yang disimpan bisa berupa primitive data atau objek. Deretan nilai yang disimpan disebut dengan element dimana element array dimulai dari 0. Untuk mendeklarasika array dibutuhkan tanda[]
. Contoh ilustrasipublic class Main {
int[] x; //Hanya deklarasi tanpa assignment
int[] no = {1,2,3,4,5}; // Deklarasi dan assigment
int[] i = new int[5];/* Deklarasi tanpa assignment tapi mereserve element sebanyak 5 element */
}
Tanda []
bisa juga diletakan setelah pendeklarasian nama variable seperti int x[]
, namun biasanya diletakan setelah pendeklarasian tipe datanya. Tapi peletakan di belakang nama variable kadang-kadang bisa berguna jika kasusnya seperti ini,public class Main {
int x = 5, y[] = {1,2,3,4};
}
Yang menarik dari array adalah kemampuan yang dia miliki tidak hanya menyimpan banyak data dalam satu dimensi tapi bisa sampai 3 dimensi. Bayangkan sebuah array satu dimensi (array biasa) sebagai kaleng kecil yang dijejer (berperan sebagai element) yang masing-masing kaleng berisi permen (berperan sebagai value). Array dua dimensi bisa dibayangkan sebagai kaleng yang besar dijejer dan masing-masing kaleng berisi kaleng kecil dengan jumlah yang sama dan masing-masing kaleng kecil berisi permen (Atau bisa juga dibayangkan sebagai tabel yang dia punya baris dan kolom). Nah, untuk yang array tiga dimensi bisa dibayangkan sebagai kardus dijejer yang masing-masing berisi kaleng besar dengan jumlah yang sama, masing-masing kaleng besar berisi kaleng kecil dengan jumlah yang sama, dan masing-masing kaleng kecil berisi....., ya Anda benar, permen. :DUntuk mengambil permennya kita hanya nunjuk dimana letak permen yang kita ambil. Kalo array satu dimensi tinggal tunjuk dia ada di kaleng nomer berapa (element ke berapa). Kalo array dua dimensi kita tunjuk dia di kaleng besar ke berapa dan kaleng kecil ke berapa. Kalo dibayangkan sebagai tabel kita tunjuk dia di BARIS berapa dan KOLOM berapa, bahasa kerennya dia ada di koordinat berapa (x,y). Untuk yang tiga dimensi tinggal ngikutin aja polanya. hahaha
Sepertinya semua unek-unek saya soal Data Type sudah keluar semua. Jadi saya sudahi saja sesi curhat kali ini, semoga pembaca semuanya enggak neg dan bosen. Jangan sungkan-sungkan jika ada yang salah, silakan diprotes. Saya sangat terbuka menerima kritik.
Oke, sampai di sini saja, jumpa lagi di curhatan berikutnya
The share your really gives us excitement. Thanks for your sharing. : usefull site
ReplyDelete