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
~ Udah? Gitu aja?
* Enggak juga sih, mari kita lanjutkan.
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
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?
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.
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...
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.
~ Terus hubungannya sama jangkauan nilai gimana?
Jadi, misalnya memori yang dialokasikan sebesar 8 bit maka nilai minimumnya adalah sebesar -(2
8-1) atau -(2
7) = -128 dan nilai maksimumnya sebesar 2
8-1-1 = 2
7-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,
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
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)
====================
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 seperti
int
,
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 ilustrasi
public 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. :D
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
2 comments: