9. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
Kotlin とは?
‣ Java VM ⾔語
‣ 100% interoperable with Java
(Javaと完全互換性があり、相互運⽤が可能)
‣ 型推論付き静的型付け
‣ セミコロンレス
9
10. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
文法
10
class MyClass : BaseClass {
fun main(args: Array<String>) : Int {
var len = 0
for (arg in args) {
len = arg.length
}
return len
}
}
public class MyClass extends BaseClass {
public int main(ArrayList<String> args) {
int len = 0;
for (String arg : args) {
len = arg.length();
}
return len;
}
}
‣ Kotlin
‣ Java
11. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
変数の定義(val / var)
11
fun main() {
val readOnly: String = "Read Only"
var writable: String = "Writable"
readOnly = "Can't change" // NG
writable = "Changed!" // OK
}
val 読み込み専⽤・変更不可
var 読み込み・書き換え可能
13. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
型
13
‣ Double
‣ Float
‣ Long
‣ Int
‣ Short
‣ Byte
‣ Char
‣ Boolean
‣ String
‣ Array
14. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Any
14
‣ 全ての型を代⼊可能
‣ null と Optional 型(Null許容)は⼊れられない
fun main() {
val optional: String? = "optional"
var value: Any
value = 1 // OK
value = "hoge" // OK
value = optional // NG
value = null // NG
}
15. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Unit
15
‣ Java で⾔うところの void
‣ 関数返り値の型を省略した場合は Unit になる
fun main(value: String?) {
println(value)
}
// ↑↓ 同じ
fun main(value: String?): Unit {
println(value)
}
16. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Nothing
16
‣ 値が存在しないことを表す
‣ 他の全ての型に代⼊可能な型
‣ 関数の返り値に指定すると、⼊ったら抜けない
関数になる
fun fail(message: String): Nothing {
logger.error("Error message : $message")
throw IllegalStateException(message)
}
17. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Nothing
17
fun getName(user: User) {
val name = user.name
?: throw Exception("User is required")
}
‣ エルビス演算⼦
‣ ?: 前が null でない時は
?: の前を評価
‣ null の時は ?: の後
を評価
18. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Nothing
18
fun getName(user: User) {
val name = user.name
?: throw Exception("User is required")
}
fun fail(message: String): Nothing {
logger.error("Error message : $message")
throw IllegalStateException(message)
}
fun getName(user: User) {
val name = user.name
?: fail("User is required")
}
19. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
Data Class
// Java
public class User {
private String name;
private int age;
}
// Kotlin
data class User(
val name: String,
val age: Int
)
19
‣ データを保持するためのクラス
20. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
Data Class
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class MyClass {
public void main(args:Array<String>) {
User user = new User();
user.setName("My Name");
user.setAge(10);
System.out.println(user.getName());
}
}
20
‣ Java の場合
21. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
Data Class
data class User(
val name: String,
val age: Int
)
class MyClass {
fun main(args: Array<String>) {
val user = User("My Name", 20)
println(user.name)
}
}
21
‣ Kotlin の場合
22. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
参考リンク・ドキュメント
22
1. Kotlin 公式ドキュメント
‣ http://kotlinlang.org/docs/reference/
2. Kotlin ドキュメント⽇本語版(⾮公式)
‣ https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/
3. Kotlin勉強会(第1回)の資料
‣ https://www.slideshare.net/toranoana-lab/kotlin-88458802
本⽇配った補⾜資料も是⾮ご活⽤ください!
24. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
今日作成するもの
‣ アニメ情報取得 API を使⽤して、
今期のアニメ⼀覧・詳細を表⽰
‣ http://api.moemoe.tokyo/anime/v1/master/2018/1?ogp=1
24
25. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
手順
1. IntelliJ Idea のインストール
2. JDK のパスを確認 / gradle.properties 設定
3. プロジェクトのインポート
4. ビルド / 動作確認
25
※ 動作確認後に休憩をはさみます
26. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ドキュメント
26
1.リポジトリ
‣ https://github.com/toranoana/kotlin-webapp.git
2. ハンズオン⽤ドキュメント
‣ https://toranoana.github.io/kotlin-webapp/
27. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
IntelliJ IDEA / JDK
‣ 以下のインストール
27
IntelliJ IDEA https://www.jetbrains.com/idea/
Java SE
Development Kit
(JDK)
http://www.oracle.com/technetwork/
java/javase/downloads/jdk8-
downloads-2133151.html
28. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
プロジェクトの準備
$ git clone https://github.com/toranoana/kotlin-webapp.git
28
‣ Git のリポジトリを clone
‣ または zip をダウンロードして解凍
29. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
JDK のパスを確認(Mac)
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
9.0.4, x86_64:"Java SE 9.0.4" /Library/
Java/JavaVirtualMachines/jdk-9.0.4.jdk/
Contents/Home
/Library/Java/JavaVirtualMachines/
jdk-9.0.4.jdk/Contents/Home
29
‣ Mac の場合
30. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
JDK のパスを確認(Win)
30
‣ 多くの場合は以下にインストールされている
( jdk1.8.0 はバージョンにより変わる)
‣ C:Program FilesJavajdk1.8.0binjavac
‣ C:Program Files(x_86)Javajdk1.8.0binjavac
31. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
プロジェクトの準備
31
1. IntelliJ を起動
2. [ Import Project ] から
./kotlin-webapp/build.gradle を選択
32. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
JDKのパス設定
32
※ ⾃分の環境の JDK を選択する
(”Use Project SDK” の⽅ではありません)
33. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
Gradle ツールウィンドウ
33
‣ Gradleのツールウィンドウを開く
‣ View -> Tool Windows -> Gradle
34. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ビルド
34
‣ Gradleツールウィンドウ内の
kotlin-webapp
-> Tasks
-> application
-> bootRun
35. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ビルド
‣ http://localhost:8080/
35
36. Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ビルド
1. コード変更後、変更を反映するには再度
bootRun を実⾏
‣ kotlin-webapp
-> Tasks
-> application
-> bootRun
2. http://localhost:8080/
をリロード
36