【Kotlin】レッスン2-02:if文による分岐処理を理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:比較演算子と論理演算子

この記事の練習問題を解くために必要な知識:
比較演算子と論理演算子if文による分岐処理when文による分岐処理スマートキャストfor文による繰り返し処理while文による繰り返し処理繰り返しの制御エラーメッセージ例外処理

<<前のページ Kotlin記事一覧 次のページ>>

Kotlinの「if文による分岐処理」とは

ここではif文による分岐処理の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



Kotlinではプログラムの流れを柔軟に制御するために、条件分岐が重要な役割を果たします。

その中で最も基本的な構造がif文です。

if文を使うことで、条件に応じた処理を簡潔に記述することができます。

if文とは?

if文は条件が成立した場合に特定の処理を実行するための構造です。

たとえば「値が一定の範囲内であれば処理を実行する」といった場面で活用されます。

プログラムが書かれた順に実行される中で、if文を使うと実行の流れを動的に変更できます。

条件分岐を活用することで、より複雑なロジックを簡潔に表現することが可能です。

if文の基本構文

Kotlinにおけるif文の基本構文は以下のようになります。

if (条件) {
    // 条件が真(true)の場合に実行される処理
}

例えば、aの値が正の数のときだけメッセージを表示するプログラムは以下のようになります。

val a = 10
if (a > 0) {
    println("aは正の数です。")
}

aの値が負の数だった場合はif文の条件は成立しないため、if文の中の処理は実行されません。

さらに、条件が成立しなかった場合の処理を指定するにはelseを使います。

if (条件) {
    // 条件が真の場合の処理
} else {
    // 条件が偽(false)の場合の処理
}

また複数の条件をチェックする場合には、else ifを組み合わせることができます。

if (条件1) {
    // 条件1が真の場合の処理
} else if (条件2) {
    // 条件2が真の場合の処理
} else {
    // いずれの条件も満たさない場合の処理
}

if文の使用例

if文を使用した例を2つ紹介します。

シンプルな例

次のコードは数値を比較してメッセージを出力する例です。

val number = 10

if (number > 0) {
    println("numberは正の数です")
} else {
    println("numberは0または負の数です")
}

このコードではnumberが0より大きい場合に「numberは正の数です」を出力し、それ以外の場合には「numberは0または負の数です」を出力します。

実践的な例

次のコードはユーザーが入力した値をチェックし、それに応じたメッセージを出力する例です。

val score = 85

if (score >= 90) {
    println("素晴らしい成績です!")
} else if (score >= 60) {
    println("合格です")
} else {
    println("もっと頑張りましょう")
}

この例ではスコアが90以上の場合に褒め言葉を出し、60以上の場合は合格、そうでない場合は励ましのメッセージを出力します。

値を返すif文

Kotlinではif文は値を返すことができるため、式として利用することもできます。

    val message = if (number == null) {
        "値はnullです"
    }
    println(message) //出力:値はnullです

このコードではnumberがnullの時に、定数messageに文字列”値はnullです”を格納します。

このように値を返すif文を活用することで、コードを簡潔に記述できるだけでなく、柔軟な条件分岐を実現することが可能です。

ネストされたif文

さらに複雑な条件が必要な場合、if文をネストする(if文の中にif文を入れる)こともできます。

val num = -5

if (num > 0) {
    if (num % 2 == 0) {
        println("正の偶数です")
    } else {
        println("正の奇数です")
    }
} else {
    println("負の数またはゼロです")
}

ネストを使うことで、複数の条件を効率的に組み合わせて処理を行えます。

まとめ

if文は条件に応じてプログラムの動作を柔軟に制御するための基本的な構文です。

Kotlinではif文を使ってシンプルな条件分岐から複雑なロジックまで表現することができます。

初心者の方はまず基本構文をマスターし、例を参考にしてさまざまな条件分岐を練習しましょう!

if文による分岐処理の練習問題: 数値の種類を判別するプログラムを作成しよう

if文を使用して入力された数値が正の数、ゼロ、または負の数であるかを判別するプログラムを作成してください。

数値以外の入力に対しても適切なエラーメッセージを表示します。

この問題を通して条件分岐の基本構造を学びましょう。

この問題の要件

以下の要件に従ったプログラムを作成してください。

  1. メイン関数内で以下を実行すること。
    • ユーザーに「数値を入力してください」と表示し、入力を受け取ること。
  2. 入力を文字列として取得し、数値に変換する際にNull安全性を考慮すること。
    • 入力が無効な場合「無効な入力です。数値を入力してください」と表示すること。
  3. 入力された数値に対し以下を判別すること。
    • 正の数の場合、「入力された数値は正の数です」と表示すること。
    • ゼロの場合、「入力された数値はゼロです」と表示すること。
    • 負の数の場合、「入力された数値は負の数です」と表示すること。
  4. Kotlinのif文の構文を使うこと。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

