5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

早期リターンのメリット

Posted at

早期リターンのメリットについて、Kotlinのコードから理解する

パフォーマンスの向上

与えられたリストからターゲットの要素を探し、最初に見つかった要素のインデックスを返す関数

早期リターンを使用した場合
fun findElementIndex(elements: List<Int>, target: Int): Int {
    for (index in elements.indices) {
        if (elements[index] == target) {
            return index
        }
    }
    return -1
}

ターゲットの要素が見つかった際に、即座にインデックスを返して関数を終了している

早期リターンを使用しない場合
fun findElementIndex(elements: List<Int>, target: Int): Int {
    var result = -1
    for (index in elements.indices) {
        if (elements[index] == target) {
            result = index
        }
    }
    return result
}

ターゲットの要素が見つかっても、全要素の探索を終えるまで処理は終わらない

コードの可読性の向上

価格の計算を行う関数

早期リターンを使用した場合
fun calculatePrice(quantity: Int, pricePerItem: Double): Double? {
    if (quantity < 0 || pricePerItem < 0) {
        return null
    }
    val totalPrice = quantity * pricePerItem
    return totalPrice
}

quantitypricePerItemが負の場合、即座にnullを返して関数を終了している

早期リターンを使用しない場合
fun calculatePrice(quantity: Int, pricePerItem: Double): Double? {
    var totalPrice: Double? = null
    if (quantity >= 0 && pricePerItem >= 0) {
        totalPrice = quantity * pricePerItem
    }
    return totalPrice
}

条件が満たされない場合でも後続の処理が行われてしまう

バグの削減

引数aを引数bで割った結果を返す関数

早期リターンを使用した場合
fun divide(a: Int, b: Int): Double? {
    if (b == 0) {
        return null
    }
    val result = a.toDouble() / b.toDouble()
    return result
}

ゼロで割り算をしようとした場合、nullを返してゼロ除算によるバグを防いでいる

早期リターンを使用しない場合
fun divide(a: Int, b: Int): Double? {
    val result = a.toDouble() / b.toDouble()
    if (result == 0.0) {
        return null
    }
    return result
}

意図せずゼロ除算が行われる可能性があるため、バグ発生の恐れがある

プログラムの構造化

与えられた数値が偶数であるか判断する関数

早期リターンを使用した場合
fun isEven(number: Int): Boolean {
    if (number % 2 != 0) {
        return false
    }
    return true
}

数値が奇数の場合に即座にfalseを返すことで、判定ロジックが明確化されプログラムの構造がシンプルになる

早期リターンを使用しない場合
fun isEven(number: Int): Boolean {
    var isEven = true
    if (number % 2 != 0) {
        isEven = false
    }
    return isEven
}

不要な変数の使用や条件判定後の冗長な代入処理を行うことで、単純な処理を複雑にしている

エラーハンドリングの簡素化

与えられた文字列が一定の条件を満たしているか検証する関数

早期リターンを使用した場合
fun validateInput(input: String): Boolean {
    if (input.isEmpty()) {
        return false
    }
    if (input.length > 10) {
        return false
    }
    return true
}

エラーハンドリングのロジックが簡素化され、不正な入力の検出や処理が容易になる

早期リターンを使用しない場合
fun validateInput(input: String): Boolean {
    var isValid = true
    if (input.isEmpty()) {
        isValid = false
    }
    if (input.length > 10) {
        isValid = false
    }
    return isValid
}

不要な変数の使用や条件判定後の冗長な代入処理が発生している

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?