
Mengenali data type adalah salah hal yang paling fundamental saat belajar pemrograman. Secara umum setiap bahasa pemrograman bekerja dengan beberapa tipe data primitif yang sudah dikenal seperti Integer (bilangan bulat), Boolean (1 dan 0), String (“Ini string”), Float (bilangan desimal), Double (desimal 64-bit), dan sebagainya.
Walaupun mengimplementasikan data type yang sama, setiap bahasa pemrograman mungkin melakukan pendekatan yang berbeda atas data type tersebut, yang seringkali membingungkan programmer. Javascript misalnya, mengambil pendekatan weakly typed di mana programmer tidak diwajibkan mendeklarasikan tipe data secara eksplisit. Sebaliknya, pada bahasa yang menerapkan strong styping seperti Java, mendeklarasikan data type secara eksplisit adalah hal yang wajib dilakukan. Jika programmer lupa melakukannya, kode program yang ditulisnya tidak akan bisa di-compile sama sekali.
Perbedaan perlakuan terhadap data type seperti pada JavaScript dan Java berakar pada filosofi desain, tujuan penggunaan utama, dan lingkungan di mana bahasa tersebut dieksekusi. Berikut adalah alasan mendasar mengapa kedua pendekatan ini ada dan digunakan secara luas:
JavaScript: Dynamic & Weakly Typed
JavaScript diciptakan oleh Brendan Eich pada tahun 1995 hanya dalam waktu 10 hari. Tujuan awalnya sangat spesifik: menambahkan interaktivitas sederhana pada halaman web (seperti validasi formulir atau animasi sederhana). Pada awal kemunculannya, Javascript bahkan kerap tidak dianggap sebagai bahasa pemrograman dalam pengertian yang penuh, tetapi lebih dianggap sebagai scripting language, di mana script (kode pendek yang dieksekusi langsung oleh interpreter tanpa melalui proses kompilasi) “dilengketkan” (embedded) pada kode HTML.
“Kebersahajaan” dan fokus pada simplisitas tersebut membuat desain awal JavaScript banyak mengorbankan mekanisme kerja yang lazim dilakukan oleh bahasa pemrograman yang lebih serius, salah satunya kewajiban mendeklarasikan data type tadi.
- Filosofi: “Get things done quickly and gracefully” (Selesaikan pekerjaan dengan cepat tanpa mudah memicu error).
- Eksekusi: JavaScript adalah bahasa terinterpretasi yang berjalan langsung di browser pengguna (client-side). Jika script di browser crash hanya karena error tipe data yang sepele, seluruh tampilan web pengguna bisa rusak.
- Weak Typing: JavaScript melakukan koersi tipe (type coercion) secara otomatis. Jika kamu misalnya menjumlahkan string dan integer (“5” + 2), JavaScript hanya akan mengasumsikan kamu ingin menggabungkan keduanya menjadi “52” (membuat semuanya menjadi string), bukan menghentikan program atau memberikan pesan error.
- Keuntungan Weak Typing:
- Fleksibel dan mempercepat pembuatan prototipe.
- Boilerplate code (kode pengulangan) sangat sedikit sehingga secara keseluruhan memperpendek kode program yang harus ditulis.
- Sangat ramah untuk pemula yang baru belajar pemrograman web.
- Kelemahan Weak Typing:
- Karena tidak diterapkannya disiplin mendeklarasikan tipe data, hal ini berpotensi menimbulkan bug yang tersembunyi (implicit bug) yang sangat sulit dilacak saat aplikasi semakin besar. Iniliah yang membuat JavaScript dalam bentuknya yang awal tidak pernah digunakan untuk membuat project besar atau aplikasi yang serius. Takdirnya hanya sebatas menjadi potongan-potongan kode pendek yang dilampirkan pada baris-baris HTML halaman web.
Java: Static & Strongly Typed
Java dikembangkan oleh Sun Microsystems pada awal 1990-an untuk sistem tertanam (embedded systems) dan enterprise software, di mana keandalan (reliability) dan performa adalah prioritas utama.
- Filosofi: “Catch errors early & Write Once, Run Anywhere” (Temukan kesalahan sedini mungkin sebelum aplikasi dijalankan).
- Eksekusi: Java adalah bahasa terkompilasi (compiled to bytecode). Sebelum kode dijalankan oleh Java Virtual Machine (JVM), compiler akan memeriksa setiap variabel dan tipe datanya.
- Strong/Static Typing: Java mewajibkan Anda mendeklarasikan tipe data secara eksplisit (misal: int x = 5;). Jika Anda mencoba memasukkan string ke dalam variabel integer (x = “5”), compiler akan menolak kode tersebut dan memunculkan error sebelum aplikasi sempat berjalan.
- Keuntungan Strong Typing:
- Keamanan Kode (Type Safety) adalah prioritas: Mencegah runtime error yang disebabkan oleh manipulasi tipe data yang salah.
- Performa Tinggi: Karena tipe data sudah dipastikan sejak awal, mesin (runtime environment) dapat mengalokasikan memori dan mengoptimalkan eksekusi secara jauh lebih efisien.
- Sangat Terstruktur: Sangat cocok untuk proyek skala besar (enterprise) yang dikerjakan oleh ribuan pengembang secara bersamaan.
- Kelemahan:
- Lebih kaku (verbose) dan membutuhkan lebih banyak baris kode. Java mengorbankan kenyamanan programmer demi keamanan kode. Hal ini juga yang menjadikan Java dibenci sebagian programmer yang sudah terbiasa mengerjakan project yang tidak terlalu verbose.
- Implikasi langsung dari verbosity ini, proses penulisan program awal cenderung lebih lambat dibanding bahasa dinamis.
Evolusi dan Kompromi
Seiring perkembangan, saat ini batas antara kedua pendekatan ini sebenarnya mulai menipis. Komunitas JavaScript menciptakan TypeScript sebagai superset dari JavaScript yang menambahkan fitur static typing untuk menangani proyek-proyek JS skala besar agar seaman Java. Sebaliknya, Java versi modern (seperti Java 10+) menambahkan fitur seperti kata kunci var (local-variable type inference) untuk mengurangi verbosity tanpa mengorbankan type safety.