MENU

【Kotlin】レッスン3-01:関数の定義と使い方を基礎から学ぼう

tggaa478@yahoo.co.jp

一つ前の章ではKotlinの制御構造について学習しました。

今回からは 関数 について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数編

 ・Lesson3-1:関数の基本を理解しよう ◁今回はココ
 ・Lesson3-2:デフォルト引数とキーワード引数を理解しよう
 ・Lesson3-3:関数の戻り値を理解しよう
 ・Lesson3-4:真偽値を返す関数を理解しよう
 ・Lesson3-5:関数のオーバーロードを理解しよう
 ・Lesson3-6:ジェネリクスの基礎を理解しよう
 ・確認問題3-☆1:ブラックジャックゲームを作ろう
 ・確認問題3-☆2:丁半賭博ゲームを作ろう
 ・確認問題3-☆3:モンスターとのバトルゲームを作ろう
Lesson4:コレクション編
Lesson5:オブジェクト指向編

<<前のページ

学習記事一覧

次のページ>>

Kotlinにおける関数の定義と呼び出しの基礎を解説

プログラムを効率的に書くための基本要素のひとつに「関数」があります。

関数は活用することで同じ処理を繰り返し書く必要がなくなり、コードの保守性や可読性を向上させるものです。

このセクションではこの関数の定義方法と呼び出し方を学びます。

また、ここまで詳細の説明をしていなかった「メイン関数」についてもここで解説します。

関数の役割とメリットを理解しよう

関数とはプログラム内で繰り返し利用する処理をひとまとめにしたものです。

これによりコードを短くし、同じ処理を複数箇所で簡単に再利用できます。

また関数を使うことで、プログラムの見通しが良くなり、エラーを減らすことができます。

Kotlinの実行起点「main関数」の特徴とは

Kotlinプログラムは必ず「メイン関数」から始まります。

メイン関数はプログラムのエントリーポイントであり、実行時に最初に呼び出される特別な関数です。

Kotlinにおけるメイン関数は以下のように定義されます。

fun main() {
    // プログラムの開始地点
}

メイン関数の中に記述したコードは、プログラムの実行時に順番に処理されます。

関数定義の構文と引数の使い方

メイン関数の外に別の関数を定義することができます。

これによりプログラム全体を整理しやすくなり、コードの再利用も簡単になります。

以下が関数の基本構造です。

fun 関数名(引数1: 型, 引数2: 型, ...) {
    // 処理内容
}

関数は「引数」を通じて外部から値を受け取ることができます。

引数とは関数に渡されるデータであり、関数内で処理する情報を外部から提供する役割を果たします。

以下は、画面にメッセージを表示する関数を定義する例です。

fun printMessage(message: String) { // String型の引数messageを持つprintMessage関数を定義
    println(message) // この関数の処理内容。messageを出力
}

この関数を使用する際は、メイン関数内から呼び出します。

またメイン関数以外の関数の名前は自由に決めることができます。その関数の処理内容を考慮し、分かりやすい名前を付けましょう。

定義した関数を呼び出す方法と書き方

以下は、定義した関数をメイン関数内で呼び出す例です。

fun printMessage(message: String) { // printMessageという名前の関数を定義
    println(message) // printMessage関数の処理内容
}

fun main() { // メイン関数
    printMessage("Hello") // printMessage関数に引数"Hello"を渡して呼び出し
}

このコードを実行すると以下のように出力されます。

Hello

このプログラムではprintMessage 関数がメイン関数の外に定義されており、メイン関数から呼び出されています。

Kotlinでは関数をメイン関数の外に書くことで、複数の関数を整理しやすくなります。

複数回呼び出せる関数でコードを効率化

以下は複数のメッセージを表示する関数を定義し、メイン関数で呼び出す例です。

fun printGreeting(name: String) { // printGreeting関数の定義
    println("Hello, $name!")      // printGreeting関数の処理内容
}

fun main() {               // メイン関数の定義
    printGreeting("Alice") // printGreeting関数に引数Aliceを渡して呼び出し
    printGreeting("Bob")   // printGreeting関数に引数Bobを渡して呼び出し 
}

このプログラムの出力は以下の通りです。

Hello, Alice!
Hello, Bob!

ここではprintGreeting 関数に異なる引数を渡して呼び出しています。

一つずつコードを書くよりも、このように関数としてまとめることで完結かつ分かりやすいコードになることが分かると思います。

なお、以下のように引数がない関数を定義することも可能です。

