LoginSignup
0
0

More than 3 years have passed since last update.

Kotlin - 自習ノート

Last updated at Posted at 2019-01-02

はじめに

職場で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

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0