Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost
by
Taro Nagasawa
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
2018-12-13 Developers Boost 長澤太郎 Androidからサーバーサイドまで! プログラミング言語 Kotlin の魅力
Slide 2
Slide 2 text
長澤 太郎 ● @ngsw_taro ● Ubie株式会社 ソフトウェアエンジニア ● 日本Kotlinユーザグループ代表
Slide 3
Slide 3 text
「世界中の人々を適切な医療に案内する」
Slide 4
Slide 4 text
Kotlin
Slide 5
Slide 5 text
Kotlinとは ● JetBrainsにより開発されているプログラミング言語 ○ IntelliJ IDEAの強力な機能を利用可能 ● 静的型付けオブジェクト指向言語 ○ 言語の種類としてはJavaと同じ ● JVMやAndroidを主要なターゲットとして登場したが、 JavaScriptやNativeも重要なターゲットとしている ● 2011年に発表され、安定版が2016年にリリースされた
Slide 6
Slide 6 text
1. Kotlinのここがスゴイ! 2. KotlinでAndroid開発 3. KotlinでWebアプリ開発
Slide 7
Slide 7 text
本日紹介する Kotlinのスゴイところ ● 読み書きが容易な文法 ● 演算子オーバロード ● 拡張関数
Slide 8
Slide 8 text
読み書きが容易な文法: クラスとプロパティ class 分数(val 分子: Int, val 分母: Int) val half = 分数(1, 2) println(half.分子) // 1と表示される println(half.分母) // 2と表示される
Slide 9
Slide 9 text
読み書きが容易な文法: 文字列テンプレート class 分数(val 分子: Int, val 分母: Int) { override fun toString(): String { return "${分子}/${分母}" } } val half = 分数(1, 2) println(half) // 「1/2」と表示される
Slide 10
Slide 10 text
演算子オーバロード 独自クラスにも演算子を適用可能 class 分数(val 分子: Int, val 分母: Int) { operator fun plus(that: 分数): 分数 { return 分数( 分子 * that.分母 + that.分子 * 分母, 分母 * that.分母 ) } ...略... val sum = 分数(1, 2) + 分数(1, 3) println(sum) 「5/6」と表示される
Slide 11
Slide 11 text
拡張関数 既存の型にメソッドを追加しているように見せる operator fun Int.plus(r: 分数): 分数 { return 分数( this * r.分母 + r.分子, r.分母 ) } val sum = 2 + 分数(1, 5) println(sum) 「11/5」と表示される
Slide 12
Slide 12 text
1. Kotlinのここがスゴイ! 2. KotlinでAndroid開発 3. KotlinでWebアプリ開発
Slide 13
Slide 13 text
Android開発におけるKotlinのスゴイところ ● Javaとの相互運用性 ● @Percelize ● コルーチン
Slide 14
Slide 14 text
Javaとの相互運用性: 例えばSAM変換 button.setOnClickListener(object: OnClickListener { override fun onClick(view: View) { /* クリック時の処理 */ } }) button.setOnClickListener { /* クリック時の処理 */ }
Slide 15
Slide 15 text
@Percelize Percelable対応クラスを自動実装してくれる仕組み @Percelize class User( val id: Long, val name: String ): Percelable ● Androidでオブジェクトをシリアライズする仕組み ● 仕様に沿った実装を提供する必要があり、冗長になりがち ● JavaにはあるがKotlinには存在しない概念が必要 ○ 回避策はあるがあまりスマートにならない
Slide 16
Slide 16 text
コルーチン 特に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) }
Slide 17
Slide 17 text
1. Kotlinのここがスゴイ! 2. KotlinでAndroid開発 3. KotlinでWebアプリ開発
Slide 18
Slide 18 text
Webアプリ開発におけるKotlinのスゴイところ ● Spring Framework 対応 ● Kotlin向けWAF Ktor
Slide 19
Slide 19 text
Spring Bootプロジェクトの雛形作成 Webサイト または IntelliJ IDEA で 簡単にプロジェクト雛形を作 成可能
Slide 20
Slide 20 text
アノテーションベースのいつもの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() }
Slide 21
Slide 21 text
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 設定
Slide 22
Slide 22 text
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) }
Slide 23
Slide 23 text
まとめ ● KotlinはJetBrainsに開発されている若い言語 ● 書いて楽しい!読んで快適!実践主義な文法 ● 相互運用性が高く、既存のJava資産を活かせる ● コルーチンにより、簡単なコードで軽量スレッド ● Webアプリケーション用フレームワークも充実