- はじめに
- JDKをインストールする
- SDK manをインストールする
- バージョン確認
- KotlinでHello World
- Kotlinはclass定義が必要ない?
- ktファイルをスクリプトとして実行する
- KotlinのREPLを使用する
- 終わりに
- 参考
はじめに
所要でAndroidアプリを作る方法を知らねばならなくなったので、ここ最近のトレンドであるKotlinで書こうと思い、まずは遊ぶための準備をしてみた。
JDKをインストールする
まずJDKをインストール(JREではだめかもしれない)
終わったらKotlinのcompilerをgithubからインストールする。
上で言えば、compiler-1.3-31.zip
という名前のもの。
が、実はKotlinをインストールする方法は色々あり、homebrewからでもインストールできたりするが、今の所は以下に示すSDK manを使用することがベストだと思う。
SDKmanはJDK関連のパッケージマネージャと言えると思う。他にもScalaやJDKのようなJVM系言語のコンパイラ、またJVM系言語のビルドツールであるgradleやsbtなどもこのツールで管理ができるようだ。
SDK manをインストールする
SDKman 自体はcurlからインストールできる。以下のコマンドをターミナルから実行することでインストール自体は完了する。
$ curl -s "https://get.sdkman.io" | bash
補完も使用したいので、以下のコマンドで補完機能を有効にする。
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
インストール後は、sdk
でエイリアスがはられているので、sdkコマンドでkotlinをインストールできる。
sdk install kotlin [version]
バージョンは指定できるが、しなくてもよい。(たしか安定版がインストールされるはず)
バージョン確認
~ $ kotlin -version Kotlin version 1.3.31-release-197 (JRE 1.8.0_222-b10)
KotlinでHello World
ktファイルの作成
hello.kt
を作成し、以下のようにスクリプトを書く。
fun main(args: Array<String>){ println("Hello, World") }
なんとなくJavaっぽいので読めると思うが、これがKotlinにおける関数(エントリポイント)となる。
ktファイルの実行
以下のようにjarファイルを生成し、javaコマンドで実行する。
$ kotlinc src/hello.kt -include-runtime -d jar/hello.jar $ java -jar jar/hello.jar Hello, World
とりあえず出力はできた。
Kotlinはclass定義が必要ない?
kotlinはjava,scalaと異なりclass定義をせずに動作するようだ… 何が起きているのかJVMバイトコードから探ってみる。 *.ktと同一のフォルダに移動してcompileを実行し、classファイルを作成する。
$ kotolinc hello.kt $ ls HelloKt.class hello.kt
以下のコマンドでclassファイルを覗けるようなので覗いてみる。
$ javap -c HelloKt.class Compiled from "hello.kt" public final class HelloKt { public static final void main(java.lang.String[]); Code: 0: aload_0 1: ldc #9 // String args 3: invokestatic #15 // Method kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V 6: ldc #17 // String Hello, World 8: astore_1 9: iconst_0 10: istore_2 11: getstatic #23 // Field java/lang/System.out:Ljava/io/PrintStream; 14: aload_1 15: invokevirtual #29 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V 18: return }
結果、JVMで実行できる形にcompileされているのはわかるが、やはりktファイルそのままでは互換性がない。 kotlinのランタイムをincludeするのもこれが理由らしい。 なお、kotlin専用にライブラリを使用する場合はわざわざincludeする必要はない。
ktファイルをスクリプトとして実行する
前節でjavaとの互換性を考慮する必要がないのであればkotlinランタイムをincludeする必要がないと記載したように、jarファイルを生成せずにそのまま実行することも可能である。
例えばhello.kts
でファイルを作成し、kotlinc -script hello.kts
でスクリプト言語みたく簡単に実行が可能。
KotlinのREPLを使用する
REPLを使ってみる。kotlinc-jvmで簡単に使うことができる。 一応-cpオプションでクラスパスを指定した状態で実行することも可能例えば以下のような感じ。
$ kotlinc-jvm -cp joda-time-2.9.4/joda-time-2.9.4.jar Welcome to Kotlin version 1.1-M04 (JRE 1.8.0_66-internal-b17)Type :help for help, :quit for quit >>> import org.joda.time.DateTime >>> DateTime.now()2016-08-25T22:53:41.017+01:00
終わりに
ひとまず基本のランタイムの使い方はわかった。 今後は文法の勉強をScalaと並行して実施していきたい。(この際Javaについてもちゃんと学びなおしたほうが色々と得られるものがあるかもしれない。)
参考

- 作者: Stephen Samuel,Stefan Bocutiu
- 出版社/メーカー: Packt Publishing
- 発売日: 2019/05/29
- メディア: ペーパーバック
- この商品を含むブログを見る