※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を利用することで演算子である+や*を利用して処理を記述することができる。