【Kotlin練習問題】名前付き引数

Kotlin

問題

fun joinOptions(options: Collection<String>) =
        options.joinToString(TODO())

上記コードのTODO()の中で、引数を二つだけ指定して、関数joinOptions()にJSON型のリスト(“[a,b,c]”など)を返すようにしてください。

デフォルト引数と名前付き引数はオーバーロードの数を最小化し、関数の呼び出しの可読性を向上させることができます。ライブラリ関数であるjoinToStringは以下のように、パラメーター用のデフォルト値と共に宣言されています。

fun joinToString(
    separator: String = ", ",
    prefix: String = "",
    postfix: String = "",
    /* ... */
): String

joinToStringはString型のリスト上で呼び出すことができます。

リンク先のKotlin公式サイトが提供しているKotlin Playgroundでブラウザ上で簡単にコードの編集・動作確認ができます!便利ですね!

下の[ヒント][答え]をクリックすると、それぞれ表示されます。

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

関数パラメーターはデフォルト値を持たせることができます。デフォルト値は対応する引数を省略したときに自動で使われるものです。これによってほかの言語に比べて、オーバーロードの数を減らすことができるのです。

fun read(
    b: ByteArray,
    off: Int = 0,
    len: Int = b.size,
) { /*...*/ }

デフォルト値は型の後にを使って指定します。ですので、上記の関数の場合、ユーザーがoffやlenに対応する引数をしなかった場合、自動でoffには0が、lenにはb.sizeが代入されます。

また、offをスキップしてlenのみに指定した値を代入したい場合、どちらもIntですので、何も指定せずにIntを一つ置いた場合、先にoffにその値が代入され、lenはデフォルト値になってしまいます。

それを避けるためにはread(byteArray, len=5)のように、明示的に引数の名前を指定することで、offにはデフォルト値の0が、lenには指定した5が代入されるようになります。

ヒント
fun joinOptions(options: Collection<String>) =
        options.joinToString(prefix ="[", postfix = "]")

[解説]

joinToString関数の引数の名前を指定してprefixには”[“を、postfixには”]”を渡すことで、何も渡していないseparatorは自動でデフォルト値の”,”になります。

結果を出力して確認したい人はPlaygroundに

fun main() {
    fun joinOptions(options: Collection<String>) =
        options.joinToString(prefix ="[", postfix = "]")
        
    print(joinOptions(listOf("a", "b")))
}

などと入力して、JSON型に変換されていることを見てみるといいでしょう。

答え

その他の問題はこちらからどうぞ。

おすすめ書籍

Kotlinの文法をまず学びたい!という方には以下の書籍がおすすめです。Kotlinは日本語書籍がまだ豊富とは言えない状況ですが、細かく解説されており、Kotlin入門者のかたでもつまずくことなく学習できると思います。

実際にアプリを作りながら覚えていきたい!という方には以下もお勧めです。はじめに上の書籍で文法をさらっと学んでから取り組むのがお勧めです。

プロフィール

プロフィール
コードラボJP

大学卒業後SEに就職、現在は退職しフリーランスとして活動中。
『初心者でも挫折せずに一人でプログラミングを学べる』をモットーに、コードラボJPを開設
お問い合わせ等はcodelabsjp@gmail.comまで

コードラボJPをフォローする
タイトルとURLをコピーしました