Kotlin is a statically-typed programming language developed by JetBrains. It runs on the Java Virtual Machine (JVM) and can be used to develop Android applications, server-side applications, and more. Kotlin is designed to be fully interoperable with Java, allowing developers to use both languages within the same project. Known for its conciseness, expressiveness, and safety features, Kotlin aims to address some of the shortcomings of Java while maintaining compatibility. In 2017, Google announced Kotlin as an official language for Android app development, contributing to its growing popularity in the software development community.
This article is a must-read for anyone preparing for Android interviews. Let’s deep dive into the Kotlin important interview questions.
Ans: Kotlin is an open-source programming language that includes concepts from object-oriented programming. It is JVM-based and may be compiled with either Java source code or the LLVM compiler. It's commonly used to create Android apps, server-side apps, and a wide range of other applications. The properties like Range Expression, Extension Function, Companion Object, Smart casts, and Data classes are regarded as a Kotlin Language bonus.
2. What is Extension Function?
Ans: The programmer can extend the functionality of existing classes in Kotlin without inheriting them. This is accomplished via a feature called extensions. Extension Functions are functions that are added to an existing class. The prefix receiver-type with method name is used to declare the extension function.
fun <Class_name>.<Method_name>()
3. What is Kotlin Null Safety?
Ans: Null safety in Kotlin is a procedure for removing the risk of a null reference in the code. If any null argument is supplied without any additional statements being executed, the Kotlin compiler immediately throws NullPointerException.
4. How many Constructors are there in Kotlin?
Ans: In Kotlin, there are two types of constructors: The Primary Constructor: It is a simple way to initialize a class.
Student(val first name: String, var age: Int){
//class body
}
The Secondary Constructor: Enables us to add further initialization logic
5. Do primary and secondary constructors have any relationship?
Ans: Yes, one must explicitly invoke the primary constructor while using a secondary constructor.
6. What is the critical difference between ‘var’ and ‘val’ for Variable declaration in Kotlin?
Ans: If we want to declare a mutable(changeable) variable, we can use the var keyword. Use val for immutable variables, which can't be modified once they've been allocated.
7. What is the key difference between ‘val’ and ‘const’ for Variable declaration in Kotlin?
Ans: The variables which are declared with the val and ‘const’ keywords are immutable. The value of the const variable must be known at compile-time, whereas we can assign the value of the ‘val’ variable at any time(runtime also).
8. Tell about some features of Kotlin that are not present in Java?
Ans: Java lacks a few major Kotlin features:
Overloading of the Operator
Coroutines
The Null Safety
Extension Function
The Range Expressions
Smart Casts
The Companion Objects
9. What is the Key Difference between ‘ fold’ and ‘reduce’ in Kotlin?
Ans: Fold: The fold is a function that takes an initial value, and the lambda users give in the first invocation. The starting value and the collection's first element will be given as parameters.
listOf(1, 2, 3).fold(0) { acc,next -> acc + next }
The lambda will be called for the first time with parameters 0 and 1.
Reduce: The reduce function does not require a starting value. Instead, it starts with the initial element of the collection.
listOf(1, 2, 3).reduce { acc, next -> acc + next }
Here, The lambda will be called for the first time with parameters 1 and 2.
10. What is Ranges Operator?
Ans: The ranges operator supports the iteration of a range. It has the operator form (..) As an example,
for (num in 1..5){ @ print(num) @ }
It will print 1 to 5 in Output.
Kotlin Interview Questions for Intermediate
11. What is the method to Compare Two Strings in Kotlin?
Ans: In Kotlin, you can compare strings in the following ways:
By Using the “ = =” operator The == operator in Kotlin is used to compare the structural equality of two objects. If both objects have the same value, it will return true.
By using equals() function This is a case-sensitive comparison. In Kotlin, set the second parameter to True for case-insensitive string comparison.
By Using Extension function compareTo() Instead of a Boolean value, CompareTo() produces an Int value. It is also Case-sensitive.
12. Is there a ternary operator in Kotlin like there is in Java?
Ans: No, we don't have a ternary operator in Kotlin, but we can use the if-else or Elvis operators to mimic the functionality of a ternary operator.
13. What is Elvis operator?
Ans: The Elvis operator in Kotlin takes two arguments and returns the first if it's non-null or the second if it's not. The null coalescing operator is a fancy name for it. It's a null-safety-checking variation of the ternary operator.
Example:
var name:String? = " Coding Ninjas"
val nameLength = name?.length ?: -1
println(nameLength)
If the value is not null, the Elvis operator(?:) returns the length of the name; otherwise, if the value is null, it returns -1.
14. What do @JvmStatic, @JvmOverloads, and @JvmFiled mean in Kotlin?
Ans: The uses of @JvmStatic, @JvmOverloads, and @JvmField in Kotlin are as follows:
@JvmStatic: This annotation informs the compiler that the method is a static method called from Java code.
@JvmOverloads: The @JvmOverloads annotation is used to utilize the default values passed as an argument in Kotlin code from Java code.
@JvmField: We need to use the @JvmField in the Kotlin code to access the fields of a Kotlin class from Java code without requiring any getters or setters.
15. In Kotlin, can we use primitive types like int, double, and float?
Ans: We can't utilize primitive types directly in Kotlin. As an object wrapper for primitives, we can use classes like Int, Double, etc. However, these primitive types exist in compiled bytecode.
16. Discover the different data types offered in Kotlin and gain a comprehensive understanding of each one.
Ans: Data types are divided into the following groups:
Numbers
Numbers in Kotlin can be either integer or floating point type. It also contains long long, short, double , etc.
Example:
fun main(args: Array<String>) {
val num1: Int = 100000
val num2: Float = 5.75F
println(num1)
println(num2)
}
Output:
100000
5.75
Characters
The character data type is used for storing a single character.
fun main(args: Array<String>) {
val char1: Char = 'Z'
println(char1)
}
Output:
Z
Booleans
The Boolean data type stores either ‘true’ or ‘false’.
fun main(args: Array<String>) {
val bool1: Boolean = true
println(bool1)
}
Output:
true
Strings
The string data type is used for storing a sequence of characters. The value must be surrounded by double quotes.
fun main(args: Array<String>) {
val str1: String = "Coding Ninjas Studio"
println(str1)
}
Output:
Coding Ninjas Studio
Arrays
Arrays are used for storing elements of the same data type.
fun main(args: Array<String>) {
val arr:Array<String> = arrayOf("Coding", "Ninjas", "Studio")
for (x in arr) {
println(x)
}
}
Output:
Coding
Ninjas
Studio
17. Examine the process of variable declaration in Kotlin and explore the various types of variables available, supported by illustrative examples.
Ans: Variables in Kotlin are declared using either the “var” keyword or the “val” keyword. The equal sign is used for assigning values to a variable.
Variables declared using the “val" keyword cannot be changed, while, variables declared using the “var” keyword can be changed later as the program executes.
In Kotlin, specifying the type of a variable is not necessary if the value is assigned at the time of declaration, however, if you want to assign the value later, you must specify its data type.
Example 1:
fun main(args: Array<String>) {
/*No need to specify data types when the value is assigned during declaration*/
val num1 = 5
var num2 = 6
println(num1)
println(num2)
}
Output 1:
5
6
Values of the two variable are printed to the console.
Example 2:
fun main(args: Array<String>) {
val num2:Int = 16
num2 = 17
}
Output 2:
Line 3: Char 5: error: val cannot be reassigned
num2 = 17
The code changes the value of a “val” variable, so the compiler throws an error.
Example 3:
fun main(args: Array<String>) {
var temp
temp = "Coding Ninjas Studio"
}
Output 3:
Line 2: Char 9: error: this variable must either have a type annotation or be initialized
var temp
As the type was not specified, the compiler threw an error.
18. What do you mean by data classes in Kotlin with example?
Ans: Data classes in Kotlin are primarily used for storing different types of data variables. They have some in-built standard functionality in the form of utility functions that eliminates the need for boilerplate code.
A class is marked to be a data class using the “data” keyword. Each data class should atleast have 1 primary constructor, that helps the compiler derive and generate utility functions.
Example:
fun main(args: Array<String>) {
data class student(val roll: Int, val name: String, val age:Int)
val stud1=student(1,"Xyz", 15)
//using the toString utility functions
println(stud1.toString())
println(stud1.name.hashCode())
}
Output:
student(roll=1, name=Xyz, age=15)
88441
The hashCode() method generates and returns the hash value of a data member, while the toString() method returns the string representation of a class object.
19. Explain the difference between Kotlin and Java?
Ans:
Kotlin and Java are both programming languages commonly used for developing native android applications, following are some key differences between them:-
Kotlin
Java
Kotlin uses a very modern approach to the syntax which aims to reduce the boilerplate code without compromising the performance.
Java is known for having excessive boilerplate for the same performance and functionality
It is safer than Java when it comes to null pointer exceptions. It provides in-built null safety features that helps it prevent null pointer exceptions.
Null pointer exceptions are dealt by the programmers.
Supports extension functions, which lets you add new functions to existing classes without modifying their source code.
This feature doesn't exist in Java.
Has support for functional programming concepts and provides powerful language features like lambda expressions, higher-order functions, and functional types.
Java 8 introduced some functional programming features, but they are not on par with Kotlin when it comes to ease of use.
Kotlin has native support for coroutines, which is a way to write asynchronous code in a sequential manner.
Java relies on external libraries like RxJava or CompletableFuture for similar functionality.
Ans: String Interpolation is useful if we want to use a variable or execute an operation on a string. The $ character is used to interpolate a variable in Kotlin, and the ${} character is used to interpolate an expression.
String formatting in Kotlin is more powerful than simple interpolation.
val name = "Coding Ninjas"
print("I am learning from $name!")
21. When should we use Kotlin's lateinit keyword?
Ans: The lateinit keyword in Kotlin is used for variables that are initialized after the declaration, or we may say that a lateinit variable is a variable that is late initialized. When we know that the variable will be initialized before we use it, we use the lateinit keyword.
22. In Kotlin, what is the difference between lateinit and lazy?
Ans: The given table shows the difference between lateint and lazy
lateint
lazy
Only used or var
Only used for val
Can be initialized multiple times
Can only be initialized once
It's possible to initialize the object from any position
Only the initializer lambda can be used to initialize it.
It is not permitted on primitive type properties.
It is allowed on primitive types properties.
23. What is the main difference between FlatMap and Map?
Ans: FlatMap is a way for combining all the elements in a list into a single one. A map is a tool for transforming a list based on specified conditions.
24. What is the critical difference between List and Array types in Kotlin?
Ans: You can use an Array if you have a list of data that has a fixed size. However, since the list's size can change, we'll need to use a mutable list.
25. In Kotlin, can we use the new keyword to create a class object?
Ans: No, we don't have to use the new keyword to create a class object in Kotlin. To create a class object, we just type
var varName = ClassName()
26. What is the double-bang!! Operator in Kotlin?
Ans: The "not-null assertion operator" is another name for this operator. The double exclamation(!!) operator converts any value to a non-NULL type value, and if the corresponding value is NULL, it throws an exception (KotlinNullPointerException).
Example:
fun main(args: Array<String>) {
var name: String?
name = null
println(name!!)
It allows you to be absolutely sure that the value isn't null.
27. What's the difference between blocking and suspending?
Ans: Blocking call to a function means that any further calls from the same thread will cause the parent's execution to halt. As a result, if you make a blocking call on the main thread's execution, the UI will effectively be frozen. The user will see a static screen until the blocking calls are completed, which is not a good thing.
Suspending does not always prevent your parent function from running. You can easily push a suspended function to a different thread if you call it on one thread. It will not block the main thread if it is a significant operation. The suspending process will pause its execution if it needs to suspend. This frees up the thread for other tasks.
28. In Kotlin, what is the main difference between open and public?
Ans: "Open for extension" is what the open keyword indicates. The open annotation on a class is the total opposite of the final annotation in Java: it allows others to inherit from it.
If no visibility modifier is specified, the public is used by default, which means your declarations will be accessible everywhere.
29. In Kotlin, what is used as an equivalent of Java static?
Ans: Companion Object is similar to the static method in Kotlin. When you're extending a companion object with an interface, it's a better idea to define functions inside the companion object. Static class in java becomes the companion object in Kotlin.
Example:
Static Class in Java:
class CodingNinja {
public static int a() { return 1; }
Companion Object in Kotlin:
class CodingNinja{
companion object {
fun a() : Int = 1
}
}
// to run
CodingNinja.a();
30. What is Inline function?
Ans: Higher-order functions perform better when inline functions are used. The compiler is instructed to copy parameters and functions to the call location using the inline function.
Example:
fun main(args: Array<String>) {
inlineFunction({ println("calling the inline functions")})
}
inline fun inlineFunction(myFun: () -> Unit ) {
myFun()
print("The code inside the inline function")
}
Output:
Calling the inline functions
The code inside the inline function.
31. What is a noinline Function in Kotlin?
Ans: This is used to specify whether or not expressions should be inlined in the call. If there are no noinline function parameters and no reified type parameters in an inline function, the compiler will issue a warning.
inline fun noinline(A: () -> Unit, noinline B: () -> Unit) {
A()
B()
}
32. What is the meaning of Pair and Triple in Kotlin?
Ans: Pairs and Triples are used to return two and three values from a function, respectively, and the returned values might be of the same or different data types.
33. What do you mean by Label?
Ans: A label can be applied to any expression in Kotlin. Labels consist of an identifier followed by the @ symbol, such as abc@ or xyz@. Place a label symbol in front of an expression to label it.
Example:
fun Primes() {
// Here we are using labels to specify which loop will skip the current iteration
outer@for (num in 2..100) {
for (check in 2..(num / 2)) {
if (num % check == 0) {
continue@outer
}
}
println(num)
}
}
34. What are the benefits of Sealed class over Enum?
Ans: We can simply add many custom constructors to a sealed class depending on our needs. We can also define many functions, each with its name, parameters, and return type.
35. Which one is better to use - val mutableList or var immutableList in the context of Kotlin.
Ans: A "val mutable list" is more efficient if it is being modified too often, while a “var immutable list” is safer if the list is accessible outside of the method or class. So it depends on you to either choose safety or efficiency.
36. What is meant by coroutines in the context of Kotlin.
Ans: Coroutines in Kotlin are an abstraction of threads, that allows you to write asynchronous code in a more easier and sequential manner. They provide a way to suspend the execution of a function without blocking the underlying thread while also allowing other tasks to proceed concurrently.
37. Examine the concept of suspend functions within the context of Kotlin and understand their significance.
Ans: Suspend functions in Kotlin are designed to be used with coroutines, they can be paused and resumed without blocking the underlying thread which makes your asynchronous code more efficient. They are defined using the suspend modifier in their function signature.
You can prepare for a Kotlin interview by reviewing Kotlin syntax, focusing on null safety, extension functions, and explore common libraries. You can practice coding exercises and understand interoperability with Java for a well-rounded preparation.
What are the topics in Kotlin?
Key topics include syntax basics, null safety, data classes, lambdas, coroutines, extension functions, and interoperability with Java.
Is Kotlin functional or OOP?
Kotlin is both functional and object-oriented. It supports functional programming paradigms, offering features like higher-order functions, while also embracing object-oriented principles like classes and inheritance.
Which framework is used for Kotlin?
Kotlin can be used with various frameworks. For web development, Ktor is a popular choice. For Android, Kotlin is often used with the Android development framework.
Conclusion
We’ve concluded our Kotlin interview questions and answers. In this article, we've covered some of the most common interview questions that you might encounter during your Kotlin interview.
Don't forget to browse over this list of Kotlin interview questions and answers once you've sat down to prepare for your Kotlin interview. You can learn about Kotlin by visiting this link. For programming knowledge in Kotlin visit this article. When you witness the same questions being asked to you in your interview, you will feel more confident and will breeze through the interview.