Infix関数
読みやすい関数呼び出しを学びます
「Infix関数」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
インフィックス関数とは
インフィックス関数は、ドットやかっこを付けずに a func b のように呼び出せます。infix キーワードを付けて指定します。
infix fun Int.times2(factor: Int) = this * factor
fun main() {
println(3 times2 4)
}インフィックスのルール
インフィックス関数はメンバー関数または拡張関数であり、1つのパラメーターだけを受け取る必要があります。また、そのパラメーターは vararg にしたり、デフォルト値を持たせたりできません。
infix fun Int.plusBy(other: Int) = this + other
fun main() {
println(5 plusBy 7)
}組み込みのインフィックス関数
標準関数の多くはインフィックス関数です。to(Pair を構築する関数)、and、or、shl、そして範囲に使用する until、downTo、step があります。
fun main() {
val pair = "key" to 42
println(pair)
for (i in 1 until 4) print(i)
}to による Pair の構築
おなじみの "a" to 1 というマップ構文は、Pair を返すインフィックス関数 to にすぎません。
fun main() {
val map = mapOf(1 to "one", 2 to "two")
println(map[2])
}メンバー関数としてのインフィックス
インフィックス関数はメンバー関数にもできるため、流れるようなドメイン表現を記述できます。
class Money(val cents: Int) {
infix fun add(o: Money) = Money(cents + o.cents)
}
fun main() {
val total = Money(100) add Money(50)
println(total.cents)
}可読性を第一にする
呼び出しが文章のように読める場合、インフィックス関数が効果を発揮します。a name b が自然につながるように、動詞のような名前を選んでください。
infix fun String.repeatedTimes(n: Int) = this.repeat(n)
fun main() {
println("ab" repeatedTimes 3)
}インフィックス呼び出しの優先順位
インフィックス呼び出しの優先順位は算術演算子より低く、比較演算子より高くなります。組み合わせて使用する場合は、明確になるようにかっこを追加してください。
infix fun Int.combine(o: Int) = this * 10 + o
fun main() {
println(1 combine 2 + 3)
}this レシーバー
インフィックス拡張関数では、this が左オペランドになり、パラメーターが右オペランドになります。
infix fun Int.minus2(o: Int) = this - o
fun main() {
println(10 minus2 3)
}インフィックス呼び出しの連鎖
インフィックス呼び出しは左結合なので、連鎖させることができます。
infix fun Int.then(o: Int) = this + o
fun main() {
println(1 then 2 then 3)
}インフィックスの使い過ぎを避ける
インフィックス関数はドットやかっこを省略できますが、明らかでない操作ではかえって分かりにくくなることがあります。読みやすくなる場合に限って使用してください。
infix fun Int.power(exp: Int): Int {
var r = 1
repeat(exp) { r *= this }
return r
}
fun main() {
println(2 power 5)
}流れるような表現の例
インフィックス関数を使うと、アサーションやビルダーを英語のように読める形で記述できます。
infix fun String.shouldStartWith(prefix: String) =
this.startsWith(prefix)
fun main() {
println("kotlin" shouldStartWith "kot")
}理解度チェック
インフィックス関数についての理解度を確認しましょう。
まとめ
インフィックス関数について学びました。
infixを付け、a func bのように呼び出します。- 1つの、vararg でもデフォルト値付きでもないパラメーターを持つメンバー関数または拡張関数である必要があります。
to、until、downToは組み込みのインフィックス関数です。- 可読性が本当に向上する場合に使用してください。
infix fun Int.add(o: Int) = this + o
fun main() {
println(4 add 6)
}よくある質問
「Infix関数」レッスンは無料ですか?
はい。「Infix関数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「Infix関数」で何を学びますか?
読みやすい関数呼び出しを学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Infix関数」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Infix関数
- DSL風APIの構築
- tailrec関数
- 使い分け