去年Kotlinでコード書いたはずだ!とドキュメントを見てみるが、見覚えが無いなぁと思っていたら、去年書いたのはGoだった・・・乗り掛かった舟ということでKotlinを見てみました。
開発環境はIntelliJ
KotlinのチュートリアルのGetting Startedで「Getting Started with IntelliJ IDEA」とIntelliJが1番に出てくるので流行っているのかな?コミュニティ版をダウンロードしてインストールします。
Kotlinファイル作成&実行
以前見たときよりダークなだけでカッコいい感じがするIntelliJ。
新規にプロジェクトを作って、Kotlinファイルを追加して実行してみるまでは「Getting Started with IntelliJ IDEA」通りにサクサクできる。
fun main() {
println("Hello Kotlin!")
}
IntelliJインストール時になんとなく、そうかなぁと思いましたがKotlinのファイル拡張子「.kt」なんですね。(初心者)
.ktファイルを編集しているコードの左にRunボタンがあるのでクリックすると実行できる。IntelliJとても便利。
ファイル名がKotlinClassSono1.ktとなっていますが、Kotlinファイルってクラスファイルなのかと思ってました。
このmain関数をJavaからどうやって呼ぶのかな?ってことでJarファイルがいるだろうなぁ・・・IntelliJで「Build Project」を実行しても特に何も出力されないので調べてみました。
Jarファイルを出力
FileメニューからProject Structureを開きます。
Project Settings>Artifacts で「+」ボタンをクリック JAR>From modules with dependencies
Main Class は指定しないで「OK」ボタンをクリック
「Include in project build」にチェックをします。
もう一度「Build Project」を実行してみると・・・
プロジェクトフォルダー下にJarファイルが出力されてます。ありがとうIntelliJ
ちなみにプロジェクト名は「KotlinComponent」になっています。
Jarファイルの中を覗いてみると
「ファイル名+Kt」という名前の「KotilnClassSono1Kt.class」が含まれているのが確認できました。
Javaから呼んでみる
Javaのプロジェクトで作成したJarファイルを読み込んでみると、
public class Main {
public static void main(String[] args) {
KotlinClassSono1Kt.main();
}
}
KotlinClassSono1Ktが見えて、
JavaからKotlinのコードを実行できました。
クラス名にKtついてるし、なんだかなぁ~ということで、IntelliJに戻って追加でpackageとclassを追加してみました。
パッケージのsrcフォルダでコンテキスメニュー New>Package でパッケージ作成。普通です。
作成したPackageでコンテキストメニュー New>Kotlin File/Class !?
ここで初めてFileとClassの違いに気が付きました。
package ari
class KotlinClassSono2 {
}
Packageには「ari」を指定してます。
KotlinのClassのドキュメントを真似してクラスに関数「test」を持たせてみます。コンストラクタはおまけです。
package ari
class KotlinClassSono2 constructor(name: String){
init {
println("name = ${name}")
}
constructor(name: String, age: Int) : this("$name"){
println("age = ${age}")
}
fun test() {
println("test call OK !")
}
}
再度「Build Project」を実行してJarファイルを作成してJavaで読み込みます。
「ari」パッケージの下に「KotlinClassSono2」クラスが見えました。
クラス名に「Kt」が付いていません。なるほど~
コンストラクタを使ってインスタンスも作れました。
関数呼び出しも成功です。
最後に
Kotlinいいですね。
使わないんですけどreferenceをもう少し読んでみようかなぁと思いました。