【集まれKotlin好き!Kotlin愛好会 vol1】に行ってきました

【集まれ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 にしていくかっていうライブコーディングをやっていて

そのコードの書き出しを自分でもやってみたので、そういう発表。