val, var
if let
val name: String? = "John Doe"
name?.let {
print("Name: ${it}")
}
hoge?.let {
it.action()
} ?: run {
// nullの場合
}guard
var hoge = hoge ?: return
lateinit
private lateinit var message:String
onCreate() {
message = "hello"
}Callback
func action(completion: (() -> Unit)? = null)
completion?.invoke()3項演算子
val twoTimesNumber = number?.let { it * 2 } ?: 0 elvis
val name: String = user?.name ?: "no name"func
fun getLengthOfString(str: String): Int {
return str.length()
}when
val word = when (value) {
0 -> "zero"
1 -> "one"
}Singleton
object SingletonClass {
var isFirstLaunch = false
}小規模interfaceの省略
button.setOnClickListener(object :View.OnClickListener {
override fun onClick(v: View?) {
}
})
↓
button.setOnClickListener {
}filter
var sum = 0
listOf(1,2,3).filter { it > 0 }.forEach {
sum += it
}リスト操作 http://kirimin.hatenablog.com/entry/2015/08/24/093646
変数展開
println("i is $i, user name is ${user.name}")拡張
fun Int.square(): Int = this * thisプロパティ
class User {
val id: Int
var familyName: String = "yamada"
var firstName: String = "taro"
val fullName: String
get() = "$familyName $firstName"
var died: Boolean = false
get() { return field }
set(value) {
field = value
if (value) {
println("${fullName}は死んでしまった")
}
}
constructor(id: Int) {
this.id = id
}
}データクラス(equals, hashCode, toString,copy が自動定義)
data class Vector3(val x: Double, val y: Double, val z: Double)別名import
import android.graphics.Bitmap as ABitmapenum
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}