What if you could write one function that magically works for any type of data?
Why Generic function declaration in Kotlin? - Purpose & Use Cases
Imagine you want to write a function that works with different types of data, like numbers, text, or even custom objects. Without a generic function, you'd have to write the same function many times for each type.
Writing separate functions for each type is slow and boring. It also makes your code longer and harder to fix if you find a mistake. Plus, you might forget to update one version, causing bugs.
Generic function declaration lets you write one function that works with any type. It saves time, keeps your code clean, and reduces mistakes by reusing the same logic for all types.
fun printInt(value: Int) { println(value) }
fun printString(value: String) { println(value) }fun <T> printValue(value: T) { println(value) }It enables you to write flexible and reusable functions that adapt to any data type effortlessly.
Think of a function that sorts a list of any kind of items, like numbers or names, without rewriting the sorting logic for each type.
Writing separate functions for each type is inefficient.
Generic functions let you write one function for many types.
This makes your code cleaner, shorter, and easier to maintain.
Practice
<T> before the function name?Solution
Step 1: Understand generic type declaration
Declaring<T>before a function name means the function can accept any type as input.Step 2: Purpose of generic functions
This makes the function reusable for different data types without rewriting it for each type.Final Answer:
To allow the function to work with any type specified when called -> Option DQuick Check:
Generic functions = reusable for any type [OK]
- Thinking generic restricts to one type
- Confusing generic with function overloading
- Assuming generic improves speed automatically
printItem that takes a parameter of any type T in Kotlin?Solution
Step 1: Identify correct generic syntax
In Kotlin, generic type parameters are declared before the function name using<T>.Step 2: Check parameter declaration
The parameter must specify its type asT, soitem: Tis correct.Final Answer:
fun <T> printItem(item: T) { println(item) } -> Option AQuick Check:
Generic syntax = <T> before function name [OK]
- Placing <T> after function name
- Not specifying parameter type as T
- Using parentheses incorrectly around <T>
fun <T> identity(value: T): T {
return value
}
fun main() {
println(identity(123))
println(identity("Hello"))
}Solution
Step 1: Understand the generic function behavior
The functionidentityreturns the same value it receives, regardless of type.Step 2: Trace the calls in main()
Callingidentity(123)returns 123, andidentity("Hello")returns "Hello".Final Answer:
123 Hello -> Option BQuick Check:
Generic function returns input value [OK]
- Expecting type conversion
- Thinking output repeats first call
- Assuming compilation error due to mixed types
fun printValue<T>(value: T) {
println(value)
}Solution
Step 1: Check generic syntax rules
In Kotlin, generic type parameters must be declared before the function name, not after.Step 2: Analyze the given code
The code declaresprintValue<T>, which is incorrect syntax.Final Answer:
Generic type parameter <T> must be declared before the function name -> Option AQuick Check:
Generic <T> goes before function name [OK]
- Putting <T> after function name
- Assuming generic parameters go in parentheses
- Thinking generic functions must return a value
swap that swaps two elements in a mutable list at given indices. Which of the following is the correct Kotlin function declaration and implementation?Solution
Step 1: Correct generic syntax and parameter types
The generic type parameter<T>must be declared before the function name. The list must be mutable to allow swapping.Step 2: Verify implementation correctness
The function swaps elements at indicesiandjusing a temporary variable, which is correct.Final Answer:
fun <T> swap(list: MutableList<T>, i: Int, j: Int) { val temp = list[i]; list[i] = list[j]; list[j] = temp } -> Option CQuick Check:
Generic swap needs <T> before name and MutableList<T> [OK]
- Putting <T> after function name
- Using immutable List instead of MutableList
- Using MutableList<Any> losing type safety
Ready to prove it?
Pass the test and this pattern moves unknown
