おはようエンジニア

まともなエンジニアになりたい

『Kotlinイン・アクション』第3章を読む (その1)

Kotlinイン・アクション第3章は「関数の定義と呼び出し」です。

前章と同じく知らなかったことやそのうち忘れそうなことを中心に書いていきます。

コレクション生成

  • ~Of メソッドでコレクションを生成できる
    • 内部ではJavaの標準コレクションを使用している
    • 例: hashSetOf, arrayListOf, hashMapOf
val set = hashSetOf(1, 7, 53) // 生成
println(set.javaClass) // -> class java.util.HashSet

関数の呼び出し

名前付き引数

  • 引数名を指定して呼び出し
    • ただしKotlinで定義した関数のみ
    • 混乱を避けるためすべての引数に対して名前を指定すべき
joinToString(collection, separator = " ", prefix = " ", postfix = ".")

デフォルト引数

  • 関数の宣言でデフォルト値を持たせることができる
    • 呼び出し時に引数を省略するとデフォルト値が入る
    • 名前付きではない関数呼び出しをする場合は、後ろ側の引数のみ省略可
  • 関数に @JvmOverloads をつけると、コンパイル時にデフォルト引数を持った関数からオーバーロードメソッドを生成する
@JvmOverloads
fun test(msg1: String = "hoge", msg2: String = "piyo"): String
// 同一のクラスへコンパイルされるJavaコード
String test(String msg1, String msg2)
String test(String msg1)
String test()

トップレベル関数

  • 関数はトップレベルに宣言できる
// join.kt
package strings
fun joinToString(...): String { ... }
// 同一のクラスへコンパイルされるJavaコード
package strings

public class JoinKt {  // ファイル名から決定される
    public static String joinToString(...) { ... }
}
  • Kotlinファイルに@file:JvmName("StringFunctions") をつけると生成するクラス名を変更できる

トップレベルプロパティ

  • プロパティもトップレベルに宣言できる
    • 普通に宣言するとプロパティになるのでgetterやsetterが自動で生成される
  • const をつけて宣言すると public static final な定数として宣言できる
const val TAX = 1.08
/* java */
public static final String TAX = 1.08;