Introduction
Named arguments
問題
joinOptions() 関数が、2つの引数のみを指定して、リストを JSON 形式(例えば、[a, b, c])で返すようにします。
デフォルト引数と名前付き引数は、オーバーロードの数を最小限に抑え、関数呼び出しの可読性を向上させるのに役立ちます。
ライブラリ関数 joinToString は、パラメータにデフォルト値が設定されています:
fun joinToString(
separator: String = ", ",
prefix: String = "",
postfix: String = "",
/* ... */
): String
この関数は、文字列のコレクションに対して呼び出すことができます。
fun joinOptions(options: Collection<String>) =
options.joinToString(TODO())
解答
fun joinOptions(options: Collection<String>) =
options.joinToString(prefix = "[", postfix = "]")
解説
.joinToString()
は、すべての要素を指定された区切り文字で結合し、指定された接頭辞や接尾辞があればそれを使用して文字列を作成してくれるもの。
.joinToString()
は引数に、separator
、prefix
、postfix
、limit
、truncated
、transform
を渡すことができる。
separator(区切り文字)
:
要素の間に挿入する文字列を指定する
デフォルトは ,
(カンマとスペース)
prefix(接頭辞)
:
結果の文字列の最初に付ける文字列を指定する
デフォルトは ""
(空文字)
postfix(接尾辞)
:
結果の文字列の最後に付ける文字列を指定する
デフォルトは ""
(空文字)
limit(制限)
:
結果に含める要素の数を制限する
limit
に指定した数だけ要素が出力され、それを超える部分は省略される
デフォルトは -1 で、これは制限なしを意味する
truncated(省略文字列)
:
limit
を指定して要素数が制限される場合に、省略された部分を表す文字列を指定する
デフォルトは ...
transform(変換関数)
:
各要素に対して適用する変換関数を指定する
transform
は各要素を CharSequence?
に変換する関数で、デフォルトは null(変換なし)
この引数を使うことで、要素を文字列に変換したり、フォーマットを変更することができる
おわりに
Kotlin にも JavaScript みたいな組み込み関数が用意されているんだ・・・。
でも JavaScript で用意されている .join()
より kotlin の方が高機能な気がする。