【集まれKotlin好き!Kotlin愛好会 vol1】
https://love-kotlin.connpass.com/event/86390/
に行ってきたので、そのときのレポート
談義: NaotoTakehataさん「サーバーサイドKotlinとの邂逅」
以下、談義を聴きながらのメモ
kotlin導入のきっかけ
Kotlin は Android のイメージがまだ強いが、なぜサーバーサイドで使おうと思ったか?
従来、 Java(spring) で開発をしていた。
開発メンバーから新しい言語にチャレンジしたいという要望があった。
リスクと葛藤
- Java の資産がいっぱいある
- 作り直す時間
- 導入後に廃れたらどうしよう
- Kotlin できる人材が少ない
kotlinのいいところ
Java からの移行がしやすい。
- Kotlin で Spring の使用が可能
- 過去に使っていたライブラリの活用も可能
- 部分的にjavaを残すことも可能
- コードの変換が可能
Java to Kotlin
Android Studio の機能で、コードの変換が可能
最初から自分で書き直すよりは、コストがかからない。
結果、Java から Kotlinに移行して、その他(ライブラリなど)はそのまま使えている。
構文の形だけkotlinに書き換えるくらいでいける。
Kotinはサーバーサイドでも十分使える
Javaを使って入れば移行コストは比較的低い
Kotlinはモダンで良い言語
宣伝
「てっくぼっと!」というエンジニアブログをやっていて、
そこで Spring と Kotlin の話を書いていたりするので読んでね。
談義: AtsukoFukuiさん「こんな時どう書くの? 逆引きKotlin入門」
資料
今回のゴールは Kotlin 描き始めたい初心者が Kotlin よさそうって思えるようになることだよ。
以下、談義を聴きながらのメモ
変数
変数の宣言は var , val がある
var はmutable
val はimutable
型推論ができるので、型を書かなくても変数宣言できるよ!
オプショナルが使える。
null を許容する変数には、変数の末尾に ? をつける
null を意識するようになるので、ぬるぽで落ちることが少なくなるよ!
変数は class に属する必要がない。つまり、第1級オブジェクトとして宣言できる。
定数には const
関数
fun で関数がかける。
デフォルト引数と名前付き引数をサポートしている。
条件式
if文
Kotlin において if は式。文ではない。
つまり、値を返すことができる。
なので、if 文の中に値をそのまま書けば、それが return される。
例えば、
val max = if (a > b) {
a
} else {
b
}
のように。
三項演算子はつかえないが、エルビス演算子が使える。
エルビス演算子の名前の由来は「?:」という記号を横からみると
エルビスプレスリーに似ていることから付いた名前だよ!
null チェックは、スコープ関数とオプショナルの組み合わせがよく使われる。
when
if 同様に when も式
whenの後ろの()の値が比較の対象になる。
when(point) {
in 0..10 -> User.gold
else -> User.other
}
みたいにかける。
()を省略してもよい。
when {
point in 0..10 -> User.gold
score in 10..20 -> User.Silver
}
のように、違う値を比較することもできる。
まとめ
kotlinはかわいい!
談義: Paniniさん「Convert Java file to Kotlin file ⌥⇧⌘K」
資料
以下、談義を聴きながらのメモ
android studioで、Java file を Kotlin にconvertすることができる
90%くらいはちゃんと動く。
Java で書いたコードは自分で意図は理解しているので
あとはコンバートしてくれれば Kotlin がかける!
ただ、Java で書いたコードを変換してくれているだけなので、微修正は必要。
ぬるぽが起こるところは Kotlin でも起こるので
!!が付いていることがある。
その場合は?をつけると、その値が評価されなくなるので良い。
ただ、評価されなくなるのも困るので、
ちゃんと何か値が代入されるよってことで
lateinit 修飾子をつける。
そしたら ? もいらない。
ただ、初期化の段階で入れる予定の初期値をちゃんといれたい。
だが、onCreate 内で初期化している
そんな場合は、lazyを使えば遅延初期化で初期化ができる。
談義: takahiaさん「KotlinでRealmを扱う」
資料
以下、談義を聴きながらのメモ
Realm とは、Android や ios で使われる、簡易的なDB
登壇者の方は毎回、
「トランザクションの管理と CRUD の実装は、なんで面倒くさいんだろう。」
と思っていた。
Spring Boot は
1個のアノテーションでトランザクション管理ができる。
共通の interface で Crud の実装ができる
まとめ
Realm の transaction 管理は inline で定義して共通化する。
Realm の基本的な CRUD は abstract class で定義して共通化する。
談義: miho.sasakiさん「How to KotlinのセッションからKotlinらしい表現を学ぶ」
資料
Google I/O に行ってきて、
Java っぽいコードをどうやって Kotlin にしていくかっていうライブコーディングをやっていて
そのコードの書き出しを自分でもやってみたので、そういう発表。