【Kotlin】レッスン3-2:デフォルト引数とキーワード引数を使おう

ながみえ

一つ前のページでは関数の基本について学習しました。

今回は デフォルト引数とキーワード引数 について見ていきましょう。

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

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

<<前のページ

学習記事一覧

次のページ>>

デフォルト引数とキーワード引数の意味と使い方

関数を定義する際に「デフォルト引数」と「キーワード引数」を使うことで、コードをよりシンプルで柔軟にすることができます。

この記事ではこれらの機能について、初心者向けにわかりやすく解説します。

デフォルト引数とは何か|省略可能な引数の定義と呼出し

デフォルト引数 とは関数の引数にデフォルト値を設定する仕組みのことです。

デフォルト引数を設定しておくと、その関数を呼び出すときに引数を指定しない場合に、自動的に指定したデフォルト値が使われます。

これにより関数の呼び出しを簡潔にし、コードの重複を減らすことができます。

デフォルト引数は =演算子 を用いて、以下のように設定します。

// String型の引数nameを持つgreet関数を定義
fun greet(name: String = "ゲスト") {	// デフォルト引数として"ゲスト"を定義
    println("こんにちは、$name さん!")
}
fun main(){				// メイン関数
	greetUser()			// 引数を渡さずに関数を呼び出し
	greetUser("太郎")   // 引数「太郎」を渡して関数を呼び出し
}

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

ようこそ、ゲスト さん!
ようこそ、太郎 さん!

このように特定の値を省略できるため、柔軟性が向上します。

キーワード引数とは何か|順序に依存しない引数の定義と呼出し

キーワード引数 とは、関数の呼び出し時に引数名を指定して値を渡す機能です。

引数名を指定することで、コードの可読性が向上し、引数の順番を気にする必要がなくなります。

以下はキーワード引数を使った例です。引数名を明記することで、順序が入れ替わっても正しく渡すことができます。

fun displayUserInfo(name: String, age: Int) { // String型のnameとInt型のageの2つの引数を持つ関数
    println("$name さんは $age 歳です。")
}
fun main(){
	displayUserInfo(name = "太郎", age = 30)	// キーワード引数を用いた呼出し
	displayUserInfo(age = 25, name = "次郎")	// 順序を入れ替えても問題ない
	displayUserInfo("三郎", 20)				// 通常の呼び出し。型が合っている必要あり
	displayUserInfo(15, "四郎")				// 型が合わないため、型不一致エラーとなる
}

このコードを実行すると8行目でエラーとなります。

8行目を消して実行すると、以下のように出力されます。

太郎 さんは 30 歳です。
次郎 さんは 25 歳です。
三郎 さんは 20 歳です。

このように関数の呼び出し時に引数だけでなく引数の名前まで記入することで可読性が向上します。

デフォルト引数×キーワード引数の活用術|柔軟な関数の書き方

デフォルト引数とキーワード引数は同時に使うことができます。

この組み合わせによりより柔軟な関数呼び出しが可能になります。

fun introduce(name: String = "匿名", age: Int = 0) {	// デフォルト引数とキーワード引数をもつ関数
    println("こんにちは、$name さん!年齢は $age 歳です。")
}

fun main(){
	introduce()                              // 両方の引数が省略される
	introduce(name = "健太")                 // デフォルト値を部分的に利用
	introduce(age = 40, name = "陽子")       // キーワード引数で順序を変更
}

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

こんにちは、匿名 さん!年齢は 0 歳です。
こんにちは、健太 さん!年齢は 0 歳です。
こんにちは、陽子 さん!年齢は 40 歳です。

まとめ|引数を自由自在に使いこなそう!

デフォルト引数とキーワード引数を活用することで、関数呼び出しがより柔軟になり、コードの可読性やメンテナンス性が大きく向上します。

デフォルト引数は、必要に応じて値を省略できる便利な仕組みです。

一方、キーワード引数を使えば、引数の順番を気にせずに関数を呼び出せるため、ミスを減らし意図を明確に伝えることができます。

この2つの機能をうまく使い分けて、より快適で安全なKotlinプログラミングを目指しましょう。

練習問題|デフォルト引数とキーワード引数を使った関数を作ろう

名前と年齢を使った挨拶メッセージを作成するプログラムを作成しましょう。

このプログラムでは、デフォルト引数とキーワード引数の使い方を学びます。

名前を省略しても動作するようにしつつ、引数の順番を自由に指定できる柔軟な関数呼び出しを試してみましょう。

この問題の要件

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

  1. 関数greetを定義:
    • 引数nameはデフォルト値として”ゲスト”を持つString型とすること。
    • 引数ageInt型とすること。
    • 関数内で以下のメッセージを表示すること: こんにちは、[name] さん!あなたは [age] 歳ですね。
  2. メイン関数を実装:
    • デフォルト引数を利用してnameを省略し、age = 25としてgreet関数を呼び出すこと。
    • キーワード引数を利用してnameを”太郎”、age = 30としてgreet関数を呼び出すこと。
  3. 出力結果を日本語で表示すること:
    • プログラムを実行した際、挨拶文が日本語で表示されること。

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

【例1】デフォルト引数の使用
こんにちは、ゲスト さん!あなたは 25 歳ですね。
【例2】キーワード引数の使用
こんにちは、太郎 さん!あなたは 30 歳ですね。

この問題を解くヒント

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

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

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

1:関数greetの定義
  □ 引数nameをデフォルト値”ゲスト”で宣言
  □ 引数ageを宣言
  □ printlnで文字列を埋め込み、挨拶メッセージを出力
2:main関数の定義
  □ printlnで「【例1】デフォルト引数の使用」を出力
  □ 関数greetをキーワード引数を使用して呼び出し
  □ printlnで「【例2】キーワード引数の使用」を出力
  □ 関数greetをキーワード引数を使用して呼び出し

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

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

// 挨拶メッセージを生成する関数
fun greet(name: String = "ゲスト", age: Int) {
    /*【穴埋め問題1】
    ここにprintln関数を使って挨拶メッセージを出力するコードを書いてください。
    文字列埋め込みを用いて、$name と $age を利用してください。
    */
}

fun main() {
    println("【例1】デフォルト引数の使用")
    /*【穴埋め問題2】
    ここにgreet関数をデフォルト引数を利用して呼び出すコードを書いてください。
    */
    
    println("【例2】キーワード引数の使用")
    /*【穴埋め問題3】
    ここにgreet関数をキーワード引数を利用して呼び出すコードを書いてください。
    引数として age=30 と name="太郎" を指定してください。
    */
}

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

この問題の解答と解説

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

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

Q
正解コード
// 挨拶メッセージを生成する関数
fun greet(name: String = "ゲスト", age: Int) {
    println("こんにちは、$name さん!あなたは $age 歳ですね。")
}

fun main() {
    println("【例1】デフォルト引数の使用")
    greet(age = 25) // 名前は "ゲスト" として処理される

    println("【例2】キーワード引数の使用")
    greet(age = 30, name = "太郎") // 引数名を指定することで順番が自由になる
}
Q
正解コードの解説

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

挨拶メッセージを生成する関数の定義

fun greet(name: String = "ゲスト", age: Int) {
    println("こんにちは、$name さん!あなたは $age 歳ですね。")
}
  1. fun greet: Kotlinで関数を定義する際に使用するキーワードです。この関数は名前nameと年齢ageを受け取り、それを使って挨拶メッセージを生成します。
  2. デフォルト引数:
    • name: String = "ゲスト"のように引数にデフォルト値を設定すると、関数を呼び出す際にその引数を省略することができます。
    • 例: greet(age = 25)とすると、nameは自動的に”ゲスト”が設定されます。
  3. 文字列テンプレート:
    • printlnの中の$name$ageは、Kotlinの文字列テンプレート機能を使っています。この機能により、変数の値を直接文字列の中に埋め込むことができます。

メイン関数

fun main() {
    greet(age = 25)
    greet(name = "太郎", age = 30)
}
  1. fun main: Kotlinプログラムのエントリーポイント(実行開始地点)です。この中でgreet関数を呼び出しています。
  2. キーワード引数:
    • 関数を呼び出す際に、greet(name = "太郎", age = 30)のように引数名を指定することで、引数の順番を自由に変更できます。
    • このコードでは2回目のgreet呼び出しでキーワード引数を使い、nameを”太郎”、ageを30と指定しています。
Q
サイト改善アンケート & ご指摘/ご質問

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

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

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

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました