torutkのブログ

ソフトウェア・エンジニアのブログ

日本Androidの会 2017年7月定例会「Kotlin & Android Studio 3.0」#jag1707

本日は、日本Androidの会と日本Kotlinユーザーグループ共催の「Kotlin & Android Studio 3.0」に参加してきました。
https://kotlin.connpass.com/event/61903/

開催時間は19:00〜21:00 で、会場はKDDIさんです。

本日のセッションは次の4つです。

  • 「広く浅く語るKotlinの魅力」
  • Android Studio 3.0とKotlin」
  • 「プラットホーム型について〜Kotlinだって間違えるとnullでハマるよ!」
  • FRESH! Kotlin Style Guideline」

その後、Androidの会からのお知らせです。

  • Tangoワーキンググループ活動開始(月次)
  • Android Bazaar and Conference 2017 Autumn開催(10/14予定)

「広く浅く語るKotlinの魅力」(長澤太郎さん)

Kotlin、だいぶ前から存在を聞いていましたが、正式リリースは2016.2と割と最近です。静的型付けオブジェクト指向言語JVM言語の一つ、APL2.0、チェコのJetBrains社が開発しており、Googleと共同でファウンデーション設立で開発基盤は安泰、Javaよりも安全、簡潔で、Javaからの移行は容易、というのが概要です。

この5月に、GoogleAndroid上の正式サポート言語としてKotlinを追加すると発表してから話題となっており、現在は「過度の期待」な状況、Kotlinに取り組んで失敗することもあるようです。拡張関数、演算子オーバーロード、委譲プロパティなどの濫用、Javaの相互互換にハマる、コーディング規約やコードレビューの整備不足などが失敗の原因になるようです。

KotlinのGood Partsとして次を紹介。

  • Extension
  • データクラス
  • Null安全

Extensionは、既存の型にメソッドやプロパティを外から追加できるもの。データクラスは、プロパティだけ記述すればメソッドを自動生成してくれるもの。自動生成されるメソッドは、コンストラクタ、toString、== 演算子、copyなど。
Null安全は、nullの可能性のあるものとないものを厳密に区別し、NotNullな型(例:String)とNullableな型(例:String?)とが別に存在し、String型にString?型は代入できません(コンパイルエラー)。Nullableな型(例:String?)のメソッド呼び出しは必ずnull検査が必要で、if文での検査か、?.(クエスチョンとピリオド)でメソッド呼び出しをします。

Kotlinは文字列中に$thisのように書いて式や変数を埋め込むことができるそうです。現状のJavaでは、+演算子で文字列と式・変数を結合するか、MessageFormatを使うか、printf書式かを使うことになりますが、確かに冗長(面倒)ですね。

エルビス演算子(?:)とか!!演算子にも触れていましたが理解不足です。

あと、セミコロンは不要、といったところでしょうか。
そうそう、本日は、基本的な文法の説明はほとんどなしです。

Android Studio 3.0とKotlin(深見 浩和さん)

Android Studio 3.0は現在Canary版(かなり早期リリース)です。
IntelliJ IDEA 2017.1ベースで、Kotlin正式サポート、プレビュー画面にサンプルデータ表示、フォント指定をXMLで、Device explorerAndroid Profiler、APK Analyzer、エミュレータにplayストア入り、Gradleのdependencies書き方変更、など。JavaコードからKotlinコードへコンバートする機能があり、特にJavaのコードブロックをコピーしKotlinのソースコードにペーストしたときもコンバートが走る、といったところです。

ラムダ式で引数1つだと省略可、式中ではitで参照
コンストラクタ、型宣言行に引数を書ける、2つ目以降はメソッドの様に記述
型はデフォルトではpublic finalなので継承するためにはopenを付けて定義する必要あり。

Kotlinのつらいところとして、暗黙、例えばitを上げていました。なるほど。

プラットホーム型について 〜Kotlinだって間違えるとnullでハマるよ!(室星 亮太さん)

KotlinでもNullPointerExceptionは発生しますよ、JavaAPIを呼ぶときは、Javaでの参照型がプラットホーム型となり、NotNullにもNullableにも代入が可能なためです、という内容です。
Java側で戻り値にアノテーション@NotNullか@Nullableを付けることで、プラットホーム型にはならず適切な型になります。このアノテーションは複数のライブラリが提供するものに対応。

FRESH! Kotlin Style Guideline(荒谷 光さん)

FRESH!というサービスの開発でKotlinを使用、そこでコード規約を作成したとのことです。

セッション資料
https://speakerdeck.com/aakira/fresh-kotlin-styleguide

思想編では、「短く書く」「考える必要のあるコードは汚いコード」がよかったかと。個々のルールは、さすがにKotlinをある程度知っていないと分からないですね。