Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Kotlin辞典

  1. トップページ
  2. Kotlin辞典
  3. require() / check() / error()

require() / check() / error()

Kotlinの『require()』『check()』『error()』は前提条件や状態を検証するための標準関数です。条件が満たされない場合に例外を投げ、コードの意図を明確に表現できます。

構文
// 引数の前提条件チェック(IllegalArgumentException)
require(条件) { "エラーメッセージ" }
requireNotNull(値) { "値が null のときのメッセージ" }

// 状態の前提条件チェック(IllegalStateException)
check(条件) { "エラーメッセージ" }
checkNotNull(値) { "値が null のときのメッセージ" }

// 常に例外を投げる(IllegalStateException)
error("エラーメッセージ")
関数一覧
関数投げる例外概要
require(cond) { msg }IllegalArgumentException引数の検証。条件が false なら例外を投げます。
requireNotNull(v) { msg }IllegalArgumentException引数が null なら例外を投げます。non-null 型を返します。
check(cond) { msg }IllegalStateException状態の検証。条件が false なら例外を投げます。
checkNotNull(v) { msg }IllegalStateException状態が null なら例外を投げます。non-null 型を返します。
error(msg)IllegalStateException常に例外を投げます。到達不能なコードパスに使います。
サンプルコード
class BankAccount(initialBalance: Double) {
    private var balance: Double = initialBalance
    private var isOpen: Boolean = true

    init {
        // コンストラクタ引数の検証
        require(initialBalance >= 0) { "初期残高は0以上が必要です(入力: $initialBalance)" }
    }

    fun deposit(amount: Double) {
        require(amount > 0) { "入金額は0より大きい必要があります" }
        check(isOpen) { "口座がすでに閉鎖されています" }
        balance += amount
        println("入金: $amount → 残高: $balance")
    }

    fun close() {
        isOpen = false
    }
}

fun processInput(input: String?) {
    // requireNotNull で non-null の値を取得します。
    val value = requireNotNull(input) { "入力は null にできません" }
    println("処理: $value")  // value は String(non-null)
}

fun getDayName(day: Int): String = when (day) {
    1 -> "月曜"
    2 -> "火曜"
    // ...
    else -> error("無効な曜日: $day")  // 到達すべきでないパス
}

fun main() {
    val account = BankAccount(1000.0)
    account.deposit(500.0)   // 入金: 500.0 → 残高: 1500.0

    try {
        account.deposit(-100.0)  // IllegalArgumentException
    } catch (e: IllegalArgumentException) {
        println("引数エラー: ${e.message}")
    }

    account.close()
    try {
        account.deposit(100.0)   // IllegalStateException
    } catch (e: IllegalStateException) {
        println("状態エラー: ${e.message}")
    }

    processInput("Hello")  // 処理: Hello

    println(getDayName(1))  // 月曜
    try {
        println(getDayName(8))  // IllegalStateException
    } catch (e: IllegalStateException) {
        println("エラー: ${e.message}")
    }
}
概要

『require()』は引数の検証(関数の入口で使う)、『check()』は状態の検証(オブジェクトの状態が正しいか確認する)という使い分けが一般的です。

メッセージをラムダで遅延評価するため、条件が true の場合は文字列が生成されず効率的です。

try-catch による例外処理はtry / catch / finallyを参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。