Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost

Taro Nagasawa
December 15, 2018

Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost

Developers Boots ( https://event.shoeisha.jp/devboost/20181215 )で発表したスライドです。

Taro Nagasawa

December 15, 2018
Tweet

More Decks by Taro Nagasawa

Other Decks in Programming

Transcript

  1. 2018-12-13
    Developers Boost
    長澤太郎
    Androidからサーバーサイドまで!
    プログラミング言語
    Kotlin の魅力

    View full-size slide

  2. 長澤 太郎
    ● @ngsw_taro
    ● Ubie株式会社 ソフトウェアエンジニア
    ● 日本Kotlinユーザグループ代表

    View full-size slide

  3. 「世界中の人々を適切な医療に案内する」

    View full-size slide

  4. Kotlinとは
    ● JetBrainsにより開発されているプログラミング言語
    ○ IntelliJ IDEAの強力な機能を利用可能
    ● 静的型付けオブジェクト指向言語
    ○ 言語の種類としてはJavaと同じ
    ● JVMやAndroidを主要なターゲットとして登場したが、
    JavaScriptやNativeも重要なターゲットとしている
    ● 2011年に発表され、安定版が2016年にリリースされた

    View full-size slide

  5. 1. Kotlinのここがスゴイ!
    2. KotlinでAndroid開発
    3. KotlinでWebアプリ開発

    View full-size slide

  6. 本日紹介する Kotlinのスゴイところ
    ● 読み書きが容易な文法
    ● 演算子オーバロード
    ● 拡張関数

    View full-size slide

  7. 読み書きが容易な文法: クラスとプロパティ
    class 分数(val 分子: Int, val 分母: Int)
    val half = 分数(1, 2)
    println(half.分子) // 1と表示される
    println(half.分母) // 2と表示される

    View full-size slide

  8. 読み書きが容易な文法: 文字列テンプレート
    class 分数(val 分子: Int, val 分母: Int) {
    override fun toString(): String {
    return "${分子}/${分母}"
    }
    }
    val half = 分数(1, 2)
    println(half) // 「1/2」と表示される

    View full-size slide

  9. 演算子オーバロード 独自クラスにも演算子を適用可能
    class 分数(val 分子: Int, val 分母: Int) {
    operator fun plus(that: 分数): 分数 {
    return 分数(
    分子 * that.分母 + that.分子 * 分母,
    分母 * that.分母
    )
    }
    ...略...
    val sum = 分数(1, 2) + 分数(1, 3)
    println(sum) 「5/6」と表示される

    View full-size slide

  10. 拡張関数 既存の型にメソッドを追加しているように見せる
    operator fun Int.plus(r: 分数): 分数 {
    return 分数(
    this * r.分母 + r.分子,
    r.分母
    )
    }
    val sum = 2 + 分数(1, 5)
    println(sum) 「11/5」と表示される

    View full-size slide

  11. 1. Kotlinのここがスゴイ!
    2. KotlinでAndroid開発
    3. KotlinでWebアプリ開発

    View full-size slide

  12. Android開発におけるKotlinのスゴイところ
    ● Javaとの相互運用性
    ● @Percelize
    ● コルーチン

    View full-size slide

  13. Javaとの相互運用性: 例えばSAM変換
    button.setOnClickListener(object: OnClickListener {
    override fun onClick(view: View) {
    /* クリック時の処理 */
    }
    })
    button.setOnClickListener {
    /* クリック時の処理 */
    }

    View full-size slide

  14. @Percelize Percelable対応クラスを自動実装してくれる仕組み
    @Percelize
    class User(
    val id: Long,
    val name: String
    ): Percelable
    ● Androidでオブジェクトをシリアライズする仕組み
    ● 仕様に沿った実装を提供する必要があり、冗長になりがち
    ● JavaにはあるがKotlinには存在しない概念が必要
    ○ 回避策はあるがあまりスマートにならない

    View full-size slide

  15. コルーチン 特にasync/awaitによる非同期処理
    // コールバック方式
    api.getFoo { foo ->
    api.getBar(foo) { bar ->
    show(bar)
    }
    }
    // コルーチン
    GlobalScope.launch(Dispatchers.Main) {
    val foo = async { api.getFoo() }.await()
    val bar = async { api.getBar(foo) }.await()
    show(bar)
    }

    View full-size slide

  16. 1. Kotlinのここがスゴイ!
    2. KotlinでAndroid開発
    3. KotlinでWebアプリ開発

    View full-size slide

  17. Webアプリ開発におけるKotlinのスゴイところ
    ● Spring Framework 対応
    ● Kotlin向けWAF Ktor

    View full-size slide

  18. Spring Bootプロジェクトの雛形作成
    Webサイト
    または IntelliJ IDEA で
    簡単にプロジェクト雛形を作
    成可能

    View full-size slide

  19. アノテーションベースのいつものSpring
    @SpringBootApplication
    class DemoApplication
    fun main(args: Array) {
    runApplication(*args)
    }
    @Service
    class HelloWorldService {
    fun helloWorld(): String = "Hello, world!"
    }
    @RestController
    class HelloWorldController(val helloWorldService: HelloWorldService) {
    @GetMapping("/hello-world")
    fun helloWorld(): String = helloWorldService.helloWorld()
    }

    View full-size slide

  20. KotlinDSLによるDIとルーティング設定も
    fun main(args: Array) {
    SpringApplicationBuilder()
    .sources(DemoApplication::class.java)
    .initializers(beans {
    bean { HelloWorldService() }
    bean { HelloWorldController(ref()) }
    bean {
    router {
    GET("/hello-world") {
    ref().helloWorld()
    }
    }
    }
    })
    .run(*args)
    }
    Bean
    登録
    routing
    設定

    View full-size slide

  21. Kotlin向けWebアプリフレームワーク Ktor
    ● https://github.com/ktorio/ktor
    ● JetBrainsにより開発
    ● 先日 1.0.0がリリースされた(現在 1.0.1)
    ● いわゆるマイクロ・フレームワーク
    ● Kotlin DSLによるルーティング設定
    ● ノンブロッキング、コルーチン対応
    fun main(args: Array) {
    embeddedServer(Netty, 8080) {
    routing {
    get("/") {
    call.respondText("Hello, world!", ContentType.Text.Html)
    }
    }
    }.start(wait = true)
    }

    View full-size slide

  22. まとめ
    ● KotlinはJetBrainsに開発されている若い言語
    ● 書いて楽しい!読んで快適!実践主義な文法
    ● 相互運用性が高く、既存のJava資産を活かせる
    ● コルーチンにより、簡単なコードで軽量スレッド
    ● Webアプリケーション用フレームワークも充実

    View full-size slide