LoginSignup
1
0

More than 3 years have passed since last update.

Kotlin について調べたこと

Last updated at Posted at 2020-09-21

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

chrome_8cN8PNZDsH.png

最後に、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サーバの起動

idea64_VFRC5iORoS.png

右上の 再生ボタン を押下し、ビルドを行う

接続

ビルドが終わったら http://localhost:8080 に接続

chrome_Dk8vUW6lcC.png

感想

筆者はJAVAをあまり触ったことが無いので、
JAVAを知らないでいきなりKotlinって大丈夫なのかなと不安を感じていたのですが、
いきなりKotlinから書き始めてみたところ、いきなりKotlinでも問題なく
むしろKotlinから始めたほうがとっつきやすいと感じました。
JAVAと書き比べてみたところ、Kotlinでのコード量が少なくなり、
型推論やデータクラス等がコードを簡潔の手助けになっていると感じました。

1
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
1
0