Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost
by
Taro Nagasawa
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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アプリケーション用フレームワークも充実