Kotlinを使ってみた
Javaを簡潔に記述できるKotlin。
KotlinでHello, World!下記のソースをHello.ktとして保存する。
fun main(args: Array
println("Hello, Kotlin!")
}
コンパイル、および実行。
$ 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でコンパイル
$ 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を利用しているのであれば下記のように指定する必要がある。
$ CLASSPATH=/mylib/ojdbc6.jar;/mylib/commons-logging.jar
$ kotlinc -cp %CLASSPATH% -include-runtime -d Hello.jar Hello.kt
外部jarに依存しているのであれば、成果物のjarにランタイムを含めずに、上記の場合なら/mylibにKotlinのランタイムを追加すれば良いと思う。javaコマンドはクラスパスの*指定に対応しているので、下記のように実行できる。
$ java -cp /mylib/*:Hello.jar HelloKt
コンパイルしたクラスの実行
Kotlinコンパイル環境があるの場合
$ kotlin -cp %CLASSPATH%:Hello.jar HelloKt
HelloKtは実行クラス名。Hello.ktはHelloKtクラスとしてコンパイルされている。
kotlinコマンドでは、Kotlinのランタイムが自動的に参照されるので、コンパイル時にランタイムを含める必要はない。
javaの実行環境のみの場合
コンパイル時にkotlinランタイムを含めた場合
外部jarを参照していないのであれば
$ java -jar Hello.jar
外部jarを参照しているのであれば、
$ java -cp %CLASSPATH%:Hello.jar HelloKt
コンパイル時にkotlinランタイムを含めなかった場合
java -cp %CLASSPATH%:Hello.jar:kotlin-runtime.jar HelloKt
jaraの引数に-jarを指定すると、全てのクラスパスは無視されるので、
作成したjarもクラスパスに含めて、メインメソッドのあるクラスを指定する。
Hello.ktはHelloKtクラスとしてコンパイルされる。
Hello.ktにpackage指定されいている場合は、そのパッケージに所属した形でコンパイルされる。
下記のkotlinをHello2.ktとして保存。
package my.first
fun main(args: Array
print("Hello.")
}
$ kotlinc -include-runtime -d h.jar Hello2.kt
$ java -cp ./h.jar my.first.Hello2Kt
Hello.
Kotlinスクリプト
kotlinをコンパイルせずに、スクリプトとして実行できる。Kotlinスクリプトの拡張子はktsにしなければならない。
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でツールを作ってみよう。
- EclipseLinkでJPA
- eclipseの良く使うショートカットキー
- eclipseデフォルトの文字コード
- itext5でPDFを暗号化する
- Java DateFormat
- Java8で指定回数繰り返し
- Java9でJAXB
- JavaでZip圧縮
- javaでイメージフォーマット変換
- javaでダミー画像作成
コメントを残す