この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
kotlin:標準関数・スコープ関数 [2019/12/13 01:16] ips 作成 |
kotlin:標準関数・スコープ関数 [2019/12/13 01:33] (現在) ips [takeUnless] |
||
---|---|---|---|
ライン 48: | ライン 48: | ||
</code> | </code> | ||
- | ^ 関数 ^ 渡し ^ 返し | | + | ^ 関数 ^ 渡し | 関数コール ^ 返し ^ |
- | | apply | 何も渡さない | レシーバー | | + | | apply | 何も渡さない | 相対スコープ | レシーバー | |
- | | let | レシーバーをラムダに渡す | ラムダの最後の行 | | + | | let | レシーバーをラムダに渡す | ー | ラムダの最後の行 | |
+ | | run | | 相対スコープ | ラムダの最後の行 | | ||
+ | | | | | | | ||
ライン 56: | ライン 58: | ||
===== run ===== | ===== run ===== | ||
+ | applyと同じく関数は相対スコープで呼び出されるが、何も返さない。 | ||
+ | runを使った呼び出しの連鎖のほうがネストしているよりわかりやすい。 | ||
+ | <code> | ||
+ | fun nameIsLong(name:String) = name.length > 10 | ||
+ | fun playerCreateMessage(nameTooLong:Boolean):String{ | ||
+ | return if (nameTooLong){ | ||
+ | "too long" | ||
+ | }else{ | ||
+ | "welcome!!" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | fun main(){ | ||
+ | // runによる関数呼び出しの連鎖 | ||
+ | val text = "polarcubis,supreme master5 of nyethack" | ||
+ | .run(::nameIsLong) // >>> true | ||
+ | .run(::playerCreateMessage) // >>> too long | ||
+ | .run(::print) | ||
+ | } | ||
+ | } | ||
+ | >>> too long | ||
+ | </code> | ||
===== with ===== | ===== with ===== | ||
+ | |||
+ | 引数を第一パラメーターとして受け取る必要がある。 | ||
+ | 可能ならばrunで置き換える。 | ||
+ | |||
===== also ===== | ===== also ===== | ||
+ | let とにているが、letはラムダの結果を返す。 | ||
+ | alsoはレシーバーを返す。 | ||
===== takeif ===== | ===== takeif ===== | ||
+ | |||
+ | 真だとレシーバーを返す。 | ||
+ | 偽だとnullを返す | ||
+ | |||
===== takeUnless ===== | ===== takeUnless ===== | ||
+ | 偽だとレシーバーを返す。 | ||
+ | 真だとnullを返す。 | ||
+ | わかりにくいため使用すべきではない。 |