[java] Immutable Data Types

Immutable Data Type, adalah struktur data default untuk bahasa pemrograman functional macam haskell dan kawan-kawan. Bagaimana dengan Java, bahasa pemrograman imperatif berorientasi objek.

Immutable Data Types ternyata sering digunakan tanpa disadari oleh banyak(kayaknya) programmer Java(termasuk saya dulu). Apa itu? String.

Ya, String termasuk ke dalam immutable data types. Ups, tunggu dulu. Immutable Data Types itu sendiri apa?

Immutable data types adalah struktur data yang begitu dibuat tidak bisa diubah. Contoh, begitu kita membuat String “abc”, maka data itu (atau objek itu di java) tidak bisa diubah.

Lho, saya bisa ubah kok contoh: String abc = “abc”; abc += “d”; Bukankah sekarang objeknya berubah jadi “abcd”?

Tidak, objek “abc” di awal tidak berubah. Yang terjadi sebenarnya Anda membuat sebuah objek baru yang berisi “abcd”. Jadi ada 2 buah objek di memori sekarang, yaitu objek “abc” dan objek “abcd” (3 sebenarnya karena objek “d” juga dibuat). Dan variabel abc cuma menunjuk objek yang berbeda.

Kenapa di Java dibuat begitu? Alasannya adalah untuk menghemat memori. Di dalam bagian memory heap di Java, ada yang namanya “String pool” yang isinya adalah semua string yang pernah dibuat. Jika ada permintaan untuk membuat objek string baru, Java Virtual Machine (atau JVM) akan mengecek dulu di String Pools, apakah objek string tersebut sudah ada atau belum. Jika sudah, maka tinggal di-reference saja ke objek tersebut. Jika belum maka objek string baru akan dibuat. Karena itu mungkin saja kalau banyak variabel string yang menunjuk ke objek yang sama di memori.

Apa efeknya untuk programmer? Pengetahuan akan ke-immutable-an String ini berguna jika kita membuat program yang kaya akan operasi manipulasi string. Dari pada membuat banyak objek mubazir di dalam memori yang pastinya akan menghambat performa program, gunakan saja versi mutable data types dari String, yaitu StringBuffer atau versi non-synchronised-nya StringBuilder. Seperti yang diberitahu oleh dosen saya, program yang baik adalah pemilihan algoritma dan struktur data yang tepat.

Struktur data lain yang immutable di Java antara lain, BigInteger dan BigDecimal.

Lalu apa kegunaan dari Immutable Data Types? Concurrency. Jika sebuah data yang diakses oleh lebih dari 1 thread tidak akan berubah, maka tidak ada keperluan untuk melakukan sinkronisasi untuk menjaga integritas data.

Mengenai apa itu konkurensi dan sinkronisasi, mungkin di bahasan lain. Salam.

[myth]Java, call by reference?

Untuk programmer yang belajar java dari background C, pasti ingat waktu belajar C dengan yang namanya pointer. Pointer memungkinkan fungsi di C untuk melakukan panggilan dengan parameter yang isinya adalah reference, atau call by reference.

Bagaimana di Java? betulkah primitif variable dipanggil call by value dan objek dipanggil secara call by reference?

Jawabannya tidak.

Semua pemanggilan fungsi di Java adalah secara call by value. Titik. Jika yang di-pass dalam pemanggilan fungsi adalah sebuah variabel reference, maka yang dikirim adalah nilai dari variabel tersebut, yaitu alamat objek itu di memori, bukan alamat variabel itu sendiri. Ini mengakibatkan di Java tidak bisa membuat fungsi untuk menukar nilai yang ditunjuk oleh dua buah variabel.

Demikian sekilas info.

Go, humanity last defense…

Anda pasti tahu kalau juara dunia catur paling terkenal sepanjang sejarah, Gary Kasparov, pernah dikalahkan oleh komputer bernama Deep Blue pada tahun 1997. Tahukah juga Anda, bahwa game Checkers sudah “solved” atau semua kemungkinan jalannya permainan sudah diiterasi komputer sehingga hasil terbaik yang bisa diperoleh manusia jika melawan AI checkers adalah seri. Bahkan untuk game Reversi, AI komputer sudah bisa mengalahkan juara dunia manusia dengan mudah dari tahun 1980.

Perlahan namun pasti, komputer dan robot semakin mengalahkan manusia, dan tinggal tunggu waktu hingga kejadian yang ditramalkan di Matrix terjadi.

Akan tetapi, masih ada game yang belum dikuasai oleh komputer, yaitu Go. Besarnya branching factor menjadi salah satu alasan kenapa komputer masih takluk oleh manusia.

Bagi yang ingin belajar cara mainnya, silakan pelajari di sini. versi bahasa Indonesia juga tersedia di sana. Setelah tahu peraturannya dan ingin mencoba bermain, ayo rame-rame main di sini.

Kenapa di flyordie? kenapa bukan di yahoo games atau situs lain? Karena game go di flyordie bisa dibuka di komputer lab fasilkom…. :D

Cyber-slacking di fasilkom semakin asyik.