Bird
Raised Fist0
Android Kotlinmobile~20 mins

Extension functions in Android Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Extension Function Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
📝 Syntax
intermediate
2:00remaining
Identify the correct extension function syntax
Which option correctly defines an extension function isEven for Int that returns true if the number is even?
Aextension fun Int.isEven(): Boolean { return this % 2 == 0 }
Bfun Int.isEven: Boolean = this % 2 == 0
Cfun isEven(this Int): Boolean = this % 2 == 0
Dfun Int.isEven(): Boolean = this % 2 == 0
Attempts:
2 left
💡 Hint
Remember, extension functions use the syntax: fun ReceiverType.functionName() { ... }
❓ ui_behavior
intermediate
2:00remaining
Extension function effect on UI component
Given this extension function for TextView in Android Kotlin:
fun TextView.makeRed() { this.setTextColor(android.graphics.Color.RED) }

What will happen when you call myTextView.makeRed() in an activity?
AThe text color of myTextView changes to red
BThe background color of myTextView changes to red
CThe app crashes with a NullPointerException
DNothing happens because extension functions cannot modify UI
Attempts:
2 left
💡 Hint
Extension functions can call existing methods on the receiver object.
❓ lifecycle
advanced
2:00remaining
Extension function and lifecycle impact
Consider an extension function on Activity that shows a toast message:
fun Activity.showWelcome() { Toast.makeText(this, "Welcome!", Toast.LENGTH_SHORT).show() }

What is a potential lifecycle-related issue when calling showWelcome() inside onCreate() of an activity?
AThe toast may not show if the activity is not fully created yet
BThe toast will cause a memory leak if called in onCreate
CThe extension function will crash because Toast requires a Fragment
DThere is no issue; the toast always shows correctly
Attempts:
2 left
💡 Hint
Consider when UI elements are ready during the activity lifecycle.
❓ navigation
advanced
2:00remaining
Extension function for navigation
You have this extension function for Fragment to navigate to another fragment:
fun Fragment.goToDetails() { findNavController().navigate(R.id.detailsFragment) }

What happens if you call goToDetails() in a fragment that is not attached to a NavController?
ANavigates to detailsFragment successfully
BCauses a compile-time error
CThrows an IllegalStateException at runtime
DDoes nothing silently
Attempts:
2 left
💡 Hint
findNavController() requires the fragment to be attached to a NavHost.
🔧 Debug
expert
2:00remaining
Debugging extension function unexpected behavior
Given this extension function:
fun String.removeFirstChar(): String = this.substring(1)

What happens if you call "".removeFirstChar() (empty string)?
AReturns an empty string
BThrows StringIndexOutOfBoundsException
CReturns null
DReturns the original empty string
Attempts:
2 left
💡 Hint
Check what substring(1) does on an empty string.

Practice

(1/5)
1. What is the main purpose of an extension function in Kotlin?
easy
A. To override existing functions in a class
B. To create a new subclass from an existing class
C. To add new functions to existing classes without modifying them
D. To delete functions from a class

Solution

  1. Step 1: Understand extension functions

    Extension functions let you add new functions to classes without changing their original code.
  2. Step 2: Compare options

    Only To add new functions to existing classes without modifying them correctly describes this behavior; others describe subclassing, overriding, or deleting, which are different concepts.
  3. Final Answer:

    To add new functions to existing classes without modifying them -> Option C
  4. Quick Check:

    Extension function = Add new functions [OK]
Hint: Extension functions add features without changing original class [OK]
Common Mistakes:
  • Confusing extension functions with inheritance
  • Thinking extension functions override existing methods
  • Believing extension functions can remove class methods
2. Which of the following is the correct syntax to declare an extension function isEven() for Int in Kotlin?
easy
A. fun isEven(): Boolean { return this % 2 == 0 }
B. fun Int.isEven(): Boolean { return this % 2 == 0 }
C. fun Int.isEven: Boolean { return this % 2 == 0 }
D. fun Int.isEven() Boolean = this % 2 == 0

Solution

  1. Step 1: Check extension function syntax

    Extension functions are declared with fun ClassName.functionName(), so fun Int.isEven() is correct.
  2. Step 2: Validate return type and body

    fun Int.isEven(): Boolean { return this % 2 == 0 } correctly uses parentheses and return type with a proper function body.
  3. Final Answer:

    fun Int.isEven(): Boolean { return this % 2 == 0 } -> Option B
  4. Quick Check:

    Extension syntax = fun ClassName.functionName() [OK]
Hint: Extension syntax always starts with fun ClassName.functionName() [OK]
Common Mistakes:
  • Omitting the receiver type before function name
  • Missing parentheses after function name
  • Incorrect return type declaration
3. What will be the output of this Kotlin code?
fun String.addHello() = "Hello, $this!"

fun main() {
  val name = "Anna"
  println(name.addHello())
}
medium
A. Hello, Anna!
B. AnnaHello, !
C. Hello, !
D. Compilation error

Solution

  1. Step 1: Understand the extension function

    The function addHello() adds "Hello, " before the string and an exclamation mark after.
  2. Step 2: Apply function to variable

    Calling name.addHello() where name is "Anna" returns "Hello, Anna!".
  3. Final Answer:

    Hello, Anna! -> Option A
  4. Quick Check:

    Extension adds prefix and suffix correctly [OK]
Hint: Extension functions run like normal methods on instances [OK]
Common Mistakes:
  • Misreading string interpolation syntax
  • Assuming extension modifies original string
  • Expecting output without exclamation mark
4. Identify the error in this Kotlin extension function code:
fun Int.isPositive() {
  return this > 0
}
medium
A. Function must declare a return type Boolean
B. The function body should not use return
C. The keyword 'this' cannot be used in extension functions
D. Extension function cannot be declared on Int

Solution

  1. Step 1: Check function return type

    The function returns a Boolean expression but does not declare a return type, which is required.
  2. Step 2: Confirm correct syntax

    Adding : Boolean after the function name fixes the error.
  3. Final Answer:

    Function must declare a return type Boolean -> Option A
  4. Quick Check:

    Return type needed for non-Unit functions [OK]
Hint: Declare return type when function returns a value [OK]
Common Mistakes:
  • Omitting return type for Boolean-returning functions
  • Thinking 'this' is disallowed in extensions
  • Confusing Unit functions with value-returning ones
5. You want to add an extension function toTitleCase() to String that capitalizes the first letter of each word. Which implementation correctly achieves this?
hard
A. fun String.toTitleCase() = this.toUpperCase()
B. fun String.toTitleCase() = this.lowercase()
C. fun String.toTitleCase() = this.replaceFirstChar { it.uppercase() }
D. fun String.toTitleCase() = split(" ").joinToString(" ") { it.capitalize() }

Solution

  1. Step 1: Understand title case requirement

    Title case means capitalizing the first letter of each word, not the whole string or just the first letter.
  2. Step 2: Analyze options

    fun String.toTitleCase() = split(" ").joinToString(" ") { it.capitalize() } splits the string by spaces, capitalizes each word, then joins them back, correctly implementing title case.
  3. Final Answer:

    fun String.toTitleCase() = split(" ").joinToString(" ") { it.capitalize() } -> Option D
  4. Quick Check:

    Title case = capitalize each word [OK]
Hint: Split words, capitalize each, then join for title case [OK]
Common Mistakes:
  • Using uppercase() on whole string instead of each word
  • Capitalizing only first character of entire string
  • Ignoring spaces between words
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard