Kotlin or Java? Which one should you choose for developing your next android project?
Google recently declared Kotlin as the new official programming language for Android development at their event Google IO, in the midst of 2017. Since then, the Android development community has been in a state of dilemma and confusion. The primary question that lies in front of them is the most obvious one: Should they now use Kotlin or Java for developing their apps on the Android platform?
We will be reflecting upon some in-depth facts and challenges involved in using Kotlin and we will discuss a detailed comparison of Kotlin vs Java in this blog so that you are able to go with the best choice for your next android application!
Java was originally developed by Sun Microsystems as an object-oriented programming language and is now under the acquisition of Oracle. Java has, undoubtedly, cemented its place in the Android development community as the top choice for developing android apps for over 20 years now. Despite the undeniable reputation of Java, there was a long-awaited need of a modern programming language that could fill the gaps and shortcomings that Java clearly had and Kotlin did exactly that. Let’s have a look at some of the pros and cons of Java:
- Java is relatively simple and easy to understand. Moreover, the learning curve is pretty short and simple.
- Java is one of the topic choices when you intend to develop a cross-platform application. Apart from that, it works perfectly well for native apps as well.
- The applications built on Java are pretty lightweight and compact, ultimately leading to a swift and better app experience.
- Handling and assembling a large project becomes a simplified and handy process, thanks to the accelerated assembly with Gradle.
- Java comes in handy with android apps as the standard Android SDK comprises of plenty of standard Java libraries. Moreover, the language originates as open-source.
- Java lets you code more in a short span of time on account of its swift build process.
- Java originates as an old programming language with a few specific limitations, which tends to create a number of issues when dealing with the Android API Design.
- Java works relatively slow in comparison to other programming languages and requires more memory as well.
- Java demands heavy and lengthy code to be written in order to achieve tasks and thus, your code has a high chance of the presence of bugs and errors.
- Kotlin enables you to build clean APIs on account of its smart extension functions.
- Kotlin assists you in writing precise and smart code that is much more concise when compared to Java. For instance, a 50-line chunk of code can easily be substituted by 2-3 lines written in Kotlin. Thus, less code means fewer chances of bugs and errors.
- Developers can make use of the active Anko Library for Kotlin as there are more than 2000 projects present on Github that make use of this library in Kotlin.
- One of the primary advantages of using Java is that it operates efficiently with existing Java code. Developers can create modules in Kotlin and later, work them out with existing Java modules.
- Perhaps the most anticipated feature in Kotlin is the much-needed availability of null in its type system. Java had been lacking this or a long time now and thus, apps developed with Java were always subjected to nullability issues. Kotlin resolved that short-coming by introducing null in its type system.
- In most of the cases, the compilation process associated with Kotlin apps is much slower than those developed in pure Java.
- Since Kotlin is a newly introduced language, the learning resources for Kotlin are, somewhat, limited. Therefore, developers might find it difficult to get every single one of their queries answered on the internet. Nonetheless, the Kotlin community is expected to expand due to its extensively increasing popularity.
- The learning curve is definitely not that simplified as in the case of Java and involves some learning upfront and more time due to the concise syntax of Kotlin.
- Features of Android Studio like compilation and auto-complete run relatively slow in Kotlin as compared to Java.
- Since the language is new, it’s not an easy task to find the right developer or tutor with experience on his side. The developer community is still young and people are still practicing their skills on Kotlin.
Kotlin Vs Java – Performance wise
When it comes to the performance comparison of Java and Kotin, we can clearly say that there are no consistent and measurable differences between the two languages.
Kotlin, basically, tends to generate byte-code that’s ultimately similar to Java byte-code; therefore the two languages are observed to exhibit the same performance parameters.
This, however, is not the case when it comes to full and partial builds.
In the case of full builds, Java still is the faster language bearing 13% faster compilation rates than Kotlin. However, one parameter that comes into major play is the incremental speed of compiling. This plays a crucial role while testing incremental builds. Experiments reveal that Kotlin appears to have an edge over Java in case of incremental builds with Gradle daemon running.
This outcome is really an important one to ponder upon on account of the fact that mobile developers tend to re-compile codes in an incremental manner each time after making a few changes to the code. Thus, incremental builds are the more important category of builds that you should be taking into consideration.
Summing it up, in our comparison of kotlin performance vs java, we can clearly conclude that Java has a clear edge over Kotlin in case of clean complete builds but in case of scenarios that involve incremental builds, the two languages are expected to produce almost the same performance results or Kotlin might be leading in this case.
How to convert your Java code to Kotlin
In order to convert your existing Java app code into Kotlin, you need to follow a series of steps demonstrated as follows:
After installing the Kotlin plugin and adding the plugin to Gradle build files, first of all, you need to open your Java code file in Android Studio. After that, the complete procedure will be handled by Android Studio in a precise manner. Simply choose the src/main/java folder present in the project and select “Convert Java File to Kotin File” from the Code tab.
Android Studio will now convert your Java code into Kotlin and replace all of your .java files with ..kt files in src/main/java. The generated code as a result of the conversion would not compile initially. The main reason for this is the difference in the way Kotlin handles null values in contrary to Java.
The much-valued nullability feature in Kotlin tends to convert all of your previous data objects into nullable fields and thus, this explicit conversion results in compilation issues at first. However, this issue can easily be fixed by making your data-objects immutable with the use of non-nullable fields. The immutable version of your class can be created by simply specifying the list of arguments in a constructor as follows:
The immutable version by specifying arguments in constructor:
One more thing that might come into handy is the solution to the issue associated with Android Annotations. During the conversion of Java code into Kotlin, Android studio might have broken the usage of the Android annotations library.
In order to resolve this and re-use Android Annotations, simply add the koplin-kapt plugin to the specified build script. Moreover, you need to include the android annotations dependency to the kapt configuration as follows:
Once you are done with this, the fields marked with @ViewById will lead the annotation processor to throw out the following error message:
To resolve this, add lateinit to the declarations in the previous code and remove the nullable notations as follows:
Previous code (Error generated)
Updated code (Error resolved)
One last amend – The ”!!” notation present on references to the fields needs to be removed.
The lateinit keyword comes in with Kotlin and declares that the specific field is going to be initialized once the constructor is called and that the field can be marked as a non-nullable as well.
Finally, you are all set to go with your newly-converted Kotlin code without any more hassles involved.
Converting Kotlin to Java
The conversion from Kotlin, back to Java. is a pretty straightforward procedure.
Simply go to the Menu tab and select the “Tools” option from there. Select “Kotlin” from the dropdown and click on “Show Kotlin Bytecode”. Next, click on the decompile button. Here you have it! Your kotlin code has been successfully converted to Java code and is all set to go!
Kotlin Vs Java – The Syntax
The basic syntax differences between Kotlin and Java can be summed up as follows:
- Kotlin allows you to achieve more with compact and lesser snippets of code as compared to what Java brings to the table..
With Kotlin, class declarations can be as simple as follows:
data class Employee(var employeeid: String, var age: Int, var height: Float = 1.7f)
Kotlin will automatically generate getters, setters and other basic functions required for your class.
- Kotlin makes use of smart extension functions in order to get rid of the ugly and extensively used utils classes present in Java. The extension function is a usual Kotlin function that requires you to define the class whose instances will be able to use the extension function.
- Kotlin helps you in avoiding, perhaps, the biggest mess that Java code creates: Null Pointer exceptions! Kotlin completely eradicates this issue with the introduction of nullables in its data type system.
- With Kotlin, you can avoid the messy view-binding feature with the help of Kotlin Android Extensions. You no longer need to deal with the findViewById() method. Instead, you can easily access your views via their identifiers that can be declared in the xml layout.
Conclusion – Java or Kotlin: Do we have a winner?
Summing everything up, we arrive on the fact that Kotlin has undoubtedly made programming lives much easier due to its concise syntax and modern nature. With that said, Kotlin still has its limitations and shortcomings.
Nonetheless, Kotlin seems the future of Android development at the moment and if you are planning to switch your android development team from Java to Kotlin, we would recommend you to take it one step at a time.
This is primarily because Kotlin is a relatively new language and an immediate transition of a complete development team to it can result in an unprofessional team lacking expertise in that area. With that said, Kotlin holds a bright future for those who tend to carry on android development while learning and experimenting with this new innovative programming language!