
シンプルな記事あったので。
Learn Kotlin for Android in One Day – Mayur Rokade – Medium
1. 変数
変数は「var」。
var username: String = "some user name"
定数は「val」。Java の final と等価。
val API_DELAY_CONSTANT: Int = 100
null で初期化するには「?」。 null を利用可能にします。
var myString: String? = null
static な定数には「companion object」。
class Animal {
    companion object {
        const val DEFAULT_NUM_OF_EYES = 2
    }
}
animal.numOfEyes = Animal.DEFAULT_NUM_OF_EYES
遅れて初期化するには「lateinit」。
lateinit var user: User
lateinit var items: List<String>
2. 関数
これは、public。Int を返します。
fun getNumber(): Int {
    return 1
}
private で引数を渡す場合。
private fun getStringLength(str1: String, str2: String): Int {
    return str1.length + str2.length
}
static 関数。
class MyStringUtil {
    companion object {
        fun getOddLengthString(str: String): String? {
            if (str.length % 2 == 0) return null
            return str
        }
    }
}
var str: String = MyStringUtil.getOddLengthString("hey")
「?」を使って、null を返すことをコンパイラに伝えています。
3. ループ と when
コレクションである items に「in」で。
var items: List<String> = ArrayList<String>()
for (item in items) {
    // do something with item
}
インデックスにアクセスすることもできる。
for (index in items.indices) {
    // access items using index
    // items.get(index)
}
Java の switch は、Kotlin では「when」。
// A cool example of when statement
fun describe(obj: Any): String? {
    var res: String? = null
    when (obj) {
        1 -> { res = "One" }         // if obj == 1
        "Hello" -> res ="Greeting"  // if obj == "Hello"
        is Long -> "Long"            // if obj is of type Long
        !is String -> "Not string"   // if obj is not of type String
        else -> {
            // execute this block of code
        }
    }
    return res
}
4. Null 安全
Java で NPE を避ける場合。if で。
if (person != null && person.department != null) {
    person.department.head = managersPool.getManager()
}
Kotlin では「?」を使って、if を省くことができる。chain可能。
person?.department?.head = managersPool.getManager()
null の場合を処理したいときは「?:」を使う。
var name = person?.name ?: throw InvalidDataException("Person cannot be null.")
5. クラス
「open」で継承可能。なければ, Java の final class と同じ。
open class Animal {
    // This class is open and
    // can be inherited
}
class Dog : Animal() {  // Notice the paranthesis
    // Class dog is final and
    // can't be inherited
}
// Compiler throws error
class Labrador : Dog {
}
6. シングルトン
「object」を使う。
object Singleton {
    var name: String = "singleton object"
    fun printName() {
        println(name)
    }
}
// later in the code
Singleton.name
Singleton.printName()
7. インターフェース
インターフェースの継承は直感的に。
interface Named {
    fun bar()
}
interface Person : Named { // Person inherits Named
    fun foo()
}
class Employee() : Person {
    override fun bar() {
        // do something
    }
    override fun foo() {
        // do something
    }
}
関数に渡す場合は少し違う。
// A function that accepts and interface as a parameter
private fun setOnClickListener(listener: View.OnClickListener) {
    // do something
}
// Passing an interface to the function
setOnClickListener(object : View.OnClickListener{
    override fun onClick(view: View?) {
        // do something
    }
})
8. 型チェックとキャスト
「is」や「!is」を使う。
if (obj is String) {
    print(obj.length)
}
if (obj !is String) {
    print("Not a String")
}
「as?」を使って例外を避けてキャスト可能。失敗時には null を返す。
val x: String? = y as? String
9. 例外
Java とほぼ同じ。
throw Exception("Hi There!")
try {
    // some code
}
catch (e: SomeException) {
    // handler
}
finally {
    // optional finally block
}
まとめ
重要な最小限の部分からきちんと学んでいくこと大事。
- Kotlin で FizzBuzz
- 「Fragment を利用するか、しないか」という話
 
		 
          