Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
fun 関数の定義
Kotlinの関数は『fun』キーワードで定義します。引数にはデフォルト値を設定でき、呼び出し時に名前付き引数を使うと可読性が高まります。
構文
// 基本的な関数定義
fun 関数名(引数名: 型, 引数名: 型): 戻り値型 {
// 処理
return 値
}
// 戻り値なしの関数(Unit は省略可能)
fun greet(name: String): Unit {
println("Hello, $name!")
}
// デフォルト引数
fun power(base: Int, exponent: Int = 2): Int {
return Math.pow(base.toDouble(), exponent.toDouble()).toInt()
}
// 名前付き引数で呼び出します。
power(base = 3, exponent = 4)
power(exponent = 3, base = 2) // 順序を変えられます。
構文一覧
| 構文 | 概要 |
|---|---|
| fun 名前(引数): 型 | 関数を定義します。戻り値型が Unit のときは省略できます。 |
| 引数名: 型 = デフォルト値 | 引数のデフォルト値を設定します。呼び出し時に省略できます。 |
| 名前付き引数 | 呼び出し時に「引数名 = 値」と指定すると引数の順序を変えられます。 |
| vararg 引数名: 型 | 可変長引数を定義します。呼び出し側は複数の値を渡せます。 |
| return 値 | 関数から値を返します。戻り値なしの場合は省略できます。 |
サンプルコード
// 基本的な関数定義
fun add(a: Int, b: Int): Int {
return a + b
}
// 戻り値なし(Unit は省略可能)
fun printMessage(msg: String) {
println(msg)
}
// デフォルト引数
fun greet(name: String, greeting: String = "Hello") {
println("$greeting, $name!")
}
// 可変長引数(vararg)
fun sum(vararg numbers: Int): Int {
return numbers.sum()
}
// 名前付き引数の活用
fun createUser(name: String, age: Int = 0, admin: Boolean = false): String {
return "User(name=$name, age=$age, admin=$admin)"
}
fun main() {
println(add(3, 5)) // 8
printMessage("Kotlin!") // Kotlin!
greet("Alice") // Hello, Alice!
greet("Bob", "Hi") // Hi, Bob!
greet(greeting = "Hey", name = "Charlie") // 名前付き引数で順序変更
println(sum(1, 2, 3, 4, 5)) // 15
// デフォルト引数と名前付き引数の組み合わせ
println(createUser("Alice")) // age・admin はデフォルト
println(createUser("Bob", age = 25)) // age だけ指定
println(createUser("Carol", age = 30, admin = true))
// 配列を vararg に展開します(スプレッド演算子)
val nums = intArrayOf(10, 20, 30)
println(sum(*nums)) // 60
}
概要
Kotlinの関数はデフォルト引数と名前付き引数を組み合わせることで、JavaのようなオーバーロードなしにAPIを柔軟に設計できます。引数が多い関数では名前付き引数を使うと呼び出し側のコードが読みやすくなります。
戻り値型が明確な場合は型推論が効くため省略できますが、publicなAPIでは明示することが推奨されます。
簡潔な関数は単一式関数 / ローカル関数を、関数を値として扱う方法は高階関数を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。