読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Kotlinためしてみる

概要

Android Testing Bootcampで触発されたので、赤べこ本を読んでKotlin勉強する

詳細

️# 開発環境

関数

文法などはなんとなくわかったので関数についてまとめておく

関数定義

fun succ(i : Int): Int = i + 1;
fun sum(ints: Array<Int>): Int {
    var sum = 0
    for(i in ints) {
        sum += i
    }
    return sum
}

関数利用例

fun succ(i : Int): Int = i + 1;

fun main(args: Array<String>) {
    println(succ(31))
}

名前付き引数とデフォルト引数

fun sub(minuend: Int, subtrahend: Int) : Int = minuend - subtrahend
fun hello(name: String = "World"): String = "Hello, $name"

可変長引数

可変長引数は一つの関数につき、一つしか持てない

fun sum(vararg ints: Int): Int {
    var sum = 0
    for (i in ints) {
        sum += i
    }
    return sum
}

fun main(args: Array<String>) {
    println(sum(1,2,3))
    // 配列を渡す場合は*を頭につける
    println(sum(*intArrayOf(1,2,3)))
}

第一級オブジェクトとしての関数

関数オブジェクト

関数を関数オブジェクトとして扱える

fun square(i: Int): Int = i * i

fun main(args: Array<String>) {
    val functionObject = ::square
    println(functionObject(5))
}
高階関数

関数オブジェクトを関数の引数とかで使う

// 引数Charで返り値Booleanの関数が引数になる関数
fun first(str: String, predicate: (Char) -> Boolean): Int {
    tailrec fun go(str: String, index: Int): Int =
        when {
            str.isEmpty() -> -1
            predicate(str.first()) -> index
            else -> go(str.drop(1), index + 1)
        }
    
    
    return go(str, 0)
}
ラムダ式

関数オブジェクトを直接生成

fun main(args: Array<String>) {
    val square: (Int) -> Int = {
        i: Int -> i * i
    }
    
    println(square(2))
}

ラムダ式の引数が1つのときに限り、暗黙の変数itを利用することができる

fun main(args: Array<String>) {
    val square: (Int) -> Int = {
        it * it
    }
    
    println(square(2))
}
ラムダ式高階関数
fun firstWhiteSpace(str: String): Int {
    val isWhiteSpace: (Char) -> Boolean = {
        it.isWhitespace()
    }
    return first(str, isWhiteSpace)
}

まだまだ使いこなせている感がない、慣れていく

Kotlinスタートブック

Kotlinスタートブック

広告を非表示にする