Despite the undisputable reputation of Java as a programming language, Android was long in need for a modern language. Kotlin filled that gap, and has been loved by developers ever since it was announced as the official language for Android.
So what is Kotlin?
What is Kotlin used for?
Kotlin is a programming language that can be used for any kind of development – server-side, client-side or web.
Kotlin vs Java
So yes, Kotlin is a great language. It is robust, statically typed and much less verbose than Java. But does that automatically make it the first choice for Android development?
|Code Conciseness||Can’t be labeled as concise||Better than Java|
|Data Classes||Required to write a lot of boilerplate code||Requires adding only the data keyword in the class definition|
|Higher-Order Functions and Lambdas||Higher-order functions are implemented using Callables. Lambdas expressions are introduced in the Java 8||Comes as one of the prebuilt features|
|Implicit Widening Conversions||Available||Unavailable|
|Native Support for Delegation||Unavailable||Available|
|Primitive Types||Variables of a primitive type aren’t objects||Variables of a primitive type are objects|
|Support for Constructors||Can’t have secondary constructors. Although, can have multiple constructors (constructor overloading)||Can have one or more secondary constructors|
|Wildcard Types||Available||Unavailable, has declaration-site variance and type projects as an alternative|
Is Kotlin better than Java?
What about the fact that Java has been around for about 20 years now, is the language Android itself is built on and has been hugely revered among Android developers for a really long time now?
So definitely, Java has its place too, that is hard to compete with. So which language should you choose to learn? Jesica Thornsby of Tutsplus has some food for thought on the Kotlin vs. Java debate right here
The answer depends, really. In the later part of this article, I will discuss the pros and cons of each language in detail, so you can decide for yourself which language you want to learn. But for now, to make the long story short, I’d like to say this – anyone working with Android must have a working knowledge of Java, even if you wish to specialize in Kotlin or any other language later. So if you are already a java programmer who just now wants to start developing Android apps, you can start with Kotlin. But if you are an absolute beginner getting your feet wet in the world of programming, begin with Java. Java is the bedrock of Android development and hence, helps you learn the coding etiquette and get your basics right.
Now, let’s talk about both Java and Kotlin in detail, to see which one catches your fancy:
The Case for Java
Java is an object-oriented programming language developed by Sun Microsystems, which is now owned by Oracle. Being such an old language, Java does a whole lot more than just develop Android apps. So if you know your Java, you have a lot more job opportunities. You may not want to develop only Android apps all the time. Java lets you spread your wings wider. But if it’s specifically about Android app development that you want to talk about, let us discuss the pros and cons of Java.
Pros of Java
- Easy to learn and understand.
- Works well for native as well as cross-platform apps.
- Since Android itself is built on Java, there are plenty of Java libraries to your aid.
- Also, Java has a wide open-source ecosystem.
- Java apps are lighter and more compact, even when compared to Kotlin apps, resulting in a faster app experience.
- Java yields a faster build process too, letting you code more in less time.
- Thanks to the accelerated assembly with Gradle, assembling large projects becomes easier in Java.
Cons of Java
- Java is a type-heavy language, which means you write a lot more code, increasing the chances of errors and bugs.
- Java experiences some problems with Android API design due to inherent limitations.
- Java requires more memory compared to other languages and hence tends to be slower.
What Java Has that Kotlin Does Not
Developers who like to build a robust code with error recovery, Java’s checked exceptions are a feature still highly coveted. Kotlin does away with them to aid code conciseness but it still remains favoured by many developers.
Primitive types that are not classes
Char, double, float and byte are among the 8 primitive types that serve the sole purpose of containing pure, simple values of a kind. They come with a number of operations predefined and in Java, they are not an object instantiated from a class or a struct.
While Kotlin has no provision for static members, Java creates one instance of the static member that is shared across all instances of the class. The keyword static reflects that the particular member with which the keyword has been used belongs to a type itself instead of an instance.
Wildcard types have several uses including as the type of a field, parameter or local variable. While Kotlin doesn’t offer wildcard types, Java allows developers to use this type system for extended functionality.
As opposed to Kotlin, Java has a Ternary Operator that works like a basic if statement that evaluates true or false of a condition.
Pros of Kotlin
Kotlin is definitely faster to write and thus, much loved by developers. If it takes 50 lines of code in Java, it only takes 1-2 lines in Kotlin. This also means there are much less errors and bugs.
- Kotlin aids in the building of clean APIs.
- Thanks to Java bytecode, you can use Java libraries and frameworks in Kotlin, making the transition from Java to Kotlin a seamless one.
- Kotlin has the much needed null in its type system, something that was missing in java. Android uses null to represent the absence of a value and Kotlin lets you use null, greatly easing that pain point.
- The Anko Library available for Kotlin is of great help for developers and there’s a very active and wide collection of projects on Github.
Cons of Kotlin
- There is definitely a steep learning curve with Kotlin. Its highly concise syntax, while a great advantage, does require some learning upfront.
- Kotlin shows a slower compilation speed than Java in most cases, even though it does beat Java in a few instances.
- The Kotlin community is still young and the learning resources are limited, so finding answers to problems can be a little difficult. However, with its growing popularity, the resources and community will expand in time.
- Since Kotlin is still new, finding experienced developers who can act as mentors for your team can be a little difficult. Everyone out there is still just learning and experiencing it.
- Some features of Android Studio like auto-complete and compilation tend to run slower in Kotlin in comparison to Java.
What Kotlin Has That Java Doesn’t
Kotlin has emerged as the new Android language that offers developers a whole lot more.
Lambda expressions and higher order functions
Kotlin programming language offers first-class functions that can be stored in data structures and variables so functions can be operated in all the ways that are possible for other non-function values.
Kotlin being a statically typed language makes use of a range of function types including specialized language constructs such as Lambda expressions.
Kotlin’s extension functions allow importing a reference to a View into the activity file, allowing working with that view as if a part of the activity. Creating an extension function in Kotlin is as easy as prefixing the name of the class that needs to be extended to the name of the function being created.
One of the biggest issue developers faced with Java is the NullPointerExceptions. Kotlin for Android developers solves this infuriating problem by making all types non-nullable by default.
Unlike Java, Kotlin lets developers automatically handle redundant casts without having to check type or having to cast inside a statement. As long as the cast is already checked with the ‘is operator’, smart casts in the Kotlin compiler tracks the conditions inside an ‘if expression’.
String templates in Kotlin allow developers to assign dynamic values directly to their strings and easily print statements in Kotlin using templates.
Primary conductors in Kotlin are used to initialize the class. It can be declared at the class header level making it possible to automatically initialize the variables.
Kotlin natively supports delegation patterns, requiring zero boilerplate code. This offers an effective alternative to implementation inheritance. A class derived can delegate all of its public members toa specified object whereby implementing an interface easily.
Type inference for variable and property types
Kotlin being a strongly typed language supports Type Inference. So you don’t need to define data type of a variable explicitly as the Kotlin compiler will do it for you automatically.
In Kotlin programming language, a singleton pattern is used as a replacement for static fields that can be created by simply declaring that object. Singleton pattern ensures that only one instance would be created and it would act as a single point of access thereby ensuring thread safety.
Declaration-site variance and type projections
While Java has wildcard types, Kotlin has the ability to specify variance annotations on class declarations. Called, declaration-site variance, this is a convenient option as the annotations apply to all places where the class is used.
So say you want to use a generic class without knowing the type parameter, type projection will take care of it for you.
In Kotlin, you can create easily ranges for any comparable type using rangeTo() and downTo() functions for the operator.
Kotlin allows android developers to provide implementations for a predefined set of operators on their types. These operators have fixed symbolic representation and precedence.
If the code needs a function or a property to be tied to a class rather than to instances of it, it can be declared inside a companion object. The companion object is a singleton and can be accessed directly via the name of the containing class.
A data class is a class that only contains state and does not perform any operation. The biggest advantage of using them is that it they generate a large amount of auto-generated code.
Separate interfaces for read-only and mutable collections
Unlike Java, Kotlin has separate interfaces for working with collections. The plain collection interface handles accessing data and the MutableCollection interface that handles modifying the data.
Kotlin Coroutines are a design pattern that you can use on Android to simplify code that executes asynchronously. They help manage long-running tasks that might otherwise block the main thread and make your app unresponsive.
The Future of Kotlin
The advantages of Kotlin for Android developers are undeniably the future of development. Many businesses are adopting Kotlin as their official Android programming language. The future of Kotlin as the new android language is certainly a bright one.
In all fairness, chances are that you have people on your team who are already familiar with Java. Switching the entire team to Kotlin at a time can be a bit of a shock, so it is important to do this transition slowly, one person at a time. Having said that, Kotlin is the new official language and owing to its modern nature, it will become widely adopted in the future, so learning it and starting development with it right now would be a good idea. Though Java will continue to be a popular language for a long time and isn’t likely to be entirely replaced. So take your time and make the switch gently.
At the end of the day, it’s all about what you feel comfortable with. Like I said in the beginning, to be a true blood Androidian, you will need to have a working language of Java. But if you already do have that, Kotlin is the language of the future, so you might as well spend some time getting better at it.