Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlinの特徴として語られる機能の効果を実践での結果から紹介する from サーバーサイド
Search
Takehata Naoto
July 02, 2019
Programming
1
820
Kotlinの特徴として語られる機能の効果を実践での結果から紹介する from サーバーサイド
2019年7月2日(火) 「集まれKotlin好き!Kotlin愛好会 vol.12」の談義資料です。
Takehata Naoto
July 02, 2019
Tweet
Share
More Decks by Takehata Naoto
See All by Takehata Naoto
「2024年版 Kotlin サーバーサイドプログラミング実践開発」の補講 〜O/Rマッパー編〜
n_takehata
2
500
2024年版 Kotlin サーバーサイドプログラミング実践開発
n_takehata
6
4.2k
Server-Side目線で見る、Kotlin Festの楽しみ方
n_takehata
0
360
KotlinとCloud Vision APIで領収書の電子帳簿保存法対応をする
n_takehata
1
490
KotlinConf 2023 現地参加レポート
n_takehata
1
310
サーバーサイドKotlinクイズ
n_takehata
0
170
サーバーサイドでのKotlin Coroutines
n_takehata
0
1.1k
KotlessとDynamoDBで自分のツイートを収集するサーバーレスアプリケーションを作る
n_takehata
0
370
書籍『Kotlin サーバーサイドプログラミング実践開発』のこだわりとおすすめポイント
n_takehata
0
510
Other Decks in Programming
See All in Programming
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
2
460
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
260
創造的活動から切り拓く新たなキャリア 好きから始めてみる夜勤オペレーターからSREへの転身
yjszk
1
130
create_tableをしただけなのに〜囚われのuuid編〜
daisukeshinoku
0
240
HTTP compression in PHP and Symfony apps
dunglas
2
1.7k
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
730
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
バグを見つけた?それAppleに直してもらおう!
uetyo
0
170
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
180
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
Featured
See All Featured
Practical Orchestrator
shlominoach
186
10k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Building Your Own Lightsaber
phodgson
103
6.1k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Designing for Performance
lara
604
68k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Producing Creativity
orderedlist
PRO
341
39k
Documentation Writing (for coders)
carmenintech
66
4.5k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
A Philosophy of Restraint
colly
203
16k
Transcript
Kotlinの特徴として語られる機能の効果を 実践での結果から紹介する from サーバーサイド 2019年7月2日 Kotlin愛好会 vol.12 竹端 尚人
自己紹介
概要 氏名:竹端 尚人 Twitter:@n_takehata 株式会社アプリボット所属 ・サーバーサイドKotlin ・スマートフォンゲーム開発 ・エンジニアは11年ほど
登壇、執筆など ・CEDEC 2018登壇 ・Software Design 2019年2〜4月号で短期連載 ・Swift/Kotlin愛好会で技術書典執筆 https://booth.pm/ja/items/1315478
宣伝 • CEDEC 2019登壇 • Unity C# × gRPC ×
サーバーサイドKotlinに よる次世代のサーバー/クライアント通信 〜ハイ パフォーマンスな通信基盤の開発とMagicOnion によるリアルタイム通信の実現〜 https://cedec.cesa.or.jp/2019/session/detail /s5c9dede391631
今日話すこと
Kotlinの特徴としてよく言われるものたち ・安全 ・Null安全 ・val、var ・コードがシンプル ・型推論 ・データクラス ・スコープ関数 ・Javaからの移行コストが低い ・Javaとの相互互換
・Spring FrameworkのKotlin対応 ・etc…
実践で使うとどう良いのか?
1年半開発した結果にならって話します (サーバーサイド視点)
アジェンダ 1.Null安全 2.変数は基本的にImmutableにできる 3.不要なキーワードの削除 4.Lombokが不要になった 5.まとめ
安全性
コンパイルで防げるエラーが多く 安全性が高まった
1.Null安全Null可、Null不可の不整合がなくなる
Javaの場合 ①引数をNull不可にしている(Lombokを使用) ②Null可の変数を引数に渡して実行している public void execute(Integer id) { createUser(id); }
private void createUser(@NotNull Integer id) { // ・・・ } ① ② 実行時にNullPointerExceptionが発生する
Kotlinの場合 ①引数は?なしなのでNull不可 ②Null可の変数を引数に渡して実行している ① ② コンパイルエラーで気付ける fun execute(id: Int?) {
createUser(id) } private fun createUser(id: Int) { // ・・・ }
実際に使っていて • 大体の変数、引数はNull不可で問題ない • Java(or その他の言語)では意識せずNull可にしていた変数 も、Null不可で良い場合が多い • デフォルトがNull不可になっていることで意識が変わる
2.変数定義は基本的にImmutableにできる
val、varの存在 • Kotlinはval、varで必ず変数のImmutable、Mutableを定義 しないといけない • JavaではデフォルトがMutableで、Immutableにするには finalを付ける必要があった
更新は基本的に オブジェクトのプロパティにすることが多い • IntやStringの変数を直接更新することは少ない • O/RマッパーのEntityクラスなどのオブジェクトを取得して更 新することが多い
val user = selectUser(id) user.name = "hoge" updateUser(user) オブジェクトの取得、更新 ①Userオブジェクトを取得
②nameプロパティを更新 ① ② valで変数定義しても、プロパティの値は書き換えられる (プロパティがvarで定義されていれば) data class User(val id: Int, var name: String)
IntやStringの変数も書き換えないことが多い ①Int型の変数に値を取得 ②オブジェクトのプロパティに設定 ① ② 関数で取得した値を入れて、そのまま使う場合が多い val product: Product =
getProduct(id) val userCount: Int = getUserCount(id) product.userCount = userCount
varを使うパターン
インクリメントしていきたい数値など ①varで合計値の変数を定義 ②ループの中で変数に加算していく ① fun calcAmmount(itemList: List<Item>) { var sumAmmount
= 0 itemList.forEach { if (sumAmmount + it.price > MAX_BUY_AMMOUNT) { return } sumAmmount += it.price } } ②
実際に使っていて • 大体の変数はvalで定義できる(Immutableにできる) • var を使うのは最低限の箇所に留め、基本は val とし変更不 可にするのが安全 •
val、varの存在やCollectionのデフォルトがImmutableなこ とでImmutableで事足りる気付く
Collectionも基本的にImmutable
実際に使っていて • やっぱりListを取得して使うだけで、変更を加えない場合が多 い • Collectionライブラリが優秀なので、変更を加える場合はこち らを使った方が分かりやすい →MutableListを使う機会は少ない
コードがシンプル
コード量(ステップ数)は2割減った
3.不要なキーワードの削除
Javaの場合 public void execute() { User user = new User();
user.setId(1); user.setName("Applibot"); registerUser(user); System.out.println("id=" + user.getId() + "name=" + user.getName()); }
Kotlinの場合 ・デフォルトのアクセス修飾子がpublic ・newキーワードが不要 ・型推論 ・String Template ・セミコロンが不要 ・etc… fun execute()
{ val user = User(1, "Applibot") registerUser(user) println("id=${user.id} name=${user.name}") }
実際に使っていて • 記述量が減ることで、考えることも減り思考がスムーズになっ た • いくらIDEが補完してくれても、記述が必要だと意識はしないと いけない • セミコロンやnewなど、細かいところもバカにならない
4.Lombokが不要になった
@Getter、@Setter
Javaの場合 ①Getterのみ生成 ②Getter、Setter両方を生成 ① public class User { @Getter private
Integer id; @Getter @Setter private String name; } ②
Kotlinの場合 ①Getterのみ生成 ②Getter、Setter両方を生成 ① ② class User { val id:
Int = 0 var name: String = "" }
@Data
Javaの場合 @Data public class User { private Integer id; private
String name; }
Kotlinの場合 data class User(val id: Int, val name: String, var
age: Int) データクラスを使う
@Builder
Javaの場合 @Builder @Data public class User { private Integer id;
private String name; private String profile; private Integer age; } return User().builder() .id(1) .name(”LoveKotlin") .age(30) .build();
Kotlinの場合 data class User(val id: Int, val name: String, val
profile: String = "", val age: Int) return User(id = 1, name = "Applibot", age = 30) デフォルト引数、名前付き引数を使う
Kotlinの場合(別解) val user = User().also { it.id = 1 it.name
= "Applibot" it.age = 30 } ・コンストラクタがない場合(データクラスでない場合等)に使える ・Javaで作られたクラスに対して使う場合にも有効(ORM関連の自動生成クラス等)
実際に使っていて • 記述量が減ることで、考えることも減った • Lombokが不要になり、標準機能で大体のことが実現できる のが大きい
5.まとめ
• 変数は大体Null不可にできる • 変数は大体Immutableにできる • 記述量が少ないとプログラミングがスムーズに • 標準機能でできることが増えた • etc…
https://blog.applibot.co.jp/2019/06/ 20/benefits-of-server-side-kotlin/ 全文はこちらご御覧ください 1年半開発してきて実感したサーバーサイドKotlinのメリット
Kotlinを使っていて良かった!
ご清聴ありがとうございました