Jika sekumpulan data digabungkan
dalam satu unit, hasilnya adalah suatu struktur data.
Data struktur dapat berupa struktur yang sangat kompleks, akan tetapi dalam
banyak aplikasi, data struktur yang cocok hanya terdiri dari kumpulan data
berurutan. Struktur data sederhana seperti ini bisa berupa array atau record.
Istilah "record"
sebetulnya tidak digunakan pada Java. Suatu record pada intinya mirip dengan
objek pada Java yang hanya memiliki variabel instansi tanpa metode instansi.
Beberapa bahasa pemrograman lain yang tidak mendukung objek biasanya mendukung
record. Dalam bahasa C yang bukan bahasa berorientasi objek, misalnya, memiliki
tipe data record, dimana pada C disebut "struct". Data pada record --
dalam Java, adalah variabel instansi suatu objek -- disebut field suatu record. Masing-masing item disebut nama
field. Dalam Java, nama field adalah nama variabel instansi. Perbedaan sifat
dari suatu record adalah bahwa item pada record dipanggil berdasarkan namanya,
dan field yang berbeda dapat berupa tipe yang berbeda. Misalnya, kelas Orang didefisikan sebagai :
class Orang {
String
nama;
int
nomorID;
Date
tanggalLahir;
int
umur;
}
maka objek dari kelas Orang bisa disebut juga sebagai record dengan 4 field. Nama
fieldnya adalah nama,
nomorID, tanggalLahir dan umur.
Lihat bahwa tipe datanya berbeda-beda yaitu String, int, dan Date.
Karena record hanya merupakan bagian
lebih kecil dari objek, kita tidak akan bahas lebih lanjut di sini.
Seperti record, suatu array adalah
kumpulan item. Akan tetapi, item pada record dipanggil dengan nama,
sedangkan item pada array dinomori, dan masing-masing item dipanggil besarkan nomor
posisi pada array tersebut. Semua item pada array harus bertipe sama.
Definisi suatu array adalah : kumpulan item bernomor yang semuanya bertipe
sama. Jumlah item dalam suatu array disebut panjang array. Nomor posisi dari
array disebut indeks item tersebut dalam array.
Tipe dari item tersebut disebut tipe dasar dari
array.
Tipe dasar suatu array bisa berupa
tipe Java apa saja, baik berupa tipe primitif, nama kelas, atau nama interface.
Jika tipe dasar suatu array adalah int, maka array tersebut disebut "array int". Suatu array bertipe String disebut "array String". Akan tetapi array bukan
urutan int atau urutan String atau urutan nilai bertipe apapun. Lebih
baik jika array adalah urutan variabel bertipe int atau String atau tipe
lainnya.
Seperti biasa, ada dua kemungkinan
kegunaan variabel : sebagai nama suatu lokasi di memori, dan nama suatu nilai
yang disimpan pada lokasi memori. Setiap posisi pada array bersifat seperti
variabel. Setiap posisi dapat menyimpan nilai dengan tipe tertentu (yaitu tipe
dasar array). Isinya bisa diganti kapanpun. Nilai tersebut disimpan di dalam array.
Array merupakan kontainer bukan kumpulan nilai.
Item pada array (maksudnya setiap
anggota variabel dalam array tersebut) sering juga disebut elemen array. Dalam Java, elemen array selalu dinomori
mulai dari nol. Yaitu, indeks dari elemen pertama suatu array adalah nol. Jika
panjang array adalah N, maka indeks elemen terakhir adalah N-1. Sekali array
dibuat, maka panjangnya tidak bisa diubah lagi.
Dalam Java, array adalah objek. Ada
beberapa konsekuensi yang lahir dari fakta ini. Array harus dibuat dengan
operator new. Variabel tidak bisa menyimpan array; variabel hanya bisa
merujuk pada array. Variabel lain yang bisa merujuk array juga bisa bernilai null yang berarti ia tidak merujuk pada
lokasi memori apapun. Seperti objek lain, array juga bagian dari suatu kelas,
di mana seperti kelas lain adalah kelas turunan dari kelas Object. Elemen array pada dasarnya adalah
variabel instansi dalam objek array, kecuali mereka dipanggil dalam indeksnya
bukan namanya.
Meskipun array berupa objek, ada
beberapa perbedaan antara array dan objek lainnya, dan ada beberapa fitur
khusus Java untuk membuat dan menggunakan array.
Misalnya A adalah variabel yang
merujuk pada suatu array. Maka indeks k di dalam A bisa dipanggil dengan A[k].
Item pertama adalah A[0], yang kedua adalah A[i], dan seterusnya. A[k] adalah suatu variabel dan bisa digunakan seperti variabel
lainnya. Kita bisa memberinya nilai, bisa menggunakannya dalam ekspresi, dan
bisa diberikan sebagai parameter pada subrutin. Semuanya akan didiskusikan di
bawah nanti. Untuk sekarang ingat sintaks berikut
variabel_array
[ekspresi_integer]
untuk merujuk pada suatu array.
Meskipun setiap array merupakan
suatu objek, kelas array tidak harus didefinisikan sebelumnya. Jika suatu tipe
telah ada, maka kelas array dari tipe tersebut otomatis ada. Jika nama suatu
tipe adalah TipeDasar, maka nama kelas arraynya adalah TipeDasar[]. Artinya,
suatu objek yang diciptakan dari kelas TipeDasar[] adalah
array dari item yang tiap itemnya bertipe TipeDasar. Tanda kurung "[]" dimaksudkan untuk mengingat
sintaks untuk mengambil item di dalam suatu array. "TipeDasar[]"
dibaca seperti "array TipeDasar". Mungkin perlu juga dijelaskan bahwa
jika KelasA adalah kelas turunan dari KelasB maka KelasA[] otomatis menjadi kelas turunan KelasB[].
Tipe dasar suatu array dapat berupa
tipe apapun yang ada atau sudah didefinisikan pada Java. Misalnya tipe primitif
int
akan diturunkan kelas array int[]. Setiap elemen di dalam array int[] adalah variabel yang memiliki tipe int dan bisa diisi dengan nilai dengan
tipe int. Dari kelas yang bernama String diturunkan tipe array String[]. Setiap elemen di dalam array String[] adalah variabel dengan tipe String, yang bisa diisi dengan nilai
bertipe String. Nilai ini bisa null atau referensi ke objek yang bertipe String (dan juga kelas turunan dari String)
Mari kita lihat contoh lebih
konkrotnya menggunakan array bilangan bulat sebagai contoh pertama kita. Karena
int[] adalah sebuah kelas, maka kita bisa menggunakannya untuk
mendeklarasikan variabel. Misalnya,
int[]
daftar;
yang membuat variabel bernama daftar dengan tipe int[]. Variabel ini bisa menunjuk pada
array int, akan tetapi nilai awalnya adalah null (jika merupakan variabel anggota
suatu kelas) atau tak tentu (jika merupakan variabel lokal di dalam suatu
metode). Operator new digunakan untuk membuat objek array baru, ayng kemudian
bisa diberikan kepada daftar.
Sintaksnya sama seperti sintaks sebelumnya, yaitu :
daftar
= new
int[5];
membuat array 5 buah integer. Lebih
umum lagi, konstruktor "new
TipeDasar[N]" digunakan untuk membuat array bertipe TipeDasar[]. Nilai N
di dalam kurung menyatakan panjang array, atau jumlah elemen yang bisa
ditampung. Panjang array adalah variabel instansi di dalam objek array,
sehingga array tahu berapa panjangnya. Kita bisa mendapatkan panjang suatu
array, misalnya daftar
menggunakan daftar.length (akan tetapi kita tidak bisa mengubahnya)
Hasil dari pernyataan "daftar
= new
int[5];"
dapat diilustrasikan sebagai berikut
Perlu dicatat bahwa array integer
secara otomatis diisi dengan nol. Dalam Java, array yang baru dibuat akan
selalu diisi dengan nilai tertentu: nol untuk angka, false untuk boolean,
karakter dengan nilai Unicode 0 untuk char dan null untuk objek.
Elemen di dalam array daftar dapat dirujuk dengan daftar[0], daftar[1], daftar[2], daftar[3], dan daftar[4] (ingat
juga bahwa nilai indeks terbesar adalah panjangnya array dikurang satu). Akan
tetapi, referensi array sebetulnya lebih umum lagi. Tanda kurung di dalam
referensi array bisa berisi ekspresi apapun yang nilainya suatu integer.
Misalnya jika idks
adalah variabel bertipe int, maka daftar[idks] dan daftar[2*idks+3] secara
sintaks benar.
Contoh berikut akan mencetak semua
isi integer di dalam array daftar ke layar :
for (int i = 0; i < daftar.length; i++) {
System.out.println( daftar[i] );
}
Perulangan pertama adalah ketika i =
0, dan daftar[i] merujuk
pada daftar[0]. Jadi nilai yang disimpan pada variabel daftar[0] akan
dicetak ke layar. Perulangan kedua adalah i = 1, sehingga nilai daftar[i] dicetak. Perulangan berhenti setelah mencetak daftar[4] dan i
menjadi sama dengan 5, sehingga kondisi lanjutan "i
< daftar.length" tidak lagi benar. Ini adalah contoh umum dari
menggunakan perulangan untuk mengolah suatu array.
Penggunaan suatu variabel dalam
suatu program menyatakan lokasi di memori. Pikirkan sesaat tentang apa yang
akan komputer lakukan ketika ia menemukan referensi ke elemen suatu array daftar[k] ketika program berjalan. Komputer harus menentukan lokasi
memori di mana ia dijadikan referensi. Untuk komputer, daftar[k] berarti : "Ambil pointer yang disimpan di dalam
variabel daftar.
Ikuti pointer ini untuk mencari objek array. Ambil nilai k. Pergi ke posisi
ke-k dari array tersebut, dan di sanalah alamat memori yang Anda ingin."
Ada dua hal yang bisa salah di sini.
Misalnya nilai daftar
adalah null. Dalam kasus ini, maka daftar tidak memiliki referensi sama sekali. Percobaan merujuk
suatu elemen pada suatu array kosong adalah suatu kesalahan. Kasus ini akan
menampilkan pesan kesalahan "pointer kosong". Kemungkinan kesalahan
kedua adalah jika daftar
merujuk pada suatu array, akan tetapi k berada di luar rentang indeks yang
legal. Ini akan terjadi jika k < 0 atau jika k >= daftar.length. Kasus ini disebut kesalahan "indeks array keluar
batas". Ketika kita menggunakan array dalam program, kita harus selalu
ingat bahwa kedua kesalahan tersebut mungkin terjadi. Dari kedua kasus di atas,
kesalahan indeks array keluar batas adalah kesalahan yang lebih sering terjadi.
Untuk suatu variabel array, seperti
variabel lainnya, kita bisa mendeklarasikan dan mengisinya dengan satu langkah
sekaligus, misalnya :
int[]
daftar = new
int[5];
Jika daftar merupakan variabel lokal dalam subrutin, maka perintah di
atas akan persis sama dengan dua perintah :
int[]
daftar;
daftar
= new
int[5];
(Jika daftar adalah variabel instansi, tentukan kita tidak bisa
mengganti "int[] daftar =
new int[5];" dengan "int[] daftar;
daftar = new
int[5];"
karena ini hanya bisa dilakukan di dalam subrutin)
Array yang baru dibuat akan diisi
dengan nilai awal yang tergantung dari tipe dasar array tersebut seperti
dijelaskan sebelumnya. Akan tetapi Java juga menyediakan cara untuk memberi isi
array baru dengan daftar isinya. Dalam pernyataan yang untuk membuat array, ini
bisa dilakukan dengan menggunakan penginisialiasi array (array initializer), misalny :
int[]
daftar = {
1, 4, 9, 16, 25, 36, 49 };
akan membuat array baru yang berisi
7 nilai, yaitu 1, 4, 9, 16, 25, 36, dan 49, dan mengisi daftar dengan referensi ke array baru tersebut. Nilai daftar[0] berisi 1,
nilai daftar[1] berisi 4, dan seterusnya. Panjang daftar adalah 7, karena kita memberikan 7 nilai awal kepada array
ini.
Suatu penginisialisasi array
memiliki bentuk daftar angka yang dipisahkan dengan koma dan diapit dengan
tanda kurung kurawal {}. Panjang array tersebut tidak perlu diberikan, karena
secara implisit sudah bisa ditentukan dari jumlah daftar angkanya. Elemen di
dalam penginisialisasi array tidak harus selalu berbentuk konstanta. Juga bisa
merupakan variabel atau ekspresi apa saja, asalkan nilainya bertipe sama dengan
tipe dasar array tersebut. Misalnya, deklarasi berikut membuat array dari
delapan jenis Color beberapa warna telah dibentuk dengan ekspresi "new Color(r,g,b);"
Color[]
palette =
{
Color.black,
Color.red,
Color.pink,
new
Color(0,180,0), // hijau gelap
Color.green,
Color.blue,
new
Color(180,180,255), // biru muda
Color.white
};
Inisialisasi array bentuk seperti
ini hanya bisa digunakan dalam deklarasi suatu variabel baru, akan tetapi tidak
bisa digunakan seperti operator pemberi nilai (=) di tengah-tengah suatu
program. Akan tetapi ada cara lain yang bisa digunakan sebagai pernyataan
pemberian nilai atau diberikan ke dalam subrutin. Yaitu menggunakan jenis lain
dari operator new untuk membuat atau menginisialisasi objek array baru. (Cara
ini agak kaku dengan sintaks aneh, seperti halnya sintaks kelas anonim yang
telah didiskusikan sebelumnya). Misalnya untuk memberi nilai kepada suatu
variabel daftar,
kita bisa menggunakan :
daftar
= new
int[]
{ 1, 8, 27, 64, 125, 216, 343 };
Sintaks umum dari bentuk operator new seperti ini adalah
new TipeDasar [
] {
daftar_nilai_nilai }
Ini adalah suatu ekspresi yang
isinya merupakan objek, dan bisa digunakan untuk banyak situasi di mana suatu
objek dengan tipe TipeDasar dipentingkan. Misalnya buatTombol merupakan metode yang mengambil array String sebagai
parameter, maka kita bisa menuliskan
buatTombol( new String[] { "Stop", "Jalan",
"Berikut", "Sebelum"
} );
Catatan terakhir : untuk alasan
sejarah, maka deklarasi
int[]
daftar;
akan bernilai sama dengan
int daftar[];
di mana sintaks tersebut digunakan
dalam bahasa C dan C++. Akan tetapi sintaks alternatif ini tidak begitu masuk
akan dalam Java, atau mungkin lebih baik dihindari. Lagian, maksudnya adalah
mendeklarasikan variabel dengan tipe tertentu dan namanya adalah int[]. Akan lebih masuk akan untuk mengikuti siintaks
"nama_tipe nama_variabel" seperti pada bentuk bertama.
0 komentar:
Posting Komentar