2017年7月定例会「Kotlin & Android Studio 3.0」参加記
先週月曜にここに行って来ました。
kotlin.connpass.com
こっちでこういうイベントに参加したのは初です。
ちょうどこの日は働き方改革の一環でして、
自宅で作業した後会場へと向かったのでちょっとばかし遅刻してしまいました。
アジェンダ
- 広く浅く語るKotlinの魅力
- Android Studio 3.0とKotlin
- プラットホーム型について ~Kotlinだって間違えるとnullでハマるよ!~
- FRESH! Kotlin Style Guideline
広く浅く語るKotlinの魅力
広く浅く語るKotlinの魅力 // Speaker Deck
題目の通り、まずKotlin自身の紹介をしてから特徴的な機能について。
- Extension
拡張関数と拡張プロパティ、どっちを使えば良いっていうことに関して
言っていた気がしたんですが生憎と聞き逃してしまいました。
OOP的にこれはメソッドとして処理が走るものって感じは拡張関数で、
これは内部的に持っていそうならプロパティなのでしょうか。
- dataクラス
色々よしなにメソッドを実装してくれる便利なやつ
分解もお手軽にできるのをこの機会に知りました。
data class Person(val id: Int = 0, val name: String = "name") val my = Person(name = "muratomo") (i, n) = my println(i) // id = 0 println(n) // name = muratomo (_, name) = my
この分解、component1()
, component2()
メソッドが呼ばれて、各変数に代入されています。
また、アンダースコアによって無視することもできるみたいです。
- Kotlinのgoodパーツ
null安全についてや、スマートキャスト、スコープ関数などについて述べられていました。
そしてこれらのkotlinの良さも、
あちこちで乱用してしまうと逆に可読性の低下を招いてしまう(apply
などを呼んで更にその中でも呼ぶとか)ので注意とか。
そして現在Javaとの100%互換ですが、相互運用するし始めるとどうなるかとか。
(後々出てくるプラットフォーム型についての正しい運用)
ちょっと色々書きたいのもあるのですが、一先ずこの辺で。
Android Studio 3.0とKotlin
20170618 Google I/O報告会in福岡
確か資料はこれと同じだったかと。
Android Studio 3.0で追加された機能を紹介し、動画でもってkotlinで記述するというのをやっていました。
- サンプルデータ表示
- XMLでフォントを指定できるようになった
- gradleの書き方がcompileから変更になった
etc.
Kotlinの各機能や書き方についてもありました。
JavaからKotlinへのコンバートは、Android Studio に任せればよしなにしてくれるっぽい。
逆にKotlinからJavaへは、まだちょっとデフォルトだと微妙っぽい。
そして、Kotlinにはコードを短くする工夫があるんですが、
kotlinでのit
とかは、
それが何を指しているのか、その型がなんなのかを知るのは困難ではないかと。
暗黙があり過ぎると、コードの理解に苦しむのでそこは課題点であると。
これは確かに僕もちょっと気になるところですね。
プラットホーム型について
プラットホーム型について ~Kotlinだって間違えるとnullでハマるよ!~ // Speaker Deck
Kotlinでもぬるぽにはなる!
ぬるぽにはなっちゃう!
というお話です。
まず、プラットフォーム型は書いてある通り、Javaから返ってくる型です。
Javaから返ってくるので、nullの可能性は全てにあって、それを適切に受け取らないといけない。
中を見て貰うと分かるのですが、
結論として、Kotlinには型推論があって型を省略できるのですが
Null許容型、非Null型を明記しましょうという話。
太郎さんの表も非常に参考になります。
厄介なプラットフォーム型を受ける変数の型をどうするかによって変わる挙動を表にまとめた。 #Kotlin pic.twitter.com/MLw5ifIxCY
— たろう (@ngsw_taro) 2017年7月1日
基本的にはNull許容型で書いていけば回避できるのですが、
Java側で、@NotNull
, @Nullable
のアノテーションをつけて置くと、
非Null型で受け取っても安全に呼び出せます。
これはKotlinが受け取るためってのもありますが、
Java側の可読性というか、考える余地を減らせるので意識していきたいなと思いました。
FRESH! Kotlin Style Guideline
FRESH!_Kotlin_StyleGuide // Speaker Deck
これはコード規約の話。
etc.
Kotlinのコード規約にはまだ明確なのがなかったはずで、これも一つの例として参考になりました。
if-else
は毎度一行にしようかどうか悩んでいたので、これからは堂々と一行にしますね。
他にもcompanion object
は最初と最後どちらが良いのだろうとか(個人的には最初かな?)、
typealias
によってラムダ式っぽくできるようになるとか、知見が増えた。
スライド中で { println(it) }
とあり、他にも (::println)
と書けるみたいで、
これは僕の中でまだ後者が理解仕切れていないので前者で書いてしまうのですが
itと示す必要がないので、その分の読むコストが減って良いのかな?って思ったりしました。
色々と参考になった中で、考えるコードを減らすというのは
自分で中々意識出来ていないと思っているので今後そのことも反映できたら良い感じですね。
長くなりましたが、こんな感じに。
次はこちらに行きたいと思います。
kotlin.connpass.com
開発?
まず形にしてから、順次話せたらなと思っています。
土日しか開発しないくせに土日に予定が結構入っているので、少々遅れそう。