13. package com.example.sample
class User(name : String, age : Int) {
val name = name
val age = age
{
// コンストラクタ
}
fun hello() : String {
return "Hello! My name is ${name}. ${age} years old."
}
}
fun main(args : Array<String>) {
val sam = User("Sam", 25)
val bob = User(age = 30, name = "Bob")
println(bob.hello()) // => Hello! My name is Bob.30years old.
}
コンストラクタ
Rubyのように、
文字列の中に変数を
埋め込むことが可能。
型推論のため、
型宣言が不要
戻り値の型を関数の
最後に書く
インスタンス化にnew
は不要
名前付き引数も使える。
Rubyも2.0からできる。
14. fun main(args: Array<String>) {
var sam : String?
sam = null
sam.toUpperCase() // コンパイルできない
sam?.toUpperCase() // nullなら何もしない
sam!!.toUpperCase() // ぬるぽで落ちる
}
nullの可能性がある
場合は?付きで型宣言
null安全。コンパイラが
nullの可能性を潰してくれ
る。
?.だと、nullなら
何もしない
!!.だと、開発者側がnullはあり得ないと
決めつける。nullがきたらぬるぽ発生
する。