数値を入力してください:
5
入力された数値は正の数です。
数値を入力してください:
-3
入力された数値は負の数です。
数値を入力してください:
0
入力された数値はゼロです。
数値を入力してください:
abc
無効な入力です。数値を入力してください。

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1:main関数の定義
  □ 「数値を入力してください:」と出力
  □ readLine関数でユーザーからの入力を文字列として取得し、input変数に代入
  □ toIntOrNull関数でinputを数値に変換し、number変数に代入
  □ if文にてnumberがnullかを判定
  □ □ 真の場合、「無効な入力です。数値を入力してください。」と出力
  □ else文
  □ □ if文にてnumberが0より大きいか判定
  □ □ □ 真の場合、「入力された数値は正の数です。」と出力
  □ □ else if文にてnumberが0かを判定
  □ □ □ 真の場合、「入力された数値はゼロです。」と出力
  □ □ else文
  □ □ □ 「入力された数値は負の数です。」と出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

fun main() {
    // ユーザーに数値を入力してもらう
    println("数値を入力してください:")
    val input = readLine() // 入力を文字列として受け取る

    // 入力を数値に変換する(Null安全性を考慮)
    val number = input?.toIntOrNull()

    // 入力が数値でない場合のエラーメッセージ
    if (number == null) {
        println("無効な入力です。数値を入力してください。")
    } else {
        /*【穴埋め問題1】
        ここで入力された値が0より大きいか、ゼロか、負の数かを判定し、それぞれに応じたメッセージを表示するif文を書いてください。
        */
    }
}

この問題の穴埋めコードは以上です。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

練習問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

fun main() {
    // ユーザーに数値を入力してもらう
    println("数値を入力してください:")
    val input = readLine() // 入力を文字列として受け取る

    // 入力を数値に変換する(Null安全性を考慮)
    val number = input?.toIntOrNull()

    // 入力が数値でない場合のエラーメッセージ
    if (number == null) {
        println("無効な入力です。数値を入力してください。")
    } else {
        // 条件分岐で入力値を評価
        if (number > 0) {
            println("入力された数値は正の数です。")
        } else if (number == 0) {
            println("入力された数値はゼロです。")
        } else {
            println("入力された数値は負の数です。")
        }
    }
}

正解コードの解説

今回のコードではif文による分岐処理を使用して、入力された数値が「正の数」「ゼロ」「負の数」であるかを判別するプログラムを作成しています。

このコードをブロックごとに分解し、それぞれの内容を解説します。

メイン関数の開始

fun main() {
    println("数値を入力してください:")
    val input = readLine()
  • fun main(): Kotlinプログラムのエントリーポイントです。ここからコードが実行されます。
  • println("数値を入力してください:"): コンソールにメッセージを表示します。ユーザーに入力を促す文です。
  • val input = readLine(): ユーザーの入力を文字列として受け取ります。この値は後の処理で使用されます。

Null安全性を考慮した数値の変換

    val number = input?.toIntOrNull()

input?.toIntOrNull(): 入力された文字列を数値に変換します。もし文字列が数値に変換できない場合(例えば、abcのような入力)はnullを返します。

これによりプログラムの安全性を向上させます。

 if文を使ったエラーチェック

    if (number == null) {
        println("無効な入力です。数値を入力してください。")
    } else {
  • if (number == null): 変数numbernullである場合に実行される処理です。これは無効な入力を判別するためのコードです。
  • println("無効な入力です。数値を入力してください。"): 無効な入力であることをユーザーに通知します。

if文による条件分岐

        if (number > 0) {
            println("入力された数値は正の数です。")
        } else if (number == 0) {
            println("入力された数値はゼロです。")
        } else {
            println("入力された数値は負の数です。")
        }
  • if (number > 0): 入力された数値が正の数である場合にこの条件が成立します。
  • println("入力された数値は正の数です。"): 条件が成立した場合に出力されるメッセージです。
  • else if (number == 0): 入力された数値がゼロの場合に成立する条件です。
  • println("入力された数値はゼロです。"): 条件が成立した場合にゼロであることを通知します。
  • else: 上記の条件に該当しない場合(負の数)の処理です。
  • println("入力された数値は負の数です。"): 負の数であることを通知します。

まとめ

このプログラムではKotlinにおけるif文による分岐処理を活用し、ユーザー入力に基づく動的な判定を実現しています。

特に注目すべきポイントは、以下の2つです。

  1. Null安全性の考慮: 入力値を直接数値に変換せず、toIntOrNullを用いることでエラーを防止しています。
  2. 条件分岐の柔軟性ifelse ifelseを使用して異なる条件に応じた処理を簡潔に記述しています。

このコードを通じてKotlinの基本的な制御構文であるif文を実践的に学ぶことができます。

ぜひ異なる条件や入力パターンでコードを試してみてください!

<<前のページ Kotlin記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Kotlinテキスト&問題集へ戻る
    トップページへ戻る