説明
最近、Kotlin がかわいくて仕方がなくなってきたので、Kolin について自分自身の頭の整理も兼ねてまとめていこうかと思います。
今回は基本中の基本の Hello, World! ができるところまでです。
これを目にしている人達なら当然読めていると思いますが、Kotlin = 「ことりん」です。
ことりんと言ってもμ'sはあまり関係ないです。
でも、ことりんと聞くと、ことりんぱな、と反応する人にオススメの言語だったりなかったり
前提
Kotlin を動かす環境はいろいろと作れますが、ここでは次の環境を前提としています。
項目 | 内容 |
---|---|
OS | MacOS |
Homebrew が使えること | |
JDK | Java8 |
ちなみにJDK はJava6以上なら大丈夫です。
手順
1. Kotlin インストール
1.1. Homebrew でインストール
$ brew install kotlin
インストール作業はこれだけです。
1.2. インストール確認
$ kotlin -version
Kotlin version 1.2.0 (JRE 1.8.0_152-b16)
Kotlin 1.2.0 が入っていることが確認できます。
2. Kotlin 動作確認 - Hello,World!
2.1. Kotlin ファイルの作成
基本に忠実に、Hello,World!を出力してみます。
まず、Kotlin のコードを書くためのファイルを作成します。
$ vim HelloKotlin.kt
Kotlin ファイルの拡張子は、kt とします。
2.2. 関数の作成
作成した HelloKotlin.kt に以下のコードを記述します。
fun main(args: Array<String>) {
println("Hello, Kotlin!")
}
2.2.1. 関数について
Java に慣れ親しんでいると、いきなり関数だけを作成することに違和感を感じる人もいるかもしれません。Java だと必ずファイ毎にクラスを作成して、クラスの中にメソッドを作成していました。
Kotlin は、関数だけでも成立する言語だということをまずは覚えておきましょう。
2.2.2. fun について
main 関数ですが、fun から書き始めています。
この fun が関数を定義するための記述方法です。
fun 関数名(パラメータ: パラメータの型): 戻り値の型 {処理内容}
今回の main 関数の中では、標準出力を行っているのみで、戻り値がありません。Java でいうところの void 型です。Kotlinでは、Unit 型と呼びます。
これは省略可能なので、今回は省略しています。
3. コンパイル&実行
3.1. コンパイルして JAR の作成
kotlinc コマンドを使ってコンパイルを行います。
以下のようにオプションをつけてコンパイルして JARを作ってみます。
$ kotlinc HelloKotlin.kt -include-runtime -d HelloKotlin.jar
$ ls -l
total 1808
-rw-r--r-- 1 shinyay staff 918546 12 7 08:52 HelloKotlin.jar
-rw-r--r-- 1 shinyay staff 62 12 7 08:33 HelloKotlin.kt
JAR ファイルが作成されたことが確認できます。
3.2. 実行
作成されたJARファイルを実行してみます。
$ java -jar HelloKotlin.jar
Hello, Kotlin!
動作していることが確認できました。
3.3. include-runtime について
ところで、コンパイルするときに include-runtime をつけていました。これを外してコンパイルするとどうなるか試してみます。
$ kotlinc HelloKotlin.kt -d HelloKotlin.jar
$ ls -l
total 16
-rw-r--r-- 1 shinyay staff 1160 12 7 09:01 HelloKotlin.jar
-rw-r--r-- 1 shinyay staff 62 12 7 08:33 HelloKotlin.kt
$ java -jar HelloKotlin.jar
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at HelloKotlinKt.main(HelloKotlin.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
include-runtime オプションをつけずに作成したJARファイルでは、ClassNotFoundException が発生します。
Kotlin のランタイムライブラリが見つかっていないのです。
文字通り、include-runtime オプションは、Kotlin のランタイムライブラリをJARに含めるオプションなのです。
include-runtime オプションをつけて作成したJARの中身を見てみます。
$ jar tvf HelloKotlin.jar
82 Thu Dec 07 09:05:20 JST 2017 META-INF/MANIFEST.MF
988 Thu Dec 07 09:05:20 JST 2017 HelloKotlinKt.class
35 Thu Dec 07 09:05:20 JST 2017 META-INF/main.kotlin_module
483 Mon Nov 27 15:49:42 JST 2017 org/jetbrains/annotations/Mutable.class
546 Mon Nov 27 15:49:42 JST 2017 org/jetbrains/annotations/NotNull.class
548 Mon Nov 27 15:49:42 JST 2017 org/jetbrains/annotations/Nullable.class
485 Mon Nov 27 15:49:42 JST 2017 org/jetbrains/annotations/ReadOnly.class
898 Mon Nov 27 15:49:10 JST 2017 kotlin/jvm/internal/CallableReference$NoReceiver.class
3317 Mon Nov 27 15:49:10 JST 2017 kotlin/jvm/internal/CallableReference.class
2625 Mon Nov 27 15:49:10 JST 2017 kotlin/jvm/internal/CollectionToArray.class
337 Mon Nov 27 15:49:10 JST 2017 kotlin/jvm/internal/DefaultConstructorMarker.class
201 Mon Nov 27 15:49:10 JST 2017 kotlin/jvm/internal/FunctionBase.class
:
:
:
Kotlin に関するライブラリが入っている事が確認できます。
まとめ
Kolinのインストールから、Hello, World! がでるところまでできました。
どこまで続くか分からないですが、今後 少しずつ Kotlin をまとめていこうかなと思います。