KotlinがAndroidの公式言語に加わりました

2017年5月18日、Google I/0 2017 のキーノートにおいてGoogleはAndroidの公式言語にKotlinを追加すると発表しました。ついにKotlinの時代が来ました。誰もがいつかはそうなるんじゃないかと思っていたかもしれませんが、その日は突然でした。 Google I/OではKotlin関連セッションとしてIntroduction to KotlinLife is great and everything will be ok、Kotlin is hereの2つが追加されています。

kotlin-googleio-announce

iOSでは、3年前に発表されたSwiftがモダンで簡潔な開発言語を開発者にもたらしています。Kotlinは、古くからAndroidをサポートしていましたが公式言語ではなく、Googleが作った言語でもないという理由で、開発者に広がる速度がSwiftに比べて非常に遅かったように思います。

Kotlin紹介

Realmニュースでも2年前にAndroidには新しい言語が必要か? KotlinでKotlinを紹介しました。その頃と比べてもKotlinは随分と進歩し、またKotlinを作ったJetBrainsが提供するIntelliJ IDEAをベースとするAndroid StudioがAndroid開発における標準の開発環境になっています。Kotlinは6年前に発表され、すでにKotlin/JVM、Kotlin/JSは、Kotlin/Nativeなどさまざまな環境で動作します。また、Swiftに対して多くの影響を及ぼしたとも言われています。 Kotlin公式ブログによると、Kotlinの目標はフルスタックのWeb開発、AndroidとiOSアプリ、IoTなど、様々なプラットフォームでKotlinのみで開発できるようにすることです。今回の発表後も、Androidのみならず、様々な面で着実に発展することが予想されます。

記事の更新情報を受け取る

Kotlinの利点について、簡潔、安全、多用途、互換性の観点からお話しします。 Javaで開発するよりも飛躍的にコードの量が減り、Null参照に対する安全性が言語レベルで提供されます。また、KotlinはIntelliJ(Android Studio)と強力に統合されています。Android Studio3.0には初めからKotlinのための機能が含まれ、言語とIDEを同じ会社が開発しているため強力なデバッグ機能も提供されます。また、Java->Kotlinの自動変換が強力で、ソースファイル丸ごとの変換だけでなく、JavaコードをKotlinファイルにコピーペーストする際にも自動的に変換が行われます。

RealmのMeetupでRealmの新機能のためのサンプルコードを示すとき、iOS用Swiftコードではわずか数行のコードが、AndroidのためのJavaコードでより多くのコードが必要になってしまうことがある残念に思っていました。Javaが使えなくなるわけではありませんが、今後はKotlinの表現力を生かしたサンプルコードも提供していこうと思います。今回の発表によりKotlinがより多くの開発現場で使われることで、Androidの開発者がより簡潔にコーディングを行え、重要な機能の実装に集中できると思います。

JetBrainsとKotlin

Android Studio、KotlinなどAndroidとの親和性の高さから、GoogleがJetBrainsを買収するのではないかという憶測もありました。しかし、JetBrainsは公式ブログで、Googleによる買収計画は全くなく、他のIDEなどのツールの開発にも影響がないと明らかにしました。また、Kotlinリリースサイクルも、今まで通りAndroidやAndroid Studioとは独立したものとすることを明らかにしています。ただし、Android Studio用のプラグインの開発においては、JetBrainsのKotlin開発チームとGoogleのAndroid Stuidoの開発チームが協力して行うとしています。

Kotlinを開発したJetBrainsは、Googleと一緒にKotlin財団を設立するという発表もおこないました。また、Kotlinカンファレンスが今年11月2日、3日にサンフランシスコで開催されます。これまで以上に多くの関心を呼ぶことは間違いありません。

日本語情報おすすめリンク

日本語情報おすすめ書籍

英語お勧めリンク

Kotlinのコード紹介

Kotlinのnull安全性

var a: String = "Realm” //デフォルトではnonnull
a = null // error
var b: String? = "Realm" // nullableなString型
b = null // ok

もちろんnullableな型の変数を参照するときに問題になる可能性はあるが、以下のようにすることでbnullでない場合にのみ、lengthが参照されます。

b?.length

スマートキャスティング

if (o is RealmObject) {
  return o.isLoaded;
}

oの型がRealmObjectであることを確認した後にアクセスしたコードでは、 oに対して明示的なキャストを行わなくてもRealmObjectとして扱われる。

名前つき引き数

class User(val name: String,
 val age: Int,
 val address: String = "") {
}

val minwoo = User("Minwoo", 20)
val minwoo = User("Minwoo"、age = 20、address = "Gangnam")

関数型プログラミング

listOf(1, 2, 3) // 1, 2, 3 
.map { it * 2 } // 2, 4, 6
.filter { it > 2 } // 4, 6
.forEach { print(it) } // 4, 6 を出力

About the content

This content has been published here with the express permission of the author.


Minwoo Park

Minwoo is a software engineer who loves business.

Leonardo YongUk Kim

Leonardo YongUk Kim is a software developer with extensive experience in mobile and embedded projects, including: several WIPI modules (Korean mobile platform based on Nucleus RTOS), iOS projects, a scene graph engine for Android, an Android tablet, a client utility for black boxes, and some mini games using Cocos2d-x.

4 design patterns for a RESTless mobile integration »

close