Cwらぼっちゃ - IT技術研究ノート -

IT技術に関する記事を掲載します。

Kotlin(ことりん)

Kotlinって?

Kotlinとは JetBrains 社が2011年ごろに発表したプログラミング言語で、 JVM上で動作し、Javaと相互利用可能なオブジェクト指向型言語です。

特徴

  • JVM上で動作する Kotlinファイル(.kt)はコンパイルするとクラスファイル(.class)が生成されるため、 Javaと同様にJVM上で動作可能となっています。

  • Javaと相互利用可能 Kotlin以外にScalaなど相互利用可能な言語が存在しますが、 公式サイト上で「Javaと完全に相互運用可能」をうたっているため、 より安全に利用することができます。

  • 静的型付けのオブジェクト指向で、静的なnull安全が保証 JavaでありがちなNullPointerExceptionを未然に防ぐことができます。

つまり、ソースコードがKotlinでもJavaでも、JVM上は同じクラスファイルを読み込むため、 どちらからでも相互に呼び出せたりできます。

2017年にAndroid公式開発言語に追加され、知名度が上がってきており、 Java有償化に伴い(Android開発では特に)Kotlinでの開発が加速しますし、 JVMを流用できるため、言語の切り替えなどの需要が今後高まってくることと思います。

Javaとの比較

今回は初歩的な以下の内容をJavaと比較しながら解説していきます。

文法の違い

Java

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

Kotlin

fun main(args: Array<String>) {
    println("Hello, world!")
}

main関数のためのクラスの作成は不要です。

printlnはクラスに属するメソッドでなく、クラスに属さない関数として実装します。

関数=staticメソッドと同義なので、staticの記述も不要になります。

デフォルトがpublicため、publicの記述も不要になります。

文法の末尾の;も不要です。

変数宣言

Java

String s = "変数";
final String f = "定数";

Kotlin

var s: String = "変数"
val f: String = "定数"
var s1 = "型推論変数"
val f1 = "型推論定数"

finalはval 通常の変数はvar で宣言します。

var valが増えたことにより、タイピング数が増えることが懸念されますが、 JavaScriptと同様に型推論が可能のため、var val の宣言が必要となってきます。

Java

int i = 1;
final boolean b = true;
String s = Integer.toString(i); // int→String

Kotlin

var i: Int = 1
val b: Boolean = true
var s = i.toString() // Int→String

Javaでプリミティブ型として扱っているint,double,booleanなどについても、Kotlinではクラスとして振る舞います。

クラスとして振る舞うため、メソッドを呼ぶことができます。

[i: Int = 1]と書くことでオートボクシングしているように見えますが、 Kotlin内部ではプリミティブとして扱われるため、パフォーマンスの心配はありません。

if文

Java

// if文
String s;
if (i < 10) {
    s = "10より下";
} else {
    s = "10以上";
}
// 3項演算子
String s = i < 10 ? "10より下" : "10以上";

Kotlin

// if文
var s:String
if (i < 10) {
    s = "10より下";
} else {
    s = "10以上";
}
// 式の値を直接代入
var s = if (i < 10) {
    "10より下";
} else {
    "10以上";
}
// 3項演算子のような記述のif文
var s = if (i < 10) "10より下" else "10以上"

基本的な部分の記述方法に大きな違いはありません。

式の値を直接変数に代入することが可能です。

代わりに3項演算子がKotlinにはなく、if文で代用することになります。

while

Javaと同じため、割愛します。

for

Java

// for文
for (int i = 0; i < 100; i++) {
    System.out.println(i);
}
// 拡張for文
int numbers[] = {1, 2, 3, ....};
for (int num : numbers) {
    System.out.println(num);
}

Kotlin

// for文
for (i in 0 until 100) {
    println(i)
}
// 拡張for文
for (num in numbers) {
    println(num)
}

KotlinにはJavaでいう拡張for文しかありません。

: の代わりに in を利用します。

Javaでいうfor文相当の利用したい場合の記述も載せています。

この until は特殊構文ではなく、ただのメソッド[0.until(100)]と同じです。

Kotlinでは + * のような二項演算子と同じような中置記法のメソッドを作ることができます。

個人的意見ですが、中置記法のメソッドはかなり使い勝手がよさそうなメソッドですので、 ぜひ、次回記載時にもう少し詳細に紹介できればと思います。

開発環境

自分のマシンにインストールする方法も他サイトで公開されていますが、 ここまでの部分をお試しでやってみたい方にお勧めしたいのが、 以下のサイトです。 https://try.kotlinlang.org/try.kotlinlang.org

一切の準備が不要でサイト上でKotlinを体験できます。 興味を持った方は是非お試しください。

終わりに

今回は初歩的な部分までの記事となりますが、 皆さんが一番気になるインストールからコンパイルまでとJavaとの互換性など、 次回掲載時に載せたいと思います。

ここで皆さんがやる気になるおまじない記事を一つ 少しでも興味を持っていただければ、ぜひ触れて楽しんでみてください。

Kotlinの認知度はまだまだ低いため、開発現場で使用される機会は少ない状況です。

f:id:CwLab:20190725233015p:plain
プログラミング言語のランキング
lanchesters.site

しかし、言語別の年収を見るとKotlinが上位に食い込んできていることがわかると思います。

f:id:CwLab:20190725233120p:plain
プログラミング言語別年収ランキング
lanchesters.site

qiita.com