#20 Kotlinで学ぶ関数の応用(デフォルト引数・可変長引数)の基本
Kotlinの関数、もう基本は書けるようになってきたでしょうか。今回はもう一歩進んで、関数をより便利に使うための2つのテクニック「デフォルト引数」と「可変長引数」を紹介します。どちらもコードをシンプルに保つための機能で、Kotlinらしさが感じられる部分でもあります。少しずつ確認していきましょう。
デフォルト引数とは
関数を呼び出すとき、いつも「毎回同じ値を渡しているな」と感じる引数(関数に渡す値のこと)はありませんか。そんなときに便利なのが「デフォルト引数」です。これは、引数に「もし呼び出し側が値を指定しなかったら、この値を使う」というあらかじめ決まった初期値を設定できる機能です。
基本の書き方
例えば、挨拶のメッセージを作る関数を考えてみましょう。
fun greet(name: String, greeting: String = "こんにちは") {
println("$greeting、$name さん")
}
greet("田中") // こんにちは、田中 さん
greet("鈴木", "おはよう") // おはよう、鈴木 さん
引数の後ろに = 値 と書くだけで、デフォルト値を設定できます。greetingを省略すれば自動的に「こんにちは」が使われ、指定すればその値が優先されます。JavaやC言語のように、同じ処理を複数のパターンで用意する「オーバーロード」(同名の関数を引数の数や型違いで複数定義すること)を書く必要がありません。この手軽さも、Kotlinの大きなメリットです。
名前付き引数と組み合わせる
デフォルト引数を持つ関数が増えてくると、「後ろの引数だけ指定したい」という場面が出てきます。そんなときは「名前付き引数」を使いましょう。これは、引数名を明示して値を渡す書き方です。
fun greet(name: String, greeting: String = "こんにちは", punctuation: String = "!") {
println("$greeting、$name さん$punctuation")
}
greet(name = "佐藤", punctuation = "。")
途中のgreetingを飛ばしてpunctuationだけ指定できました。引数の順番を気にせず、必要なものだけを明示的に渡せるので、コードの意図がとても読み取りやすくなります。
可変長引数とは
次は「可変長引数」です。これは、関数を呼び出すときに渡す引数の「個数」を自由に変えられる仕組みです。「合計を計算したいけど、数値が2個の時も5個の時もある」といった場面で活躍します。
vararg キーワードを使う
Kotlinでは、引数の型の前にvarargというキーワードを付けることで可変長引数を宣言できます。
fun sum(vararg numbers: Int): Int {
var total = 0
for (n in numbers) {
total += n
}
return total
}
println(sum(1, 2, 3)) // 6
println(sum(10, 20, 30, 40)) // 100
関数の中では、numbersは配列(値を順番に並べて格納するデータの入れ物)のように扱えます。呼び出す側は、カンマ区切りでいくつでも値を渡せるというわけです。JavaScriptなどにも似た機能はありますが、Kotlinでは型(数値なのか文字列なのかといった値の種類)がきちんと決まっています。そのため、間違った型を渡すとコンパイル時に(実行前の段階で)エラーとして教えてくれる点が安心です。
配列を展開して渡す
すでに配列やリストにまとまっているデータを可変長引数の関数に渡したいこともありますよね。そんなときは、配列の前に*(スプレッド演算子)を付けます。
val numbers = intArrayOf(5, 15, 25)
println(sum(*numbers)) // 45
この*を忘れると「配列そのものを1つの引数として渡そうとしている」とみなされ、エラーになってしまいます。最初はうっかり忘れがちなので、気をつけましょう。
デフォルト引数と可変長引数を組み合わせるときの注意
この2つの機能は同じ関数の中で併用することもできますが、可変長引数は基本的に引数リストの最後に置くのがルールです。もし可変長引数の後ろに別の引数を置きたい場合は、名前付き引数を使って明示的に指定する必要があります。エラーが出て戸惑ったときは、まず引数の並び順を疑ってみてください。
まとめ
今回は、Kotlinの関数をより柔軟に使うための「デフォルト引数」と「可変長引数」を紹介しました。デフォルト引数は同じ処理を何度も書かずに済ませてくれる機能、可変長引数は引数の数を自由にできる機能でしたね。どちらも、他の言語では少し回りくどく書く必要がある処理を、Kotlinではすっきり書けるようにしてくれる便利な仕組みです。基本の関数の書き方に慣れてきたら、ぜひ実際のコードに取り入れてみてください。
関連記事
本ページはプロモーションを含みます。
参考書籍(PR)
Kotlinをもっと学びたい方には「やさしいKotlin入門」がおすすめです。
コメント
コメントを投稿