0Pricing
Kotlin Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Infix関数
  2. DSL風APIの構築
  3. tailrec関数
  4. 使い分け
← Kotlin Academyに戻る