技術めも

kotlin memo

geter,seter は dataクラス
シングルトン class -> object

高階関数
ラムダ式

https://try.kotlinlang.org

Unit = void

func main(args: Array<String>): Unit{
    println("Hello World")
    return Unit
}
package com.example.firstkotlinapp

import android.support.v7.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}
val num : Int = 1
var num2 : Int = 2
val result : String = if(true) {"true"} else { "false" }
println(result) // =>true
val value = 1
val str = when(value) {
    1-> "one"
    2-> "two"
    else -> "other"
}
val value = 1
when {
    value == 1-> println("one")
    value == 2-> println("two")
    else -> println("other")
}
val array: Array<Int> = arrayOf(1, 2, 3, 4, 5)
for (i in array) {
    print(i) // =>12345
}

arrayOf は Kotlin の標準の関数です。この場合は、Array型のオブジェ
クトを生成しています。その他にもコレクション生成の関数が揃っています。
ˆ mapOf:マップを生成する関数
ˆ listOf:リストを生成する関数
ˆ setOf:セットを生成する関数
その他にも Range を使った書き方も可能です。

Kotlin における通常の型は null の代入を許容しません。

Null 許容型のメソッドやプロパティを参照するとコンパイルエラー

var b: String? = "abc"
val l : Int = if(b != null) b.length else -1

?演算⼦を使えば、Null 許容型のメソッドやプロパティを参照することができます。

val l : Int? = b?.length

エルビス演算

val l : Int = b?.length ?: -1

標準関数の requireNotNull

関数は型パラメータを扱うことも可能です。関数名の前に<>を使って宣言します。

fun <T> singletonList(item: T): List<T> {
}
class Person(name: String) {
}

クラス名の後ろに定義するコンストラクターをプライマリーコンストラクターと呼びます

プロパティを作成

class Person(val name: String) {

Kotlin のプロパティには、自動的にバッキングフィールドと呼ばれるものが生成され、実際の値はそこに格納されます。
要は var, val キーワードでフィールドのように記述をするだけで、getter, setter 付きのフィールドが自動生成される
ということです(val は読み取り専⽤なので getter のみ)。

コンパニオンオブジェクト = static

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

open 修飾子がついているクラスについては:で継承することができます。

open class Person(val name: String)
class Student(name: String, val id: Long): Person(name)
package sample.hoge
class Foo

これで Foo クラスは sample.hoge パッケージに属すことになり、
異なるパッケージからは sample.hoge.Foo という名前でアクセスする必要があります。

internal 同⼀モジュール内に限り、全公開です

データクラス

data class Person(val id: Long, var name: String)

data クラスを定義するとコンパイラーが次のメソッドを自動で生成します。

  • equals()/hashCode()
  • toString()
  • componentN()
  • copy()

Java の参照型における == による比較は、Kotlin では === で比較
オブジェクトの中身が同じかどうかを==で調べることができます。

型エイリアス(type alias)