LoginSignup
0
0

Kotlinインアクション(アウトプット目的)

Posted at

※Kotlinインアクションを読み、アウトプットとして忘れない程度に記載

式と文の違い

値が返る処理機構は式。
式を組み合わせて処理を行うものが文。

変数

プリミティブ型

Int
Long
Double
Float
Short
Byte
Boolean
Char

リファレンス型

String
Array
List
Set

動的, 静的, 定数

val: 静的読み取り用の値
var: 動的読み書き用の値
const val: 定数

読み取り範囲

private 
protected
public

null許容型

変数に?をつけて宣言することでnull許容型になる

val name: String? = null

関数

基本的な宣言方法

引数に型の設定可能。デフォルト引数の設定も可能。
返り値の型の宣言が可能。

fun functionName(name: String = "太郎"):Unit {
    println("Hello World ${name}")
}

返り値の種類

一般的な変数種別や宣言したクラスに加えて以下を宣言可能
Unit: 正常終了して返り値がない
Nothing: エラーなどが返る前提で、正常終了しない
Any: 任意の型

クラス

クラス種別

enum: 列挙型
annotation: アノテーション型
interface: インターフェース
data: データ型
object: シングルトンクラスとして利用するクラス
abstract
open
final
override

カスタムアクセサ

クラスの引数にはget,setのアクセサを設定できる

基本構文

## 条件処理
if (条件) {
    処理
}
when(対象の値) {
    条件1 -> 処理1
    条件2 -> 処理2
    条件3 -> 処理3
}

## 繰り返し
for(i in 0..10) {
    println(i)
}
while(条件式) {
    処理
}
do {
    処理
} while(条件式)

## 例外処理
try {
    処理A
} catch(e: Exception) {
    処理B
} finally {
    処理C
}

ラムダ関数

スコープ関数

対象のレシーバに対してスコープ内の処理を行うため、スコープ関数と呼ぶ。

/**
 * You can edit, run, and share this code.
 * play.kotlinlang.org
 */
fun main() {
    val amount = 300.0;
    val withRes = with(JapanCalcTax(0.05)) {
        this.printTax()
        println(this.calcTaxAmount(amount))
        this
    }
    println("withRes: ${withRes}")
    println("===========================")
    val letRes = JapanCalcTax(0.1).let {
        it.printTax()
        println(it.calcTaxAmount(amount))
        it
    }
    println("letRes: ${letRes}")
    println("===========================")
    val runRes = JapanCalcTax(0.15).run {
        printTax()
        println(calcTaxAmount(amount))
    }
    println("runRes: ${runRes}")
    println("===========================")
	val applyRes = JapanCalcTax(0.2).apply {
        printTax()
        println(calcTaxAmount(amount))
    }
    println("applyRes: ${applyRes}")
}

class JapanCalcTax(
    private var taxRate: Double
){
    override fun printTax():Unit {
        println("taxRate: ${taxRate}")
    }
    
    override fun calcTaxAmount(amount: Double): Double {
        return amount * taxRate
    }
}

関数種別

匿名関数/無名関数/ラムダ関数

fun main() {
    val x = 10
    val y = 20
    val plus = fun(x: Int, y: Int): Int {
        return x + y
    }
    println(operation(plus))
    val minus = {x: Int, y: Int -> x - y}
    println(operation(minus))
}
fun operation(func1: (x: Int, y: Int) -> Int): Int {
    return func1(2, 1)
}

拡張関数

クラスに定義せず、外側から既存クラスに関数を追加することができる。

fun main() {
    val x = 10
    val y = 20
    x.printInt()
    y.printInt()
}

fun Int.printInt(): Unit {
    println(this)
}

参考資料
https://vegcale.com/2023/05/15/kotlin-lambda-and-anonymous-function/

ジェネリクス

処理の外側から処理内部で利用する変数の定義を設定、注入することができる。

演算子オーバーロード

クラスのメソッドにplusやtimesを利用することで演算子である+や*を利用して処理を記述することができる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0