Bird
Raised Fist0
Kotlinprogramming~5 mins

Local functions (nested functions) in Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a local function in Kotlin?
A local function is a function defined inside another function. It helps organize code by grouping related tasks within the outer function.
Click to reveal answer
beginner
How do local functions help in Kotlin programming?
Local functions improve readability and structure by keeping helper code close to where it is used. They also limit the scope, so the local function can't be accessed outside its containing function.
Click to reveal answer
intermediate
Can a local function access variables from its outer function in Kotlin?
Yes, a local function can access and use variables declared in its outer function. This allows sharing data without passing parameters explicitly.
Click to reveal answer
beginner
Write a simple Kotlin function with a local function that prints a greeting.
fun greet() { fun sayHello() { println("Hello!") } sayHello() }
Click to reveal answer
intermediate
Why might you choose a local function over a lambda in Kotlin?
Local functions can have names, making code clearer. They also support recursion and can be easier to debug compared to lambdas.
Click to reveal answer
Where can a local function be declared in Kotlin?
AOnly inside an object
BAt the top level of a file
CInside another function
DInside a class but outside any function
Can a local function access variables from its outer function in Kotlin?
AYes, it can access variables from the outer function
BOnly if variables are declared as global
CNo, it can only access its own variables
DOnly if variables are passed as parameters
What is one advantage of using local functions in Kotlin?
AThey can be called from anywhere in the program
BThey help organize code and limit scope
CThey replace classes
DThey run faster than top-level functions
Which of these is a valid way to define a local function in Kotlin?
Afun outer() { fun inner() { println("Hi") } inner() }
Bfun inner() { fun outer() { println("Hi") } }
Cfun inner() { println("Hi") } fun outer() { inner() }
Dfun outer() { println("Hi") }
Why might you prefer a local function over a lambda expression in Kotlin?
ALocal functions are global
BLocal functions cannot access outer variables
CLambdas are slower to execute
DLocal functions can have names and support recursion
Explain what a local function is in Kotlin and how it can be useful.
Think about functions inside functions.
You got /4 concepts.
    Describe how local functions can access variables from their outer function and why this is helpful.
    Consider variable visibility inside nested functions.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is a local function in Kotlin?
      easy
      A. A function defined outside any class
      B. A function defined inside another function
      C. A function that can only return integers
      D. A function that must be public

      Solution

      1. Step 1: Understand function placement

        Local functions are defined inside other functions, not at the top level or in classes.
      2. Step 2: Identify the correct definition

        A function defined inside another function correctly states that a local function is inside another function, which matches Kotlin's definition.
      3. Final Answer:

        A function defined inside another function -> Option B
      4. Quick Check:

        Local function = function inside function [OK]
      Hint: Local functions are nested inside other functions [OK]
      Common Mistakes:
      • Thinking local functions are top-level
      • Confusing local functions with anonymous functions
      • Assuming local functions must be public
      2. Which of the following is the correct syntax to declare a local function inside a Kotlin function?
      easy
      A. fun outer() { fun inner() { println("Hi") } }
      B. fun outer() { def inner() { println("Hi") } }
      C. fun outer() { function inner() { println("Hi") } }
      D. fun outer() { inner() fun { println("Hi") } }

      Solution

      1. Step 1: Recall Kotlin function syntax

        Kotlin uses the keyword 'fun' to declare functions, including local ones.
      2. Step 2: Check each option

        fun outer() { fun inner() { println("Hi") } } uses 'fun' correctly for both outer and inner functions. Others use invalid keywords or wrong order.
      3. Final Answer:

        fun outer() { fun inner() { println("Hi") } } -> Option A
      4. Quick Check:

        Local function syntax uses 'fun' keyword [OK]
      Hint: Local functions use 'fun' keyword inside another function [OK]
      Common Mistakes:
      • Using 'def' or 'function' instead of 'fun'
      • Placing 'fun' after the function call
      • Missing braces for function body
      3. What will be the output of the following Kotlin code?
      fun greet() {
          val prefix = "Hello"
          fun sayName(name: String) {
              println("$prefix, $name!")
          }
          sayName("Alice")
      }
      fun main() {
          greet()
      }
      medium
      A. Hello, Alice!
      B. Hello Alice!
      C. Error: prefix not accessible
      D. No output

      Solution

      1. Step 1: Understand variable scope in local functions

        The local function 'sayName' can access 'prefix' from the outer function 'greet'.
      2. Step 2: Trace the output of sayName("Alice")

        It prints "Hello, Alice!" exactly as formatted with the comma and exclamation mark.
      3. Final Answer:

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

        Local function accesses outer variable = Hello, Alice! [OK]
      Hint: Local functions can use outer variables directly [OK]
      Common Mistakes:
      • Assuming outer variables are inaccessible
      • Missing punctuation in output
      • Thinking code produces error
      4. Identify the error in this Kotlin code snippet:
      fun calculate() {
          fun add(a: Int, b: Int): Int {
              return a + b
          }
      }
      fun main() {
          println(add(3, 4))
      }
      medium
      A. Missing return type for 'add'
      B. Syntax error in function declaration
      C. Cannot call local function 'add' from outside 'calculate'
      D. No error, prints 7

      Solution

      1. Step 1: Understand local function visibility

        The function 'add' is local inside 'calculate' and cannot be accessed outside it.
      2. Step 2: Check where 'add' is called

        'add(3, 4)' is called in 'main', outside 'calculate', causing an error.
      3. Final Answer:

        Cannot call local function 'add' from outside 'calculate' -> Option C
      4. Quick Check:

        Local functions are private to outer function [OK]
      Hint: Local functions can't be called outside their outer function [OK]
      Common Mistakes:
      • Trying to call local function from outside
      • Confusing local and top-level functions
      • Ignoring function scope rules
      5. You want to write a Kotlin function processNumbers that takes a list of integers and returns the sum of their squares. You decide to use a local function square inside it. Which of the following implementations correctly uses a local function to achieve this?
      hard
      A. fun processNumbers(nums: List<Int>): Int { fun square(x: Int) = x * x var sum = 0 for (n in nums) { sum += n } return sum }
      B. fun processNumbers(nums: List<Int>): Int { var sum = 0 for (n in nums) { fun square(x: Int) = x * x sum += square } return sum }
      C. fun processNumbers(nums: List<Int>): Int { fun square(x: Int) = x * x return nums.map square(it).sum() }
      D. fun processNumbers(nums: List<Int>): Int { fun square(x: Int) = x * x return nums.sumOf { square(it) } }

      Solution

      1. Step 1: Understand local function usage and Kotlin collection functions

        Local function 'square' should be declared once inside 'processNumbers'. Using Kotlin's 'sumOf' is concise and correct.
      2. Step 2: Analyze each option

        fun processNumbers(nums: List<Int>): Int { fun square(x: Int) = x * x return nums.sumOf { square(it) } } correctly declares the local function once and uses it with sumOf { square(it) }.
        fun processNumbers(nums: List<Int>): Int { var sum = 0 for (n in nums) { fun square(x: Int) = x * x sum += square } return sum } declares 'square' inside the loop but calls it without argument square(n), compile error.
        fun processNumbers(nums: List<Int>): Int { fun square(x: Int) = x * x return nums.map square(it).sum() } has syntax error: nums.map square(it).sum() missing lambda braces {}.
        fun processNumbers(nums: List<Int>): Int { fun square(x: Int) = x * x var sum = 0 for (n in nums) { sum += n } return sum } defines 'square' but uses sum += n, computes sum of numbers not squares.
      3. Final Answer:

        fun processNumbers(nums: List<Int>): Int { fun square(x: Int) = x * x return nums.sumOf { square(it) } } -> Option D
      4. Quick Check:

        Local function + sumOf = fun processNumbers(nums: List<Int>): Int { fun square(x: Int) = x * x return nums.sumOf { square(it) } } [OK]
      Hint: Declare local function once; use sumOf for concise sum [OK]
      Common Mistakes:
      • Calling local function without required arguments
      • Syntax error: missing braces in lambda expression
      • Defining local function but forgetting to use it
      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