Afternoon Log

日々のことや、技術的な備忘録を吐き出していくつもり

2017年7月定例会「Kotlin & Android Studio 3.0」参加記

先週月曜にここに行って来ました。
kotlin.connpass.com

こっちでこういうイベントに参加したのは初です。
ちょうどこの日は働き方改革の一環でして、
自宅で作業した後会場へと向かったのでちょっとばかし遅刻してしまいました。

アジェンダ

  1. 広く浅く語るKotlinの魅力
  2. Android Studio 3.0とKotlin
  3. プラットホーム型について ~Kotlinだって間違えるとnullでハマるよ!~
  4. 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型を明記しましょうという話。
太郎さんの表も非常に参考になります。


基本的にはNull許容型で書いていけば回避できるのですが、
Java側で、@NotNull, @Nullableアノテーションをつけて置くと、
非Null型で受け取っても安全に呼び出せます。
これはKotlinが受け取るためってのもありますが、
Java側の可読性というか、考える余地を減らせるので意識していきたいなと思いました。

FRESH! Kotlin Style Guideline

FRESH!_Kotlin_StyleGuide // Speaker Deck
これはコード規約の話。

  • ラムダ式を積極的に使う
  • スコープ関数も積極的に使う
  • 短く書く
    • but, 考えるコードを減らす
  • /.idea/codeStyleSettings.xmlのフォーマッタを使用

etc.

Kotlinのコード規約にはまだ明確なのがなかったはずで、これも一つの例として参考になりました。
if-elseは毎度一行にしようかどうか悩んでいたので、これからは堂々と一行にしますね。
他にもcompanion objectは最初と最後どちらが良いのだろうとか(個人的には最初かな?)、
typealiasによってラムダ式っぽくできるようになるとか、知見が増えた。

スライド中で { println(it) } とあり、他にも (::println) と書けるみたいで、
これは僕の中でまだ後者が理解仕切れていないので前者で書いてしまうのですが
itと示す必要がないので、その分の読むコストが減って良いのかな?って思ったりしました。

色々と参考になった中で、考えるコードを減らすというのは
自分で中々意識出来ていないと思っているので今後そのことも反映できたら良い感じですね。




長くなりましたが、こんな感じに。
次はこちらに行きたいと思います。
kotlin.connpass.com



開発?
まず形にしてから、順次話せたらなと思っています。
土日しか開発しないくせに土日に予定が結構入っているので、少々遅れそう。