fun greet() { // greet関数の定義
    println("Hello, World!") // greet関数の処理内容
}

fun main(){ // メイン関数の定義
    greet() // greet関数の呼び出し
    greet() // greet関数の呼び出し
    greet() // greet関数の呼び出し
}

このコードを実行すると、以下のように出力されます。

Hello, World!
Hello, World!
Hello, World!

学んだ関数の基本を振り返ろう

この図はこれからこの「第3章 関数編」で学習していく内容を視覚的に分かりやすくまとめたものです。本記事の内容は一番上の関数1に該当します。

関数はプログラムを整理し、効率的にするための重要な要素です。

そしてKotlinプログラムの実行が始まるエントリーポイントである「メイン関数」を理解することも重要です。

別の関数はメイン関数の外に定義し、必要に応じてメイン関数から呼び出すことで、プログラムを整理しやすくなります。

このセクションで学んだ知識を活かして、簡潔でメンテナンスしやすいコードを書きましょう。

関数の定義と呼び出しの練習問題

メッセージを繰り返し表示し、ユーザーの名前を使って挨拶文を作成するプログラムを作成しましょう。

このプログラムでは2つの関数を用意します。

1つ目の関数はメッセージを指定した回数だけ表示し、2つ目の関数はユーザーの名前を受け取って挨拶文を出力します。

これらを組み合わせてプログラムを完成させましょう。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. メイン関数内で以下を行う:
    • ユーザーに「メッセージを何回表示しますか?」と尋ね、入力された回数を取得する。
    • ユーザーに「あなたの名前を入力してください:」と尋ね、名前を取得する。
  2. 以下の関数を定義し、それぞれ呼び出すこと:
    • printMessage(times: Int)
      • 引数 times を受け取り、指定された回数だけ「こんにちは、Kotlinの世界へ!」というメッセージを表示する関数。
    • greetUser(name: String)
      • 引数 name を受け取り、名前を埋め込んだ「こんにちは、<名前> さん!」という挨拶文を出力する関数。

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

メッセージを何回表示しますか?
3
こんにちは、Kotlinの世界へ!
こんにちは、Kotlinの世界へ!
こんにちは、Kotlinの世界へ!

あなたの名前を入力してください:
太郎
こんにちは、太郎 さん!

この問題を解くヒント

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

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

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:関数printMessageの定義
  □ forループを1からtimesまで繰り返す
  □ □ 文字列「こんにちは、Kotlinの世界へ!」を出力
2:関数greetUserの定義
  □ 文字列「こんにちは、$name さん!」を出力
3:main関数の定義
  □ 標準出力に「メッセージを何回表示しますか?」を出力
  □ 変数inputTimesに標準入力の値を整数に変換して代入、失敗時は0を代入
  □ 関数printMessageを呼び出して、指定回数分メッセージを表示
  □ 標準出力に「あなたの名前を入力してください:」を出力
  □ 変数userNameに標準入力の値を代入、入力が空の場合は「ゲスト」を代入
  □ 関数greetUserを呼び出して挨拶を表示

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

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

// メッセージを繰り返し表示する関数
fun printMessage(times: Int) {
    /*【穴埋め問題1】
    ここに1からtimesまで繰り返し、メッセージを出力するコードを書いてください。
    */
}

// ユーザーの入力に基づいて挨拶を表示する関数
fun greetUser(name: String) {
    /*【穴埋め問題2】
    ここで「こんにちは、$name さん!」と出力するコードを書いてください。
    */
}

fun main() {
    // 標準入力を使ってメッセージを表示する回数を取得
    println("メッセージを何回表示しますか?")
    /*【穴埋め問題3】
    ここでユーザーから入力を受け取り、整数に変換して変数inputTimesに代入するコードを書いてください。
    */

    // 関数 printMessage を呼び出して、指定回数分メッセージを表示
    /*【穴埋め問題4】
    ここでprintMessage関数を呼び出してメッセージを出力してください。
    */

    // 標準入力を使って名前を取得
    println("あなたの名前を入力してください:")
    /*【穴埋め問題5】
    ここでユーザーから名前を取得して変数userNameに代入するコードを書いてください。入力が空の場合は「ゲスト」を代入してください。
    */

    // 関数 greetUser を呼び出して、挨拶を表示
    /*【穴埋め問題6】
    ここでgreetUser関数を呼び出して挨拶を表示してください。
    */
}

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

