Functions give a name to reusable logic. Parameters bring values in, and return sends one value back.

Return a value

score
functions.swift
Replay: real traced execution (multi-file project)
func addBonus(score: Int, bonus: Int) -> Int {
    return score + bonus
}

let score = 30
let bonus = 5
let finalScore = addBonus(score: score, bonus: bonus)
print("final=\(finalScore)")
func addBonus(score: Int, bonus: Int) -> Int {
    return score + bonus
}

let score = 18
let bonus = 5
let finalScore = addBonus(score: score, bonus: bonus)
print("final=\(finalScore)")
func addBonus(score: Int, bonus: Int) -> Int {
    return score + bonus
}

let score = 42
let bonus = 5
let finalScore = addBonus(score: score, bonus: bonus)
print("final=\(finalScore)")
  1. score ← 30, bonus ← 5

    5let score→ 30 = 30  //@score=18, 426let bonus→ 5 = 57let finalScore = addBonus(score: score30, bonus: bonus5)8print("final=\(finalScore)")
  2. func addBonus(score: Int, bonus: Int) -> Int

    1func addBonus(score30: Int, bonus5: Int) -> Int {2    return score30 + bonus53}
  3. finalScore ← 35

    6let bonus = 57let finalScore→ 35 = addBonus(score: score30, bonus: bonus5)8print("final=\(finalScore35)")
    outputfinal=35
  1. score ← 18, bonus ← 5

    5let score→ 18 = 186let bonus→ 5 = 57let finalScore = addBonus(score: score18, bonus: bonus5)8print("final=\(finalScore)")
  2. func addBonus(score: Int, bonus: Int) -> Int

    1func addBonus(score18: Int, bonus5: Int) -> Int {2    return score18 + bonus53}
  3. finalScore ← 23

    6let bonus = 57let finalScore→ 23 = addBonus(score: score18, bonus: bonus5)8print("final=\(finalScore23)")
    outputfinal=23
  1. score ← 42, bonus ← 5

    5let score→ 42 = 426let bonus→ 5 = 57let finalScore = addBonus(score: score42, bonus: bonus5)8print("final=\(finalScore)")
  2. func addBonus(score: Int, bonus: Int) -> Int

    1func addBonus(score42: Int, bonus5: Int) -> Int {2    return score42 + bonus53}
  3. finalScore ← 47

    6let bonus = 57let finalScore→ 47 = addBonus(score: score42, bonus: bonus5)8print("final=\(finalScore47)")
    outputfinal=47

Follow the Function Call

  1. score starts at 30.
  2. bonus starts at 5.
  3. addBonus(score: score, bonus: bonus) sends both values into the function.
  4. The function returns 30 + 5.
  5. finalScore becomes 35, and the program prints final=35. | score | bonus | finalScore | | --- | --- | --- | | 18 | 5 | 23 | | 30 | 5 | 35 | | 42 | 5 | 47 |
return `return` ends the function call and provides its result.

Exercise: functions.swift

Reproduce final=35, then try score 18 and 42 and predict each final score before running it.