Memandang Masa Depan Java
Java, sebagai bahasa pemrograman nomer dua paling populer di tahun 2020 setelah C berdasarkan TIOBE index, suka tidak suka telah mendapat beragam kritik, terutama karena begitu verbose dan sebegitu banyak boilerplate code yang kudu dibuat di banyak kasus.
Di dalam berbagai forum seminar, Java sering dibandingkan kala misalnya membuat program Hello World, setidaknya memerlukan 20 baris code, sedangkan Ruby hanya memerlukan 2 baris, dan php cukup 1 baris.
Kritik tersebut memang tidak dapat disangkal, verbosity dari java terkadang cukup mengganggu bagi programmer dalam beberapa situasi. Memang, tidak ada bahasa pemrograman yang sempurna, sebagaimana adanya apapun di dunia ini. Itulah mengapa sebagai programmer harus cerdas untuk menimbang bahasa pemrograman mana yang sebaiknya dipilih berdasarkan project yang akan dikerjakan.
Namun Java sebagai bahasa pemrograman bukanlah bahasa pemrograman kolot yang tidak mau berubah. Semenjak diciptakan di tahun 1996, Java telah mengalami evolusi dari waktu ke waktu. Namun perubahan tersebut dipandang tidak begitu signifikan, hal tersebut mungkin dikarenakan Java pada era tersebut begitu mendominasi pasar, terlebih dengan fitur strong type safety yang disediakan dan konsep object oriented yang kuat, serta JVM (Java Virtual Machine) yang membuatnya dapat dijalankan di berbagai sistem operasi menjadikannya disukai untuk digunakan dalam membangun berbagai project besar.
Sampai akhirnya kemudian muncul bahasa pemrograman lain yang menggunakan JVM, dan menawarkan apa – apa yang Java tidak miliki. Penantang pertama yang muncul adalah Groovy yang dirilis di tahun 2003, meskipun baru secara resmi dan distandarisasi pada versi 1.0 di Januari 2007. Groovy menawarkan keuntungan untuk digunakan sebagai bahasa scripting. Tidak seperti Java yang merupakan bahasa pemrograman static typed. Groovy bersifat dynamically typed, layaknya Python dan JavaScript, dimana tipe object diperiksa saat runtime
Bahasa pemrograman JVM berikutnya yang muncul dan populer adalah Scala yang dirancang oleh Martin Odersky di École Polytechnique Fédérale de Lausanne (EPFL) pada tahun 2001 dan kemudian dirilis di 2004. Scala membawa paradigma bahasa pemrograman baru yang Java tidak miliki : Functional Programming dan pendekatan deklaratifnya. Dan memang, banyak rancangan bahasa pemrograman Scala yang ditujukan sebagai antitesis dari “kelemahan – kelemahan” yang dimiliki Java.
Berikutnya, pada tahun 2007. Bahasa pemrograman JVM lain yaitu Clojure – yang merupakan bahasa pemrograman fungsional murni, dirilis. Bahasa pemrograman yang awalnya dibuat oleh Rich Hickey ini dibangun berdasarkan karakteristik dari LISP. Hal ini ditandai dari kesederhanaan dan dialek fungsional yang digunakan. Clojure berifat dynamically typed, sama halnya dengan Groovy namun dengan learning curve yang lebih curam dikarenakan sintaks yang digunakan sangatlah berbeda dengan bahasa pemrograman JVM lain.
Bahasa pemrograman JVM yang populer berikutnya adalah Kotlin yang dan dirilis di Februari 2016. Dirancang oleh JetBrains dengan satu tujuan yang jelas, mempertahankan fitur – fitur baik yang dimiliki Java, dan di saat yang sama memperbaiki mayoritas masalah populer pada Java. Itulah mengapa Kotlin begitu populer, terlebih dengan diumumkannya Kotlin sebagai bahasa pemrograman yang direkomendasikan untuk pemrograman Android oleh Google di tahun 2017.
- Adaptasi Java
Iklim persaingan yang muncul dari bahasa pemrograman JVM, membuat Java kemudian berubah, hal ini ditandai dengan dirilisnya Java 8 pada Maret 2014, dengan fitur Java Lambda dan Stream, yang ditujukan untuk mengatasi popularitas dari pemrograman fungsional yang dibawa oleh Scala dan Groovy.
Java 8 memperkenalkan fitur baru yang menjadikannya juga dapat digunakan sebagai bahasa pemrograman fungsional. Tidak hanya object dan value, namun method dan lambda kini juga menjadi first class citizen dalam java, sehingga dapat digunakan sebagai sebuah argumen dari sebuah method .
Berikutnya, guna mengatasi popularitas dari Kotlin, mulai Java 15 yang dirilis pada September 2020 nanti, Java memperkenalkan banyak fitur baru yang mirip dengan fitur – fitur yang dimiliki Kotlin, beberapa diantaranya adalah sebagai berikut
- fitur baru
record
- text blocks (cara penulisan multi-line pada string yang diapit dengan triple quote)
- statement
switch
yang baru (adaptasi dari statementwhen
pada kotlin)
- Java Record
Subrutin akan mengulas salah satu contoh fitur baru yang mengadaptasi Kotlin dan juga scala yaitu Java Record fitur yang bisa dibilang merupakan fitur yang dinanti sejak lama oleh para programmer Java. Mungkin banyak programmer Java yang telah menggunakan Lombok untuk menghindari pembuatan getter dan setter secara tradisional untuk setiap field yang existing
Di Kotlin terdapat class data
yang digunakan untuk menyeleseikan masalah ini. Dan Java, menggunakan pendekatan yang sama dengan class record
, hal yang sama dilakukan dengan scala dengan class case
Tujuan dari class ini adalah untuk menampung data immutable di dalam sebuah object. Perhatikan class Employee berikut jika ditulis menggunakan Java
package com.subrutin.dto; public class Employe { private final String firstName; private final String lastName; private final String address; public Employe(String firstName, String lastName, String address) { super(); this.firstName = firstName; this.lastName = lastName; this.address = address; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public String getAddress() { return address; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((address == null) ? 0 : address.hashCode()); result = prime * result + ((firstName == null) ? 0 : firstName.hashCode()); result = prime * result + ((lastName == null) ? 0 : lastName.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Employe other = (Employe) obj; if (address == null) { if (other.address != null) return false; } else if (!address.equals(other.address)) return false; if (firstName == null) { if (other.firstName != null) return false; } else if (!firstName.equals(other.firstName)) return false; if (lastName == null) { if (other.lastName != null) return false; } else if (!lastName.equals(other.lastName)) return false; return true; } @Override public String toString() { return "Employe [firstName=" + firstName + ", lastName=" + lastName + ", address=" + address + "]"; } }
Perhatikan, begitu verbose-nya untuk sesuatu fungsi yang sederhana. Namun dengan record, programmer cukup menuliskannya sebagai berikut
public record EmployeeRecord(String firstName, String lastName,String address) {}
Bayangkan, dengan menggunakan record
berapa banyak baris code yang bisa dihemat, lebih sederhana dan enak dibaca.
- Kesimpulan