練習問題の解答と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
// メッセージを繰り返し表示する関数
fun printMessage(times: Int) {
    for (i in 1..times) { // 繰り返し処理を行う
        println("こんにちは、Kotlinの世界へ!") // メッセージを出力
    }
}

// ユーザーの入力に基づいて挨拶を表示する関数
fun greetUser(name: String) {
    println("こんにちは、$name さん!") // 名前を埋め込んで挨拶文を表示
}

fun main() {
    // 標準入力を使ってメッセージを表示する回数を取得
    println("メッセージを何回表示しますか?")
    val inputTimes = readLine()?.toIntOrNull() ?: 0 // 入力を整数に変換し、失敗時は0にする

    // 関数 printMessage を呼び出して、指定回数分メッセージを表示
    printMessage(inputTimes)

    // 標準入力を使って名前を取得
    println("あなたの名前を入力してください:")
    val userName = readLine() ?: "ゲスト" // 入力が空の場合は「ゲスト」にする

    // 関数 greetUser を呼び出して、挨拶を表示
    greetUser(userName)
}
Q
正解コードの解説

コードをブロックごとに分割して解説します。

関数の定義: printMessage

// メッセージを繰り返し表示する関数
fun printMessage(times: Int) {
    for (i in 1..times) { // 繰り返し処理を行う
        println("こんにちは、Kotlinの世界へ!") // メッセージを出力
    }
}
  1. 関数の定義
    • fun printMessage(times: Int) では関数 printMessage を定義しています。この関数は整数型の引数 times を受け取り、指定された回数だけメッセージを表示します。
    • fun キーワードを使って関数を定義し、関数名の後に括弧 () を使って引数を宣言します。
  2. forループの使用
    • for (i in 1..times) は、指定された範囲 (1 から times まで) を繰り返し処理するための構文です。

関数の定義: greetUser

// ユーザーの入力に基づいて挨拶を表示する関数
fun greetUser(name: String) {
    println("こんにちは、$name さん!") // 名前を埋め込んで挨拶文を表示
}
  1. 関数の定義
    • この関数は name という文字列型の引数を受け取り、その値を使用して挨拶文を作成します。
  2. 文字列テンプレート
    • println("こんにちは、$name さん!")$name は文字列テンプレートと呼ばれ、変数 name の値を文字列に埋め込むことができます。

メイン関数: エントリーポイント

fun main() {
    // 標準入力を使ってメッセージを表示する回数を取得
    println("メッセージを何回表示しますか?")
    val inputTimes = readLine()?.toIntOrNull() ?: 0 // 入力を整数に変換し、失敗時は0にする

    // 関数 printMessage を呼び出して、指定回数分メッセージを表示
    printMessage(inputTimes)

    // 標準入力を使って名前を取得
    println("あなたの名前を入力してください:")
    val userName = readLine() ?: "ゲスト" // 入力が空の場合は「ゲスト」にする

    // 関数 greetUser を呼び出して、挨拶を表示
    greetUser(userName)
}
  1. メイン関数
    • fun main() はKotlinプログラムのエントリーポイントです。すべての処理はこの関数から開始されます。
  2. ユーザー入力と型変換
    • readLine() を使ってユーザーの入力を取得し、toIntOrNull() を使って整数に変換します。
    • ?: 演算子はエルビス演算子と呼ばれ、入力が無効な場合にデフォルト値 (0 または "ゲスト") を設定します。
  3. 関数の呼び出し
    • printMessage(inputTimes) ではprintMessage 関数を呼び出し、入力された回数分のメッセージを表示します。
    • greetUser(userName) ではgreetUser 関数を呼び出し、挨拶文を出力します。

全体の流れ

  1. ユーザーにメッセージを何回表示するか尋ね、その回数を取得。
  2. 取得した回数に基づいて、printMessage 関数を呼び出し、メッセージを繰り返し表示。
  3. ユーザーに名前を尋ね、その名前を使って挨拶文を作成。
  4. greetUser 関数を呼び出し、挨拶を表示。

まとめ

このコードでは「関数の定義と呼び出し」を学ぶ基礎を実践的に体験できます。

特に以下の点に注目してください:

  • 関数の再利用性がプログラムの効率を高めること。
  • ユーザー入力や文字列テンプレートを使って、インタラクティブなプログラムを作成する方法。

初心者の皆さんもこのコードをベースにさらなる応用に挑戦してください!

もっと分かりやすいサイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいKotlin学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました