早期リターンのメリットについて、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
}
quantity
かpricePerItem
が負の場合、即座に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
}
不要な変数の使用や条件判定後の冗長な代入処理が発生している