Infix関数は、ピリオドやカッコなしで呼び出すことができる関数で、コードの可読性を向上させます。このような関数は、DSL(ドメイン特定言語)の作成に便利です。
infix修飾子で宣言します。例:
infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15
複数のパラメータやデフォルトパラメータを持つinfix関数を使用できますか?
答え: いいえ、できません。Infix関数は、デフォルト値やvarargのない正確に1つの必須パラメータを持つことができます。
不適切な宣言の例:
// エラー! infix fun foo(a: Int, b: Int) { }
ストーリー
プロジェクトでは、builder関数の呼び出しをより読みやすいinfix表現に置き換えるためにinfix関数を導入しようとしました。パラメータ数の制限が分からず、2つのパラメータを持つ関数を宣言してしまい、学生たちはコンパイルが通らない理由を長い間理解できませんでした。
ストーリー
開発者は、大きな算術式の中でカッコなしでinfix表現を使用し、演算の優先順位が従来の数学演算子と同じだと考えていました。その結果、期待通りに式が計算されず、明示的なカッコを使用して書き直す必要がありました。
ストーリー
コレクション内でinfixを通じてparsing("item to value")を実装し、ネスティング内で使用しましたが、構文の誤解により2つの入れ子になったinfix呼び出しは機能しませんでした。最上位レベルでのペアの指定のみが機能し、入れ子のペアは無視されたため、重要なデータの損失につながりました。