Kotlinを使ってみた

Kotlinを使ってみた

Javaを簡潔に記述できるKotlin。

KotlinでHello, World!下記のソースをHello.ktとして保存する。

1
2
3
fun main(args: Array<String>) {
    println("Hello, Kotlin!")
}

コンパイル、および実行。

1
2
3
$ kotlinc -include-runtime -d Hello.jar Hello.kt
$ java -jar Hello.jar
Hello, Kotlin!

javaコマンドで実行できてしまう。素晴らしい。

Kotlinの特徴

  • 行末のセミコロン不要。
  • javaクラスを自由に扱える。
  • コンパイルするとjavaクラスが作成される。
  • -dオプションで実行形式jarを作成することもできる。
  • 拡張子をktsにすれば、Kotlinスクリプトを記述でき、コンパイルなしに実行できる。
  • List、Mapが拡張され、lambda式で簡単にアクセスできる。

jythonの上を行きそう。

Kotlincでコンパイル

1
$ kotlinc -cp %CLASSPATH% -include-runtime -d Hello.jar Hello.kt

Hello.ktをコンパイルし、Hello.jarが作成される。
-include-runtimeを指定しているので、Kotlinのランタイムクラスがjarファイルに含まれる。
ランタイムは1MB程なので含めてよいと思う。
-include-runtimeを指定しなかった場合は、別途kotlin-runtime.jarを配布する必要がある。

kotlinc,kotlinコマンドの-cpは、jarの*指定はできなかった。それぞれのjarを個別に指定する必要がある。
例えば、Oracle.jdbcとCommonsLoggingを利用しているのであれば下記のように指定する必要がある。

1
2
$ CLASSPATH=/mylib/ojdbc6.jar;/mylib/commons-logging.jar
$ kotlinc -cp %CLASSPATH% -include-runtime -d Hello.jar Hello.kt

外部jarに依存しているのであれば、成果物のjarにランタイムを含めずに、上記の場合なら/mylibにKotlinのランタイムを追加すれば良いと思う。javaコマンドはクラスパスの*指定に対応しているので、下記のように実行できる。

1
$ java -cp /mylib/*:Hello.jar HelloKt

コンパイルしたクラスの実行

Kotlinコンパイル環境があるの場合

1
$ kotlin -cp %CLASSPATH%:Hello.jar HelloKt

HelloKtは実行クラス名。Hello.ktはHelloKtクラスとしてコンパイルされている。
kotlinコマンドでは、Kotlinのランタイムが自動的に参照されるので、コンパイル時にランタイムを含める必要はない。

javaの実行環境のみの場合

コンパイル時にkotlinランタイムを含めた場合

外部jarを参照していないのであれば

1
$ java -jar Hello.jar

外部jarを参照しているのであれば、

1
$ java -cp %CLASSPATH%:Hello.jar HelloKt

コンパイル時にkotlinランタイムを含めなかった場合

1
java -cp %CLASSPATH%:Hello.jar:kotlin-runtime.jar HelloKt

jaraの引数に-jarを指定すると、全てのクラスパスは無視されるので、
作成したjarもクラスパスに含めて、メインメソッドのあるクラスを指定する。
Hello.ktはHelloKtクラスとしてコンパイルされる。
Hello.ktにpackage指定されいている場合は、そのパッケージに所属した形でコンパイルされる。

下記のkotlinをHello2.ktとして保存。

1
2
3
4
package my.first
fun main(args: Array<String>) {
  print("Hello.")
}
1
2
3
$ kotlinc -include-runtime -d h.jar Hello2.kt
$ java -cp ./h.jar my.first.Hello2Kt
Hello.

Kotlinスクリプト

kotlinをコンパイルせずに、スクリプトとして実行できる。Kotlinスクリプトの拡張子はktsにしなければならない。

1
kotlinc -script Hello.kts

考察:jythonスクリプトをkotlinに置き換えるべきか

jythonもkotlinもJavaで実装されている。
Javaで実装されているため、Windows、Linux、macを問わず開発/実行できる。
Javaの豊富なライブラリを利用できる点はどちらも同じ。

では、jythonをkotlinに置き換えるべきなのだろうか。

jythonは、pythonのバージョンが2.7で止まっている。
python2.7なので、文字列の扱いがデリケートでる。
ここがとても煩わしい。jythonで色々なタイプの文字が出て来る場合は、
文字列結合も、jythonではなく、java.lang.StrinBuilderやjava.text.MessageFormatを使ったりしている。
kotlinでは、ここはあまり気にしなくて良さそうだ。

しかし、jythonの有利な点として、ファイルI/Oやディレクトリ操作、FTP、メール送信などがpythonとして簡単に記述することができる。
kotlinでも、色々kotlin拡張モジュールがあったり、強力なラムダ式を利用すれば、そこそこ簡単に実装できるようにも思えるが、pythonほどお手軽ではない。

pythonに慣れているために、こう考えてしまうのか。
もう少しkotlinでツールを作ってみよう。

同じタグの記事
同じカテゴリの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA