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

ながみえ

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

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

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

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

<<前のページ

学習記事一覧

次のページ>>

関数とは何か?|定義方法と呼び出し方法

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

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

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

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

関数の概要と定義方法

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

例えば「こんにちは、〇〇さん!」という挨拶文を表示する関数を定義しておけば、その後はこの関数を呼び出すだけで「こんにちは、〇〇さん!」と出力されます。

この仕組みを利用することで同じコードを何度も書く必要がなくなり、コードを短くできるだけでなく、プログラムの見通しが良くなることでエラーを減らすことにも繋がります。

関数を定義するには、funキーワード を用いて以下のように書きます。

fun 関数名(引数: 型) {
    // この関数の処理内容
}

関数の名前は自由に決めることができます。

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

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

fun greet(name: String) {				// String型の引数nameを持つgreet関数を定義
    println("こんにちは、$nameさん!")	// この関数の処理内容。
}

このコードはgreetという名前の関数を定義しています。

この関数に引数name(ユーザーの名前が入った変数)を渡して呼び出すことで、その人へ向けたメッセージが出力されます。

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

また関数を定義する位置は、必ず メイン関数の外 になる点に注意しましょう。

fun 関数1(引数: 型) { // 引数を持つ関数1を定義
    // この関数の処理内容。
}
fun 関数2() {			// 引数を持たない関数2を定義
    // この関数の処理内容。
}
fun main(){ 		 // メイン関数
    // 定義した関数はメイン関数内から呼び出す。
}

引数を持たない関数の呼び出し方法

定義した関数は、メイン関数の中でその関数名を書くだけで呼び出すことができます。

fun greet() {			// 引数を持たない、greetという名前の関数を定義
    println("Hello")	// greet関数の処理内容
}
fun main() {			// メイン関数の定義
    greet()				// greet関数の呼び出し
}

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

Hello

Kotlinのプログラムは、メイン関数内に書かれた部分だけが実行されます。

このコードの場合、メイン関数内からgreet関数を呼び出しているためこの出力となりましたが、もし呼び出しが無ければ、このgreet関数が使われることはありません。

引数を持つ関数の呼び出し方法

以下は複数の引数を持つ関数を定義し、メイン関数から複数回呼び出す例です。

fun message(name: String, age: Int) {						// 2つの引数を持つmessage関数の定義
    println("こんにちは、$name さん。あなたは $age 才ですね。") // printGreeting関数の処理内容
}
fun main() {			  // メイン関数の定義
    message("太郎", 25)	// message関数に2つの引数を渡して呼び出し
    message("花子", 20)	// message関数に2つの引数を渡して呼び出し 
}

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

こんにちは、太郎 さん。あなたは 25 才ですね。
こんにちは、花子 さん。あなたは 20 才ですね。

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

メイン関数とは何か?|Kotlinプログラムのスタート地点

Kotlinのプログラムを実行するとき、最初に呼び出される特別な関数が「メイン関数」です。

メイン関数はプログラムの実行が始まる「入り口」であり、この関数から他の関数を呼び出したり、処理を進めていきます。

メイン関数がなければプログラムは動きません。いわばプログラムの「スタート地点」です。

まとめ|関数を使いこなす第一歩

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

この記事では関数の定義方法や呼び出し方、引数の扱い方について解説しました。

関数はKotlinプログラミングの基本となる重要な要素です。

今回学んだポイントをしっかり身につけて、さまざまな処理を自分で関数として整理・再利用できるようにチャレンジしてみてください。

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 関数を呼び出し、挨拶を表示。
Q
サイト改善アンケート & ご指摘/ご質問

本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などを アンケート 形式でお伺いしています。

また記事の内容に関する ご指摘ご質問 もお待ちしています。

1.このサイトをどのように活用していますか?また、今後どのように活用したいですか?
5.気になっているサービス・商品があれば教えてください。
※ 特定の記事に関する内容の場合は、記事番号(レッスン〇-〇)をご記入願います。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました