はじめに
職場でKotlinを使ってみようという流れになったので、この年末年始休暇中から勉強を始めました。Googleで探せば直ぐに知りたいことが見つかりますが、読み始めた『アウトプット大全』に学習効率はアウトプットすることで高まると書いていたので、勉強したことを、まとめる事にしました。
Kotlin環境構築
Macユーザーなので、Homebrewでインストール。
$ brew update
$ brew install kotlin
インストールしたくない人は、Try KotlinというサイトでもKotlinを体験できます。
http://try.kotl.in
統合開発環境で IntelliJ IDEA があり Kotlin開発では、Community版を使えば良さそう。
http://www.jetbrains.com/idea/download/
HelloWorld
まずは、基本のHelloWorld!
# プログラム作成
$ vi HelloWorld.kt
/* 初めてのプログラム */
package sample
fun main(args: Array<String>) {
println("Hello, world!")
}
# コンパイル
$ kotlinc HelloWorld.kt -include-runtime -d HelloWorld.jar
# 実行
$ java -jar HelloWorld.jar
Hello, world!
REPL(read-eval-print loop)モード
ファイル指定しないで kotlinc を実行すると対話型評価環境REPLモードが起動。
コードを入力してEnterキーを実行するとコードが評価される。
変数を打つと値が出力するので、簡単なコードの確認に使えそう。
以降は、REPLでサンプルを書きます。
$ kotlinc
Welcome to Kotlin version 1.3.11 (JRE 10.0.1+10)
Type :help for help, :quit for quit
>>> var x=1
>>> x
1
>>> :quit
文法
JVMで動くだけあって、Javaと同じ文法がありました。
他のJVM上で動く言語もそうなのだろうか?!
Javaと同じもの
- コメント(行コメント、複数行コメント)
- main関数がプログラムのエントリポイント
Javaと異なるもの
- データ型定義が後ろ
- 文末はセミコロンではなく改行
- データ型
- Javaのプリミティブ型がなく、ラッパークラスが基本データ型
- 整数は略語のIntが使われていた
- 関数の書き方
- 「fun」でした。「function」ではなく
- クラス定義なくても大丈夫みたい
データ型
型 | 種類 |
---|---|
Double | 浮動小数点 |
Float | 浮動小数点 |
Long | 整数 |
Int | 整数 |
Short | 整数 |
Byte | 整数 |
Boolean | 真偽値 |
Char | 文字 |
String | 文字列 |
配列は Array クラスが用意されている。
>>> var lists: Array<String> = arrayOf("hello", "world")
>>> lists[0]
hello
>>> lists[1]
world
>>>
データ型毎のクラスも用意されている。
>>> var ints: Array<Int> = arrayOf(1, 2, 3)
>>> ints[0]
1
>>> var ints: IntArray = intArrayOf(1, 2, 3)
>>> ints[0]
1
>>>
変数
val は固定値(immutable)
>>> val x: Int = 1
>>> x = 2
error: val cannot be reassigned
x = 2
^
>>>
var は可変値(mutable)
>>> var y: Int = 1
>>> y = 2
>>>
型は省略可能
>>> var z = 1
>>> z
1
条件分岐
if文
>>> var x = 1
>>> var y = if (x == 1) "TRUE" else "FALSE"
>>> y
TRUE
>>>
when文
>>> val result = when(3) {
... in 1..3 -> "one to three"
... else -> "others"
... }
>>> result
one to three
>>>
ループ
while文
>>> var x = 1
>>> var x = 3
>>> while (0 < x--) {
... println("hoge")
... }
hoge
hoge
hoge
>>> var y = 0
>>> do {
... println("fuga")
... y++
... } while (y < 3)
fuga
fuga
fuga
>>>
for文
>>> for(i in listOf(1, 2, 3)){
... println("i = $i")
... }
i = 1
i = 2
i = 3
>>
>>> for(i in 5 downTo 1 step 2) {
... println("i = $i")
... }
i = 5
i = 3
i = 1
>>>
関数
// 単一行
fun 関数名(第1引数名: 型, 第2引数名: 型, ...): 戻り値の型 = 式
// 複数行
fun 関数名(第1引数名: 型, 第2引数名: 型, ...): 戻り値の型 {
// コード
}
>>> fun square(n: Int): Int = n * n
>>> square(3)
9
>>> fun add(a: Int, b: Int): Int = a + b
>>> add(2, 7)
9
>>>
関数には名前付き引数という仕組みがあり、引数の順番ではなく名前で引数が指定可能
>>> fun foo(a: Char, b: Char) {
... println("1: $a, 2: $b")
... }
>>> foo('X', 'Y')
1: X, 2: Y
>>> foo('Y', 'X')
1: Y, 2: X
>>> foo(a = 'X', b = 'Y')
1: X, 2: Y
>>> foo(b = 'Y', a = 'X')
1: X, 2: Y
>>>
PHPのようにデフォルト引数があります。
>>> fun hello(name: String = "World") {
... println("Hello, $name!")
... }
>>> hello()
Hello, World!
>>> hello("Japan")
Hello, Japan!
>>>
えら
最後に
Kotlinの リファレンス があるのを見つけました。
後は、このサイトを見て勉強を続けることにします。
References
- 『Kotlin Webアプリケーション』 長澤太郎 著
- Working with the Command Line Compiler
- リファレンス - Kotlin Programming Language