Kotlin入門(4)「関数の基礎をマスターしよう!定義・戻り値・デフォルト引数」

スポンサーリンク
Kotlin

前回の振り返り

前回(Day03)では、以下のことを学んだ。

  • for文による範囲の繰り返し
  • while文による条件付き繰り返し
  • FizzBuzzによる実践

今回は、処理をひとまとまりにして再利用できる「関数」について学んでいく。関数を使いこなせるようになると、コードの重複が減り、読みやすさもぐっと上がる。

今回学ぶこと

  • 関数の定義と呼び出し
  • パラメータと戻り値
  • 単一式関数
  • デフォルト引数・名前付き引数

関数を定義してみよう

Kotlinの関数はfunキーワードで定義する。

fun greet(name: String) {
    println("こんにちは、${name}さん!")
}

呼び出すときは、他の言語と同じように関数名にカッコを付ける。

greet("太郎")

戻り値のある関数

処理の結果を呼び出し元に返したい場合は、戻り値の型を: 型の形で指定し、returnで値を返す。

fun add(a: Int, b: Int): Int {
    return a + b
}

val sum = add(10, 5)
println("10 + 5 = $sum")

単一式関数でシンプルに書く

処理が1行で済む場合は、波カッコとreturnを省略して=でつなぐ「単一式関数」が使える。

fun multiply(a: Int, b: Int) = a * b

addmultiplyはどちらも同じような足し算・掛け算だが、単一式関数の方がすっきり書けることが分かるだろう。

デフォルト引数と名前付き引数

Kotlinの関数は、引数にあらかじめ既定値を設定できる。呼び出し側で値を省略すると、その既定値が使われる。

fun introduce(name: String, age: Int = 20, city: String = "東京") {
    println("名前: $name, 年齢: ${age}歳, 出身: $city")
}

💡 ここで$age歳ではなく${age}歳と波カッコで囲んでいる点に注意しよう。
Kotlinの文字列テンプレートは日本語の文字も識別子の一部として扱えるため、$age歳と書くと「age歳」という一つの変数名として解釈されてしまい、Unresolved reference 'age歳'というコンパイルエラーになる。
変数の直後に日本語などを続ける場合は、必ず${変数名}のように波カッコで囲むこと。

introduce("花子")               // 年齢・出身は既定値
introduce("一郎", 25)            // 出身のみ既定値
introduce("次郎", 30, "大阪")     // すべて指定

引数の数が多い関数を呼ぶときは、名前付き引数を使うと可読性が上がる。

introduce(name = "三郎", city = "福岡")

実践課題:自己紹介関数を作る

あらかじめsrc/main/kotlin/com/learning/フォルダの中にDay04Functions.ktという名前でファイルを作成しておこう。左側のファイルツリーでcom.learningフォルダを右クリックし、「New File」からファイル名を入力すれば作成できる。

ファイルを作成したら、それをクリックすると中央にエディタが開く。そこに以下のコードを直接書き込んでもよいし、この記事のコードをコピー&ペーストしても構わない。あるいは、筆者のリポジトリからダウンロードしたDay04Functions.ktをそのままファイルツリーにドラッグ&ドロップしてアップロードする方法でもよい。

実行するファイルを切り替えよう

このプロジェクトでは複数のレッスン日のコードが同じsrc/main/kotlin/com/learning/フォルダに入っているため、実行したいファイルをbuild.gradle.ktsmainClassで指定する必要がある。

application {
    mainClass.set("com.learning.Day04FunctionsKt") // 実行したいファイル名に変更
}

ファイル名の規則は「ファイル名そのまま+Kt」である。

  • Day01Variables.kt → Day01VariablesKt
  • Day02Conditionals.kt → Day02ConditionalsKt
  • Day03Loops.kt → Day03LoopsKt
  • Day04Functions.kt →Day04FunctionsKt

変更後、保存してから以下のコマンドで実行しよう。

./gradlew run

// src/main/kotlin/com/learning/Day04Functions.kt
package com.learning

// 課題1: 基本的な関数
fun greet(name: String) {
    println("こんにちは、${name}さん!")
}

// 課題2: 戻り値のある関数
fun add(a: Int, b: Int): Int {
    return a + b
}

// 課題3: 単一式関数
fun multiply(a: Int, b: Int) = a * b

// 課題4: デフォルト引数
fun introduce(name: String, age: Int = 20, city: String = "東京") {
    println("名前: $name, 年齢: ${age}歳, 出身: $city")
}

fun main() {
    println("=== Day 4: 関数の基礎 ===\n")

    // 関数の呼び出し
    greet("太郎")

    // 戻り値の利用
    val sum = add(10, 5)
    println("10 + 5 = $sum")

    val product = multiply(4, 3)
    println("4 × 3 = $product")

    // デフォルト引数
    introduce("花子")
    introduce("一郎", 25)
    introduce("次郎", 30, "大阪")
}

実行例

> Task :run
=== Day 4: 関数の基礎 ===

こんにちは、太郎さん!
10 + 5 = 15
4 × 3 = 12
名前: 花子, 年齢: 20歳, 出身: 東京
名前: 一郎, 年齢: 25歳, 出身: 東京
名前: 次郎, 年齢: 30歳, 出身: 大阪

まとめ

今回は以下のことを学んだ。

  • 関数の定義と呼び出し
  • 戻り値のある関数
  • 単一式関数によるシンプルな書き方
  • デフォルト引数・名前付き引数

Day03(ループ処理)と今回のDay04(関数)の2回で、繰り返し処理と処理のまとめ方をひと通り押さえたことになる。ここで一旦区切りとし、次回以降はコレクション(List・Set・Map)やNull安全性、クラスといった、より実践的な内容に入っていく予定である。


筆者のリポジトリ

コメント

タイトルとURLをコピーしました