1. KenjiOtsuka

    Posted

    KenjiOtsuka
Changes in title
+Kotlin CLI の使い方
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,138 @@
+Kotlin CLI の使い方
+
+## スクリプトを実行する場合
+
+拡張子 `kts` のファイルを作って実行します。 拡張子が `kts` でない場合は、中身の如何にかかわらず実行してくれません (`error: source entry is not a Kotlin file` とエラーが出ます)。
+
+```
+kotlinc -script sample.kts
+```
+
+このとき、 `sample.kts` は `main` がなくても実行できます。
+
+### コード例
+
+```
+println("Hello World!")
+```
+
+## ファイルをコンパイルする
+
+### JVM コンパイル
+
+```
+kotlinc Sample.kt
+```
+
+この場合、 `SampleKt.class` が生成されます。
+
+```
+kotlinc Sample.kt -include-runtime -d Sample.jar
+```
+
+このようにすると JAR が作成されます。 出力された `Sample.jar` を次のようにして実行します。
+
+```
+kotlin Sample.jar
+```
+
+または
+
+```
+java -jar Sample.jar
+```
+
+### JS コンパイル
+
+```
+kotlinc-js Sample.kt -output sample.js
+```
+
+javascript ファイル `sample.js` が出力されます。
+
+#### Kotlin DCE JS
+
+DCE とは dead code elimination のことで、 使われていないコードは javascript のファイルをでっかくするだけなので消しましょうというものです。 (参考: https://kotlinlang.org/docs/reference/javascript-dce.html)
+
+例えば次のように `Hello.kt` を作成します。
+
+```
+fun main(vararg args: String) {
+ println("Kotlin")
+}
+
+fun a() {
+ println(1)
+}
+```
+
+見ての通り 関数 `a` は使われていません。 これを次のように JS Compile をします。
+
+```
+kotlinc-js Hello.kt -output hello.js
+```
+
+すると次のような `hello.js` が作成されます。
+
+```
+if (typeof kotlin === 'undefined') {
+ throw new Error("Error loading module 'hello'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'hello'.");
+}
+var hello = function (_, Kotlin) {
+ 'use strict';
+ var println = Kotlin.kotlin.io.println_s8jyv4$;
+ function main(args) {
+ println('Kotlin');
+ }
+ function a() {
+ println(9);
+ }
+ _.main_vqirvp$ = main;
+ _.a = a;
+ main([]);
+ Kotlin.defineModule('hello', _);
+ return _;
+}(typeof hello === 'undefined' ? {} : hello, kotlin);
+```
+
+ここで `kotlin-dce-js` を実行します。
+
+```
+kotlin-dce-js hello.js
+```
+
+オプション `-d` で出力ディレクトリを指定できますが、ここでは指定していません。 デフォルトの `min` ディレクトリに次の `hello.js` が出力されます。
+
+```
+if (typeof kotlin === 'undefined') {
+ throw new Error("Error loading module 'hello'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'hello'.");
+}
+var hello = function (_, Kotlin) {
+ 'use strict';
+ var println = Kotlin.kotlin.io.println_s8jyv4$;
+ function main(args) {
+ println('Kotlin');
+ }
+ _.main_vqirvp$ = main;
+ main([]);
+ return _;
+}(typeof hello === 'undefined' ? {} : hello, kotlin);
+
+//# sourceMappingURL=hello.js.map
+```
+
+使用されていなかった 関数 `a` は除去されています。
+
+## REPL (Read Eval Print Loop)
+
+次のコマンドで、 REPL が実行できます。
+
+```
+kotlinc
+```
+
+`:quit` を入力することで終了できます。 私はよく `Ctrl+D` で終了しています。
+
+## その他
+
+`kotlin`, `kotlinc`, `kotlinc-js`, `kotlin-dce-js` のコマンドを紹介しました。 各コマンドに `-h` オプション を付けて実行するとそれぞれのコマンドのヘルプが表示されます。