Kotlin について調べたこと
kotlinとは
Kotlinは、IntelliJ IDEAで有名なJetBrainsが開発したオブジェクト指向プログラミング言語です。
コンパイルされたコードはJVM上で動作するため、
これまでJAVAで作成した資産を流用できる様になっています。
Kotlinの基本構文
変数宣言
// val で宣言すると値の再代入ができなくなる
val firstName: String = "Tanaka"
// 型推論でいちいち型の定義がいらない
val lastName = "Taro"
// var で宣言すると再代入ができる
var age = 20
age = 21
配列
// 配列(array)を作成
val nameList: Array<String> = arrayOf("tanaka", "saitou", "kimura")
println(nameList[0]) // tanaka が出力
// 配列の要素の書き換え
nameList[1] = "sakurai"
println(nameList[1]) // sakurai が出力
// 配列(リスト)を作成
val animalList: List<String> = listOf("dog", "cat", "rabbit")
println(animalList[0]) // dog が出力
// 配列の要素の書き換え
animalList[1] = "tiger" // エラー インターフェイスListは読み取り専用
List でも mutableListOf() で変更可能なリストができるので Array と List の使い分けがいまいちわからないです。
マップ
// マップ作成
val numberMap: MutableMap<String, Int> = mutableMapOf("one" to 1)
println(numberMap["one"]) // 1 が出力
//// 値の追加
numberMap["tow"] = 2
println(numberMap) // {one=1, tow=2} が出力
// mapOf でマップ作成
val reNumberMap: Map<Int, String> = mapOf(1 to "one")
println(reNumberMap[1]) // 1 が出力
//// 値の追加
reNumberMap["tow"] = 2 // エラー mapOf は 読み取り専用
条件分岐
// 普通のif文
if (true) {
println("if") // if が出力
} else {
println("else")
}
// Kotlinに三項演算子はないのでそれっぽいの
val animal = "dog"
val isDog = if (animal == "dog") true else false
println(isDog) // true が出力
// 空チェックとかなら
val person:String? = null
val personName = person?: "NoName"
println(personName) // NoName が出力
// when文 switch文と同じような感じ
val result = when("hoge") {
"hoge" -> "hoge"
"fuga" -> "fuga"
else -> "else"
}
println(result) // hoge が出力
ループ処理
// while 文
var count = 5
while(0 < count--) {
println("while count: ${count}")
}
// for 文
for (i in 1..5) {
println("for count: ${i}")
}
JAVA と Kotlin の書き比べ
userクラスに年齢、名前、性別を加え、
自己紹介メソッドを実行するコードを書いてみました。
Kotlin
user.kt
fun main() {
val user = userData(20, "Taro", "Men")
user.selfIntroduction()
}
userData.kt
data class userData (
var age: Int? = 0,
var name: String = "NoName",
var gender: String? = null
) {
fun selfIntroduction() {
println("My name is ${name}")
println("Age is ${age}")
println("Gender is ${gender}")
}
}
JAVA
user.java
public class user {
public static void main(String[] args) {
userData user = new userData(20, "Taro", "Men");
user.selfIntroduction();
}
}
userData.java
public class userData {
private int age;
private String name;
private String gender;
public userData(int age, String name, String gender) {
this.age = age;
this.name = name;
this.gender = gender;
}
public void selfIntroduction() {
System.out.println("My name is " + this.name);
System.out.println("Age is " + this.age);
System.out.println("Gender is " + this.gender);
}
}
記述して感じた違いとしては
- コンストラクタの作成に New がいらない
- 型推論の機能により必ず型の定義をする必要がない
- 末尾のセミコロンが必須ではない
- 文字列リテラルの中に式を入れることができる
Spring Boot で Hello World
環境
Windows10 Pro
IntelliJ Community Edition 2020.2
JAVA 14
プロジェクトの雛形を作る
Spring Initializr を用いてプロジェクトの雛形を入手する。
設定は
Project : Gradle Project
Language : Kotlin
Spring Boot : 2.3.4
Project Metadata : デフォルトのまま
Packaging Jar
Java : 14
Dependencies : Spring Web
最後に、GENERATE を押下してプロジェクトの雛形をダウンロード
作成したプロジェクトの雛形をビルド
IntelliJ から File→Open...→ダウンロードしたプロジェクトの雛形を選択→OK の手順で展開
コントローラを作成
demo/src/main/kotlin/com.example.demo/controller
フォルダーに対して
右クリック→New→Kotlin File/Class を押下
HelloController.kt を作成する。
HelloController.kt
package com.example.demo.controller
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestMapping
@RestController
public class HelloController {
@RequestMapping("/")
fun hello():String {
return "Hello World"
}
}
Webサーバの起動
右上の 再生ボタン を押下し、ビルドを行う
接続
ビルドが終わったら http://localhost:8080
に接続
感想
筆者はJAVAをあまり触ったことが無いので、
JAVAを知らないでいきなりKotlinって大丈夫なのかなと不安を感じていたのですが、
いきなりKotlinから書き始めてみたところ、いきなりKotlinでも問題なく
むしろKotlinから始めたほうがとっつきやすいと感じました。
JAVAと書き比べてみたところ、Kotlinでのコード量が少なくなり、
型推論やデータクラス等がコードを簡潔の手助けになっていると感じました。