Movatterモバイル変換
[0]
ホーム
URL:
画像なし
夜間モード
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Shinsuke Sugaya
PDF, PPTX
2,092 views
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinを使うための方法を紹介します。
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 49
2
/ 49
3
/ 49
4
/ 49
5
/ 49
6
/ 49
7
/ 49
8
/ 49
9
/ 49
10
/ 49
11
/ 49
12
/ 49
13
/ 49
14
/ 49
15
/ 49
16
/ 49
17
/ 49
18
/ 49
19
/ 49
20
/ 49
21
/ 49
22
/ 49
23
/ 49
24
/ 49
25
/ 49
26
/ 49
27
/ 49
28
/ 49
29
/ 49
30
/ 49
31
/ 49
32
/ 49
33
/ 49
34
/ 49
35
/ 49
36
/ 49
37
/ 49
38
/ 49
39
/ 49
40
/ 49
41
/ 49
42
/ 49
43
/ 49
44
/ 49
45
/ 49
46
/ 49
47
/ 49
48
/ 49
49
/ 49
Recommended
PDF
Fess/Elasticsearchを使った業務で使える?全文検索への道
by
Shinsuke Sugaya
PDF
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
by
Shinsuke Sugaya
PPTX
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
by
ひとし あまの
PDF
サイバージェント 秋葉原ラボのHBase 活用事例
by
cyberagent
PDF
社内ドキュメント検索システム構築のノウハウ
by
Shinsuke Sugaya
PDF
データマイニング+WEB勉強会資料第6回
by
Naoyuki Yamada
PPTX
ウェブから情報をあつめる
by
Shuhei Iitsuka
PDF
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
by
Naoyuki Yamada
PPTX
BPStudy32 CouchDB 再入門
by
Yohei Sasaki
PDF
[東京] JapanSharePointGroup 勉強会 #2
by
Atsuo Yamasaki
PDF
Elasticsearchプラグインの作り方
by
Shinsuke Sugaya
PDF
月間10億pvを支えるmongo db
by
Yuji Isobe
PDF
Elasticsearch入門 pyfes 201207
by
Jun Ohtani
PDF
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
by
Takahiro Inoue
KEY
はじめてのCouch db
by
Eiji Kuroda
PPTX
MongoDBが遅いときの切り分け方法
by
Tetsutaro Watanabe
PDF
20181031 springfest spring data geode
by
Masaki Yamakawa
PPTX
Reladomo入門 JJUGナイトセミナー #jjug
by
Hiroshi Ito
PPTX
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
by
ひとし あまの
PDF
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
by
uedayou
PDF
Sc2009autumn s2robot
by
Shinsuke Sugaya
PDF
chapter6
by
ymk0424
PDF
Shibuya Perl Mongers#12 No Sql Couch Db
by
Makoto Ohnami
PDF
ARC-009_RDB 技術者のための NoSQL ガイド
by
decode2016
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
by
Toshi Harada
PPTX
Tokyo Webmining #12 Hapyrus
by
Koichi Fujikawa
PPTX
MySQLのインデックス入門
by
Yuto Suzuki
PPT
Cassandra v0.6-siryou
by
あしたのオープンソース研究所
PDF
Kotlinアンチパターン
by
Recruit Lifestyle Co., Ltd.
PDF
From Scala/Clojure to Kotlin
by
Kent Ohashi
More Related Content
PDF
Fess/Elasticsearchを使った業務で使える?全文検索への道
by
Shinsuke Sugaya
PDF
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
by
Shinsuke Sugaya
PPTX
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
by
ひとし あまの
PDF
サイバージェント 秋葉原ラボのHBase 活用事例
by
cyberagent
PDF
社内ドキュメント検索システム構築のノウハウ
by
Shinsuke Sugaya
PDF
データマイニング+WEB勉強会資料第6回
by
Naoyuki Yamada
PPTX
ウェブから情報をあつめる
by
Shuhei Iitsuka
PDF
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
by
Naoyuki Yamada
Fess/Elasticsearchを使った業務で使える?全文検索への道
by
Shinsuke Sugaya
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
by
Shinsuke Sugaya
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
by
ひとし あまの
サイバージェント 秋葉原ラボのHBase 活用事例
by
cyberagent
社内ドキュメント検索システム構築のノウハウ
by
Shinsuke Sugaya
データマイニング+WEB勉強会資料第6回
by
Naoyuki Yamada
ウェブから情報をあつめる
by
Shuhei Iitsuka
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
by
Naoyuki Yamada
What's hot
PPTX
BPStudy32 CouchDB 再入門
by
Yohei Sasaki
PDF
[東京] JapanSharePointGroup 勉強会 #2
by
Atsuo Yamasaki
PDF
Elasticsearchプラグインの作り方
by
Shinsuke Sugaya
PDF
月間10億pvを支えるmongo db
by
Yuji Isobe
PDF
Elasticsearch入門 pyfes 201207
by
Jun Ohtani
PDF
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
by
Takahiro Inoue
KEY
はじめてのCouch db
by
Eiji Kuroda
PPTX
MongoDBが遅いときの切り分け方法
by
Tetsutaro Watanabe
PDF
20181031 springfest spring data geode
by
Masaki Yamakawa
PPTX
Reladomo入門 JJUGナイトセミナー #jjug
by
Hiroshi Ito
PPTX
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
by
ひとし あまの
PDF
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
by
uedayou
PDF
Sc2009autumn s2robot
by
Shinsuke Sugaya
PDF
chapter6
by
ymk0424
PDF
Shibuya Perl Mongers#12 No Sql Couch Db
by
Makoto Ohnami
PDF
ARC-009_RDB 技術者のための NoSQL ガイド
by
decode2016
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
by
Toshi Harada
PPTX
Tokyo Webmining #12 Hapyrus
by
Koichi Fujikawa
PPTX
MySQLのインデックス入門
by
Yuto Suzuki
PPT
Cassandra v0.6-siryou
by
あしたのオープンソース研究所
BPStudy32 CouchDB 再入門
by
Yohei Sasaki
[東京] JapanSharePointGroup 勉強会 #2
by
Atsuo Yamasaki
Elasticsearchプラグインの作り方
by
Shinsuke Sugaya
月間10億pvを支えるmongo db
by
Yuji Isobe
Elasticsearch入門 pyfes 201207
by
Jun Ohtani
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
by
Takahiro Inoue
はじめてのCouch db
by
Eiji Kuroda
MongoDBが遅いときの切り分け方法
by
Tetsutaro Watanabe
20181031 springfest spring data geode
by
Masaki Yamakawa
Reladomo入門 JJUGナイトセミナー #jjug
by
Hiroshi Ito
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
by
ひとし あまの
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
by
uedayou
Sc2009autumn s2robot
by
Shinsuke Sugaya
chapter6
by
ymk0424
Shibuya Perl Mongers#12 No Sql Couch Db
by
Makoto Ohnami
ARC-009_RDB 技術者のための NoSQL ガイド
by
decode2016
MyNA JPUG study 20160220-postgresql-json-datatype
by
Toshi Harada
Tokyo Webmining #12 Hapyrus
by
Koichi Fujikawa
MySQLのインデックス入門
by
Yuto Suzuki
Cassandra v0.6-siryou
by
あしたのオープンソース研究所
Similar to LastaFluteでKotlinをはじめよう
PDF
Kotlinアンチパターン
by
Recruit Lifestyle Co., Ltd.
PDF
From Scala/Clojure to Kotlin
by
Kent Ohashi
PPTX
Java で書かれたAndroid アプリに Kotlin を適用させていく
by
Kenichi Tatsuhama
PPTX
Java で書かれた Android アプリに Kotlin を適用させていく
by
Kenichi Tatsuhama
PDF
BOF1-Scala02.pdf
by
Hiroshi Ono
PDF
BOF1-Scala02.pdf
by
Hiroshi Ono
PDF
BOF1-Scala02.pdf
by
Hiroshi Ono
PDF
Scalaプログラミング・マニアックス
by
Tomoharu ASAMI
PPTX
2018/2/20 Kotlin勉強会
by
虎の穴 開発室
PDF
Introduction Xtend
by
Hideki Kishida
PDF
Object-Funcational Analysis and design
by
Tomoharu ASAMI
PDF
Kotlin勉強会 in ehime
by
Eigoro Yamamura
KEY
JJUG CCC 2012 Real World Groovy/Grails
by
Uehara Junji
PPTX
Kotlin
by
Shumpei Hozumi
PDF
Kotlin handson
by
Ryuto Yasugi
PDF
Scala conf2013
by
Takafumi Ikeda
PDF
20170618 Google I/O報告会in福岡
by
mokelab
PDF
JavaWorld Day 2009 Scala
by
Tomoharu ASAMI
PDF
Kotlinの紹介
by
Taro Nagasawa
PPTX
Kotlin が公式サポートになったので Kotlin の話
by
Kenichi Tatsuhama
Kotlinアンチパターン
by
Recruit Lifestyle Co., Ltd.
From Scala/Clojure to Kotlin
by
Kent Ohashi
Java で書かれたAndroid アプリに Kotlin を適用させていく
by
Kenichi Tatsuhama
Java で書かれた Android アプリに Kotlin を適用させていく
by
Kenichi Tatsuhama
BOF1-Scala02.pdf
by
Hiroshi Ono
BOF1-Scala02.pdf
by
Hiroshi Ono
BOF1-Scala02.pdf
by
Hiroshi Ono
Scalaプログラミング・マニアックス
by
Tomoharu ASAMI
2018/2/20 Kotlin勉強会
by
虎の穴 開発室
Introduction Xtend
by
Hideki Kishida
Object-Funcational Analysis and design
by
Tomoharu ASAMI
Kotlin勉強会 in ehime
by
Eigoro Yamamura
JJUG CCC 2012 Real World Groovy/Grails
by
Uehara Junji
Kotlin
by
Shumpei Hozumi
Kotlin handson
by
Ryuto Yasugi
Scala conf2013
by
Takafumi Ikeda
20170618 Google I/O報告会in福岡
by
mokelab
JavaWorld Day 2009 Scala
by
Tomoharu ASAMI
Kotlinの紹介
by
Taro Nagasawa
Kotlin が公式サポートになったので Kotlin の話
by
Kenichi Tatsuhama
More from Shinsuke Sugaya
PDF
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
by
Shinsuke Sugaya
PDF
Elasticsearchで作る形態素解析サーバ
by
Shinsuke Sugaya
PDF
DBFluteを用いて開発されている全文検索システムFess
by
Shinsuke Sugaya
PDF
DBFlute Mavenプラグインを用いてCRUD作成
by
Shinsuke Sugaya
PDF
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
PDF
ElasticsearchとTasteプラグインで作るレコメンドシステム
by
Shinsuke Sugaya
PDF
PredictionIOでSparkMLを使った開発方法
by
Shinsuke Sugaya
PDF
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
by
Shinsuke Sugaya
PDF
Elasticsearchベースの全文検索システムFess
by
Shinsuke Sugaya
PDF
オフィスに1台!全文検索Fess
by
Shinsuke Sugaya
PDF
Elasticsearch Authプラグインでアクセスコントロール
by
Shinsuke Sugaya
PDF
elasticsearchプラグイン入門
by
Shinsuke Sugaya
PDF
Solrベースの全文検索サーバ Fess
by
Shinsuke Sugaya
PDF
PredictionIOのPython対応計画
by
Shinsuke Sugaya
PDF
PredictionIO構築入門
by
Shinsuke Sugaya
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
by
Shinsuke Sugaya
Elasticsearchで作る形態素解析サーバ
by
Shinsuke Sugaya
DBFluteを用いて開発されている全文検索システムFess
by
Shinsuke Sugaya
DBFlute Mavenプラグインを用いてCRUD作成
by
Shinsuke Sugaya
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
ElasticsearchとTasteプラグインで作るレコメンドシステム
by
Shinsuke Sugaya
PredictionIOでSparkMLを使った開発方法
by
Shinsuke Sugaya
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
by
Shinsuke Sugaya
Elasticsearchベースの全文検索システムFess
by
Shinsuke Sugaya
オフィスに1台!全文検索Fess
by
Shinsuke Sugaya
Elasticsearch Authプラグインでアクセスコントロール
by
Shinsuke Sugaya
elasticsearchプラグイン入門
by
Shinsuke Sugaya
Solrベースの全文検索サーバ Fess
by
Shinsuke Sugaya
PredictionIOのPython対応計画
by
Shinsuke Sugaya
PredictionIO構築入門
by
Shinsuke Sugaya
LastaFluteでKotlinをはじめよう
1.
LastafluteでKotlinをはじめようDBFluteフェス2018 1
2.
DBFluteフェス 2018■ 名前:
菅谷信介■ オープンソース活動:➔ Fess, DBFlute関連, Apache PredictionIO,...■ 2015年からDBFluteフェスのこの枠で...自己紹介2
3.
DBFluteフェス 2018LastaFluteを使っていますか?3
4.
DBFluteフェス 2018Java以外の言語?4
5.
DBFluteフェス 2018LastaFluteでKotlinを使いましょう!5
6.
DBFluteフェス 2018Kotlin入門6
7.
DBFluteフェス 2018■ JetBrains社が作ったJVMで動く静的型付け言語■
2017年からAndroidの公式開発言語■ Javaと相互運用可能(”100% interoperable”)■ Javaを簡潔/安全になるように改良した言語➔型推論、関数型プログラミング、null安全...etc■ JavaでできることはほとんどKotlinでもできる➔JavaのライブラリはKotlinからも使える➔Javaより簡潔に書けることが多い➔コンパイル時間はJavaと比べて気にならないKotlinとは7
8.
DBFluteフェス 2018■ JetBrains社がJavaからKotlinへの移行を念頭に2011年から開発開始➔2012年
OSS化■ 歴史➔2016年 2月 v1.0➔2017年 3月 v1.1➔2017年 5月 Androidの公式開発言語として採用➔2017年 11月 v1.2➔2018年 10月 v1.3Kotlinの歴史8
9.
DBFluteフェス 2018■ JVM上で動作➔サーバサイドやAndroid■
Kotlin/JS➔KotlinのコードをJSに変換できる■ Kotlin/Native➔Kotlinのコードをネイティブコードに変換できる(LLVM)Kotlinの種類9
10.
DBFluteフェス 2018Kotlinの文法10
11.
DBFluteフェス 2018■ Javaと互換だが、見た目は結構違う(?)➔セミコロンが省略可➔top-level(クラスと同レベル)に関数や変数が宣言できる➔省略表現が豊富➔...etc文法11package
project.kotlin // パッケージ名import java.util.* // インポートval PI = 3.14 // 定数class Person constructor(val firstName: String, val lastName: String) {...}fun main(args : Array<String>) {println(“Hello World!”)}
12.
DBFluteフェス 2018■ if-else,
try-catch➔Javaのようにも書けるが...文法: if, try12var max: Intif (a > b) {max = a} else {max = b}try {readFile()return true} catch (e: IOException) {e.printStackTrace()return false}
13.
DBFluteフェス 2018■ Kotlinではifやtryは式(expression)➔以下の書き方もできる文法:
if, try13val max = if(a > b) a else bval success = try {readFile()true} catch (e: IOException) {false}
14.
DBFluteフェス 2018■ switch文はなく、代わりにwhenを使う➔ifやtryと同様,
式として扱われる➔必要に応じてelseで指定する文法: when14fun isZeroOrOne(x: Int) : String {return when (x) {0 -> "xは0です"1 -> "xは1です"else -> "xは0でも1でもありません"}}print( isZeroOrOne(0) ) // “xは0です”
15.
DBFluteフェス 2018■ for文はforeach方式で書く➔while,
do-whileはJavaと同じ文法: for, while15val nameList = listOf(“Taro”, “Hanako”)for (name in nameList) {println(name)}val names = arrayOf("Taro", "Hanako")for(i in names.indices) {println(names[i])}while (x > 0) {x--}
16.
DBFluteフェス 2018■ val(読み取り専用)とvar(可変)➔valはJavaで言うfinalがついた変数➔コンパイラが型推論できる場合は型の宣言は不要■
インスタンスの生成➔newキーワードは不要変数の定義16val name = "Taro"val name : String = “Taro”var str = "text"var str: String = "Text"val sb = StringBuilder("Hello")sb.append(" ").append("World!")print(sb) // Hello World!
17.
DBFluteフェス 2018■ Javaと同じくnullがある■
Optionalのような機能を文法レベルでサポート➔Nullableな変数には”(型名)?"をつける➔Nullableな変数を使うときは■ "?"(nullの時は実行されない)■ "!!"(nullでも強制的に実行)Nullable17var str: String? = nullstr?.length() // strがnullの時実行されないstr!!.length() // strがnullなら当然NullPointerExceptionがthrow
18.
DBFluteフェス 2018■ エルビス演算子
?:➔左式の評価でnullが発生した場合に右式が評価される■ Smart casts➔型チェックやnullチェックなどをすると暗黙的に安全な型変換をしてくれる機能(コンパイラが追跡できる範囲で)Nullable18var person: Person? = ...val name: String = person?.name ?: "NoName"fun printStringLength(str: String?) {if (str != null) {println(str.length) // strはString?からStringにキャストされる}}
19.
DBFluteフェス 2018■ ==は構造等価性,
===は参照等価性➔Javaのようにequalsメソッドを呼ぶ必要はない➔a == b は “a?.equals(b) ?: (b === null) “と同じ意味➔!=, !==も同様文法: ==と===19val actual = getFirstName()val expected = “Taro”assertTrue(actual == expected)assertTrue(actual !== expected)
20.
DBFluteフェス 2018■ Javaで言うプリミティブ型(int,
double, ...)はなく、すべてオブジェクト化(Int, Double...)➔JavaのInteger, Double...に相当■ コンパイラが型推論してくれるので型の宣言は省略できることが多い■ 配列はArray<(型名)>➔Javaの[]に相当➔基本的な型(Int等)には最適化されたArray(intArray等)がある型20val a = arrayOf(1, 2, 3)val b = intArray(1, 2, 3) // 速い
21.
DBFluteフェス 2018■ すべてのクラスのスーパークラス■
Javaで言うObject➔equals(), hashCode(), toString()しか持たないので完全に同じではない■ 任意の型を取る場合は”var any: Any? = null”などとできる特殊な型: Any21
22.
DBFluteフェス 2018■ Javaで言うvoid型■
返り値がない関数などはUnit型➔省略可特殊な型: Unit22fun printStringLength(str: String?) { // Unit型の関数if (str != null) {println(str.length)}}
23.
DBFluteフェス 2018■ JavaのStringとほとんど同じ➔JavaのString[]はArray<String>➔Javaの標準ライブラリとは別にStringBuilder等もある■
String Template➔$変数名, ${式}で文字列中に値を埋め込めるString23val num = 1print(“num is $num and 2*num is ${2*num}”)val input = readLine(input)print(“the input is $input”)
24.
DBFluteフェス 2018■ コンストラクタはクラス名の後➔セカンダリコンストラクタも作れる➔constructorは省略可■
getter, setterは自動で生成される➔person.firstNameなどで自動でsetter, getterが呼ばれる■ init でコンストラクタに共通処理が書ける■ 継承される可能性があるときはopenを付ける➔何も付けなければfinal class■ interfacesやabstract classは標準でopenとなるクラス24class Person constructor(val firstName: String, var lastName: String) {}val person = Person(“Taro”, “Sato”)
25.
DBFluteフェス 2018■ 生成されるPerson.classをJavaにデコンパイルすると....Javaだと...25public
final class Person {@NotNullprivate final String firstName;@NotNullprivate String lastName;@NotNullpublic final String getFirstName() {return this.firstName;}@NotNullpublic final String getLastName() {return this.lastName;}public final void setLastName(@NotNull String string) {Intrinsics.checkParameterIsNotNull((Object)string, (String)"<set-?>");this.lastName = string;}public Person(@NotNull String firstName, @NotNull String lastName) {Intrinsics.checkParameterIsNotNull((Object)firstName, (String)"firstName");Intrinsics.checkParameterIsNotNull((Object)lastName, (String)"lastName");this.firstName = firstName;this.lastName = lastName;}}
26.
DBFluteフェス 2018■ staticな変数や関数のみの集まりを定義したい場合などに使う➔シングルトンの実装などに使えるobject26object
HttpClient {var host : Stringinit {host = getHost()}fun httpGetRequest(path: String) : String {return getResponse("GET", host + path)}}print(HttpClient.httpGetRequest("/test/"))
27.
DBFluteフェス 2018■ 各インスタンスで共通のフィールドやメソッドをクラス内で定義したいとき等に使う➔Javaでいうstaticフィールドやstaticメソッド➔top-levelに宣言した方が良い場合もcompanion
object27class MyClass{companion object Factory {fun create(): MyClass = MyClass()}}val myClass = MyClass.create()
28.
DBFluteフェス 2018■ データを保持するためのクラス➔コンストラクタ等を書く必要がない■
equals() , hashCode(), toString()などを自動的に生成してくれる➔copy(), componentN()などもData Class28data class User(val name: String, val email: String)val taro = User(name = "Taro", age = 18)
29.
DBFluteフェス 2018■ Javaと同じくジェネリクスをサポート■
Javaとの違い➔変性(<? extends T>的な)はinとoutで書けるGenerics29interface Source<out T> {fun nextT(): T}fun demo(strs: Source<String>) {val objects: Source<Any> = strs}class Box<T>(t: T) {var item = t}val box: Box<Int> = Box<Int>(1)
30.
DBFluteフェス 2018■ ラムダ式は{}で囲む■
ラムダ式の中からアクセスできる➔Javaと違い、値の変更も可ラムダ式30val sum = {x: Int, y: Int -> x + y} // sumの型は "(Int, Int) -> Int"println(sum(1,2)) // sum.invoke(1,2) でもOKvar sum = 0val ints = arrayOf(1, 2, 3)ints.filter { it > 0 }.forEach { sum += it } // ラムダ式の外側の()は省略可println(sum)
31.
DBFluteフェス 2018■ 既存のクラスに対して関数を定義できる➔新しくメソッドを追加するために継承クラスを新しく作る必要がない➔スコープ関数など便利な拡張関数が用意されている拡張関数31class
Person constructor(val firstName: String, val lastName: String) {}fun Person.printFullName() {println("${this.firstName} ${this.lastName}")}
32.
DBFluteフェス 2018■ List,
Set, Mapなどのコレクションが用意➔基本的にImmutable➔MutableList, MutableSet, MutableMapなどもある➔listOf(), setOf(), mapOf()などインスタンス生成用のメソッドが用意されている➔map, filter, forEachがある(JavaのStream APIと同じ)Collections32val readOnlyList = listOf(1, 2, 3, 4)println(readOnlyList) // "[1, 2, 3, 4]"val hashMap = hashMapOf("r" to 0, "g" to 1, "b" to 2)println(hashMap["g"]) // "1"print( readOnlyList.filter{ it % 2 == 0 } ) // "[2, 4]"hashMap.forEach{ key, value -> print("$key $value") } // "r 0b 2g 1"
33.
DBFluteフェス 2018■ Javaとほぼ同じ(try,
catch, finally, throw)➔ただし、Kotlinにはchecked exceptionがないKotlinの例外処理33try {// ...} catch (e: SomeException) {// ...} finally { // 省略可// ...}
34.
DBFluteフェス 2018■ package名を適切に指定すればプロジェクト内で相互に参照可能➔javaとkotlinのディレクトリを作ってコードを管理■
KotlinからJavaを使う場合はそのまま使える■ JavaからKotlinを使う場合はKotlinコードにアノテーション等を付与して調整可能Javaとの相互運用34
35.
DBFluteフェス 2018■ 基本的にJvmアノテーションを付与する■
Jvmアノテーション➔top-levelのクラスやメソッドを使いたい → ファイルの先頭に@JvmName➔クラスのフィールドをつかいたい → @JvmField➔companion objectの中身を使いたい → @JvmStatic➔その他にも@Throwsや@Voaltile等々JavaからKotlinを使う35@file:JvmName("User")...class User {@JvmField val userID = 0companion object {@JvmStaticprivate val EMPTY_INSTANCE = Test()}}
36.
DBFluteフェス 2018LastaFluteで使う36
37.
DBFluteフェス 2018■ IntelliJ➔Kotlinの開発元(JetBrains)のエディタ➔Kotlin用の機能が豊富➔Java
→ Kotlinのコード変換機能所々自分で修正が必要(他のJavaコードから呼び出されている部分や、実装が入り組んでいる場合は適切に変換されないことが多いので大幅に書き直しが必要なことも)■ Eclipse➔公式のEclipse用のプラグインが提供されている➔でも、IntelliJを使ったほうが良さそう…■ Maven, GradleでもKotlinが使える開発環境37
38.
DBFluteフェス 2018■ Kotlinを利用したLastaFluteのプロジェクト■
Java版のHarborをKotlin化■ Mavenのプロジェクト■ 自動生成されるコードはJavaのまま➔DBFluteの機能はそのまま使える■ Javaプロジェクトからの移行の参考に…https://github.com/lastaflute/lastaflute-example-paradeplazaParadeplaza38
39.
DBFluteフェス 2018Kotlinへの移行39
40.
DBFluteフェス 2018■ JavaとKotlinを共存させる➔変更内容の確認はHarborをdiffすると良い■
kotlin-maven-pluginを追加➔src/main/javaとsrc/main/kotlin■ maven-compiler-pluginを変更■ kotlin-stdlibを依存関係に追加pom.xml40
41.
DBFluteフェス 2018■ Javaのままにしておくもの➔DBFluteで生成するコード➔mylastaに生成されるコード■
上記以外はIntelliJの変換機能で.ktにするKotlinにするコード41
42.
DBFluteフェス 2018■ 〜Boot.ktのmain関数でJettyBootを起動■
Java的には〜BootKt.classになる➔pom.xmlでmainClassは〜BootKtを指定するJettyBoot42fun main(args: Array<String>) {JettyBoot(8090, "/paradeplaza").asDevelopment(isDevelopment()).bootAwait()}
43.
DBFluteフェス 2018■ @Resourceで指定しているコンポーネント➔Kotlinへの自動変換がうまくいかない■
valになるので、lateint varに変えるDIするコンポーネント43// 自動変換だと以下になる…// @Resource// private val responseManager: ResponseManager? = null@Resourceprivate lateinit var responseManager: ResponseManager
44.
DBFluteフェス 2018■ Nullableの整理が必要■
ラムダの整理が必要➔ たまにラムダの変換が失敗している■ ifなどは式である(return if ….みたいな)■ 定数のconstがなくなる■ StringBuilderをbuildStringにする■ String Templateを使うその他の自動変換問題44
45.
DBFluteフェス 2018■ 書き方は大きくは変わらない実行メソッド45@Executefun
index(): HtmlResponse {val recentProducts = mappingToProducts(selectRecentProductList())val highPriceProducts = mappingToProducts(selectHighPriceProductList())return asHtml(ParadeplazaHtmlPath.path_Mypage_MypageHtml).renderWith { data ->data.register("recentProducts", recentProducts)data.register("highPriceProducts", highPriceProducts)}}
46.
DBFluteフェス 2018■ NullableなvarになるFormクラス46class
MemberAddForm {@Requiredvar memberName: String? = null@Requiredvar memberAccount: String? = null@ValidateTypeFailure // using calendar so basically unneeded but just in casevar birthdate: LocalDate? = null@Requiredvar memberStatus: CDef.MemberStatus? = null}
47.
DBFluteフェス 2018■ 普通にBhvを使える➔dataクラスにするいいことがあるか(?)DBFlute関連47private
fun insertMember(form: MemberAddForm) {val member = Member()member.memberName = form.memberNamemember.memberAccount = form.memberAccountmember.birthdate = form.birthdatemember.memberStatusCodeAsMemberStatus = form.memberStatusif (member.isMemberStatusCodeFormalized) {member.formalizedDatetime = timeManager.currentDateTime()}memberBhv.insert(member)}
48.
DBFluteフェス 2018まとめ48
49.
DBFluteフェス 2018■ LastaFluteでもKotlinを使える➔
DBFlute/LastaFluteの最適化は必要■ Paradeplazaを参考にしてください■ DBFluteの自動生成は利用できる■ 既存プロジェクトでも部分適用も可能まとめ49
Download
[8]
ページ先頭
©2009-2025
Movatter.jp