Skip to main content
Kotlinことはじめ
- まずは触って動かしてみよう-
はじめに
アジェンダ
Kotlin概要
Kotlinに触れてみよう!
Kotlinの可能性
Kotlin概要
Kotlinとは?
Kotlinとは?
Javaの代替言語としてJetBrains社が開発した
マルチプラットフォームの静的型付け言語
Javaの代替言語としてJetBrains社が開発した
マルチプラットフォームの静的型付け言語
https://kotlinlang.org/
JetBrains社について
チェコ共和国に拠点を置く
開発ツールベンダー
Kotlinの特徴
Kotlinの特徴
Javaと100%の相互運用性
マルチ・パラダイムでモダンな言語仕様
OSSライセンスのもとに公開
特徴1 Javaと100%の相互運用性
Kotlin
ソース・コード
(*.kt)
Java
バイト・コード
(*.class)コンパイル
Android
バイト・コード
(*.dex)
変換
Java SE
Java EE実行
Android
実行
JavaScript
ソース・コード
(*.js)
ネイティブ
バイナリ・コード
特徴2 マルチ・パラダイムでモダンな言語仕様
オブジェクト指向&関数型プログラミング
カプセル化、継承、高階関数、ラムダ式
効率と安全性の両立
型推論、スマートキャスト、Null安全
柔軟で強力な言語機能とライブラリ
レンジ、拡張関数、演算子オーバーロード、
デリゲート、etc.
特徴3 OSSライセンスのもとに公開
https://github.com/JetBrains/kotlin
Apache License 2.0
Kotlinの開発環境
Kotlinの開発環境
IntelliJ IDEA
Android Studio
Eclipse + Kotlin Plugin
Standalone Compiler
>
Kotlinのビルド・ツール
Gradle Apache Maven
Apache Ant
少しだけ試してみたい人は
https://try.kotlinlang.org/
Kotlinに触れてみよう!
Kotlinで”Hello, World!”
Kotlinで”Hello, World!”
package com.example.hello
/**
* Kotlinで"Hello, World!"
*/
fun main(args: Array<String>) {
println("Hello, World!")
}
ついでに変数も使ってみよう!
package com.example.hello
fun main(args: Array<String>) {
val a: Int = 10 // 変数aの宣言
var b: Int = 20 // 変数bの宣言
b += a // 変数bに変数aの値を加算
println("b = ${b}") // 30
}
変数宣言と型推論
val a = 10
変数名 型 初期値
: Int
Kotlinの基本型
Java
boolean
byte
short
int
long
float
double
char
Boolean
Byte
Short
Integer
Long
Float
Double
Character
Kotlin
Boolean
Byte
Short
Int
Long
Float
Double
Char
String
Array
Kotlinは安全
val a = 10
valによる宣言
var b = 10
varによる宣言
valとvarの違い
再代入不可 再代入可能
a = 20 b = 20
Null参照は100億ドルの誤り?
https://www.infoq.com/presentations/
Null-References-The-Billion-Dollar-Mistake-Tony-Hoare
”これは、後に数え切れない過ち、脆
弱性、システムクラッシュを引き起こし、
過去40年間で10億ドル相当の苦痛
と損害を引き起こしたとみられる。”
ウィキペディア「アントニー・ホーア」より
Kotlinはnullを参照しないのが基本
var age: Int = null
var age: Int? = null
どうしてもnullを参照したい
場合はnull許容型を使う
var a: Int = strA.toInt()
null許容型にすると・・・
print("1つ目の数: ")
var strA: String? = readLine()
直接メソッドを呼び出そうとすると
コンパイル・エラーになる
null許容型にすると・・・
print("1つ目の数: ")
var strA: String? = readLine()
var a: Int? = strA?.toInt()
"?"演算子を使用すると、
nullでなければメソッド呼び出しの結果が、
nullならばnullが返される
値を受け取る方も
null許容型
null許容型にすると・・・
print("1つ目の数: ")
var strA: String? = readLine()
var a: Int = if (strA != null)
strA.toInt() else 0
nullチェックを行えば普通にメソッドを呼び出せる
ただし、nullだった時の対処が必要
null許容型にすると・・・
print("1つ目の数: ")
var strA: String? = readLine()
var a: Int = strA?.toInt() ?: 0
エルビス演算子("?:")を使うと
nullチェックを簡潔に記述できる
繰り返しを安全に記述する
/* 安全な繰り返し */
for (j in 0..9) {
println(j)
}
レンジを使って安全に!
for( ; ; )は存在しない
Kotlinはシンプル
値を保持するクラス(データ・クラス)
data class Student(
val id: Long,
val name: String,
val score: Int)
オブジェクトの生成とリストの作成
val students = listOf(
Student(1, "山本", 100),
Student(2, "佐藤", 65),
Student(3, "鈴木", 80),
Student(4, "田中", 75),
Student(5, "高橋", 40)
)
繰り返しとラムダ式(その1)
println("===== 一覧表示 =====")
students.forEach {
println(it)
}
繰り返しとラムダ式(その2)
println("===== 合格者 =====")
students.filter {
it.score >= 70
}.forEach {
println(it)
}
繰り返しとラムダ式(その3)
println("===== 平均点 =====")
val ave = students.map {
it.score
}.reduce {
sum, score -> sum + score
} / students.size
println("平均点: ${ave}")
Kotlinは柔軟
既存クラスに独自関数を追加する
fun String.toHiragana() = this.map {
if (it.toInt() in 0x30A0..0x30FF)
(it.toInt() - 0x60).toChar()
else
it
}.joinToString("")
Stringクラスに独自メソッド
toHiragana()を追加
拡張関数の利用例
fun main(args: Array<String>) {
println("コトリン".toHiragana())
}
既存クラスに独自プロパティを追加する
val Int.days get() =
Duration.ofDays(this.toLong())
Intクラスに独自プロパティdaysを追加
演算子を再定義する
"+"(プラス)演算子を再定義
operator fun LocalDateTime.plus(
increment: Duration): LocalDateTime
= this.plus(increment)
拡張プロパティと演算子オーバーロードの利用例
fun main(args: Array<String>) {
val now = LocalDateTime.now()
println(now + 1.hours)
println(now + 10.days)
}
自然な時間の表現
Kotlinの可能性
Javaの代替言語ではない?
Android開発の公式言語に採用される
Google I/O 2017
公式言語として採用
Android Studio 3.0から
Kotlinを標準サポート
Kotlin財団設立の噂も
SpringにおけるKotlinサポート
Spring Initializr
すでにKotlinに対応済み(Groovyを超える人気)
Spring 5のKotlin対応
Spring WebFlux functional DSL
Null Safety
etc.
JavaScriptコードの生成
標準ライブラリ
W3C APIの各種ラッパーを提供
Kotlin独自APIの提供
Node.js関連ツール
kotlin-webpack-plugin
ts2kt-automator
etc.
ネイティブ・アプリケーションの開発
LLVM用Kotlinコンパイラ
Ubuntu Linux(x86-64)
macOS
iOS
Raspberry Pi
まとめ
Kotlinは実務で使える言語
Kotlinは安全でシンプルで柔軟
まだまだいろいろな機能があります
ただし、使いすぎには気を付けましょう
拡張関数、演算子オーバーロード、etc.
Kotlinは将来有望
Androidでの正式採用、財団設立の計画も?
いろんなところでKotlinプログラミング
【広告】オープンコースのご案内
『JavaエンジニアのためのKotlin入門』
9月13日(水)初回開催予定