SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
KotlinAndroidLib
を使ってみた
2013/07/26 @patorash
第一回かわいいKotlin勉強会資料
名前: 尾古 豊明
twitter: @patorash
所属: 株式会社リゾーム
業務内容:
主にショッピングセンター向けのグループウェ
アをRuby on Railsで作ってます。
でも最近は別のことをやってます。
Kotlin+JavaFXとか。
趣味でAndroidアプリ作ったりしてます。
自己紹介
● リゾームに入社するまではRubyやってな
かった。仕事でRubyするようになってRuby
の楽しさを知った。
● Rubyの影響で、JavaでAndroidアプリ作る
のが苦痛になってきた。
● Ruboto(JRuby on Android)に
手を出すが起動遅すぎて断念!
● この方向を探る(Pindah)
でもしっくりこない。
● @ore_publicにKotlinでAndroidアプリ書
けることを聞く。やってみた。
Kotlinとの出会いについて
良さそうな予感がした。
● 静的型付(固い)
● 型推論(型を書かなくてもよい)
● 高階関数(関数を関数に渡せる)
● 拡張関数(クラスをそのまま拡張)
● 文法が簡潔(セミコロン要らない)
● 条件式(if式, when式。戻り値がある)
何がいいの?Kotlin
● Javaがわかる人ならKotlinはすぐ理解でき
ると思われる
(学習コストが少ない)
● Javaの資産が使える
● プロジェクトにJavaとKotlinのコードを混在
させることができる
他にもKotlinが優れている点
● いわゆるバッテリー残量を
表示するウィジェットアプリ
● Wi-FiのON-OFF, BlueToothのON-OFFな
ど、電源管理系の機能とマナーモード系
の機能を付けてる
● 2010年にリリースしたアプリでDL数は
50,000超くらい。
● 機能拡張の余地が殆どないので焼き直し
に最適と判断した。
既存のアプリ(BatteryCrystal)を
Kotlinで書き直してみた
● ソースコードが4/5くらいになった。
● コードの見通しがよくなったのでリファクタリ
ングしやすくなった。
Kotlinにした結果
Kotlinらしい書き方を求めて
Githubへ
KotlinAndroidLibを発見!
しかし動かない…(´・ω・`)
M2のときのライブラリだから…
動かないのでforkして直した
● ソースコードがJavaの頃と比べて3/4くらい
になった。
● コードがカッコ良くなった。
KotlinAndroidLibを使った結果
サンプルコードで比較
(Java, Kotlin, KotlinAndroidLib)
Java
Button button = (Button) findViewById(R.id.button);
val button = findViewById(R.id.button) as Button
Kotlin
val button = findView<Button>(R.id.button)
KotlinAndroidLib
findViewById
最も短く書ける
型宣言が要らないから短く書ける
Java
public void nextActivity() {
Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
startActivity(intent);
}
fun nextActivity() {
startActivity(Intent(Settings.ACTION_BLUETOOTH_SETTINGS))
}
Kotlin
fun nextActivity() = startActivity(Settings.ACTION_BLUETOOTH_SETTINGS.toIntent())
KotlinAndroidLib
Intent
文字列からIntent生成できるよう拡張されてる
newがないので短く書ける
Java
button.setOnClickListener(new OnClickListener() {
@override
public void onClick(View v) {
処理
}
});
button.setOnClickListener(object: OnClickListener(){
override public fun onClick(v: View?) {
処理
}
})
Kotlin
button.setOnClickListener { v -> 処理 }
KotlinAndroidLib
OnClickListener
アノテーションを先頭に書く。 @不要
onClickを実装するのは自明なので
省略できるようになっている。
Java
new Thread(new Runnable(){
@override
public void run() {
処理
}
}).start();
Thread(runnable {
処理
}).start()
Kotlin
async{ 処理 }
KotlinAndroidLib
Thread
比較的短く書くことができる
短い!簡潔!
Java
Editor editor = sharedPreferences.edit(); // 編集用インスタンス取得
editor.putString("key", "value"); // 書込
editor.commit(); // 保存
val editor = sharedPreferences.edit()!!
editor.putString("key", "value")
editor.commit()
Kotlin
sharedPreferences.edit{ putString("key", "value") }
KotlinAndroidLib
SharedPreferences
型推論で少し短くなった程度
ブロックで記述可能。
コミットし忘れなし。
● Javaだと冗長なコードが、Kotlinだとシン
プルに書けるようになる。
● KotlinAndroidLibは、Kotlinの関数機能を
ふんだんに使ってあり、簡潔に書くことが
できる。
● KotlinAndroidLibのコードには、Kotlinら
しい書き方が詰まってる。
コードを読むと、勉強になる。
まだまだあるけれど…
ご清聴ありがとうございました

Más contenido relacionado

La actualidad más candente

DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることDSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
Tomohiro Nishimura
 
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
tatsuo sakurai
 
一般社団法人日本Rubyの会について
一般社団法人日本Rubyの会について一般社団法人日本Rubyの会について
一般社団法人日本Rubyの会について
masayoshi takahashi
 

La actualidad más candente (20)

KuromojiをKotlinで動かす
KuromojiをKotlinで動かすKuromojiをKotlinで動かす
KuromojiをKotlinで動かす
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な API3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な API
 
Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪
 
Regional Ruby Kaigi
Regional Ruby KaigiRegional Ruby Kaigi
Regional Ruby Kaigi
 
RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
 
RubyとRailsのおいしい使い方 ver. okayama1
RubyとRailsのおいしい使い方 ver. okayama1RubyとRailsのおいしい使い方 ver. okayama1
RubyとRailsのおいしい使い方 ver. okayama1
 
Ruby with My Life
Ruby with My LifeRuby with My Life
Ruby with My Life
 
テックリンク資料20170529
テックリンク資料20170529テックリンク資料20170529
テックリンク資料20170529
 
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
 
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることDSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
 
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuriで、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案
 
How about travel while working?
How about travel while working?How about travel while working?
How about travel while working?
 
コンテキストと仲良く
コンテキストと仲良くコンテキストと仲良く
コンテキストと仲良く
 
Yokohama.vim
Yokohama.vimYokohama.vim
Yokohama.vim
 
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
 
取り柄のないボクがGinza.rb、社内勉強会、技術書典の出展とか、なんでやってるんだっけ?
取り柄のないボクがGinza.rb、社内勉強会、技術書典の出展とか、なんでやってるんだっけ?取り柄のないボクがGinza.rb、社内勉強会、技術書典の出展とか、なんでやってるんだっけ?
取り柄のないボクがGinza.rb、社内勉強会、技術書典の出展とか、なんでやってるんだっけ?
 
一般社団法人日本Rubyの会について
一般社団法人日本Rubyの会について一般社団法人日本Rubyの会について
一般社団法人日本Rubyの会について
 

Similar a KotlinAndroidLibを使ってみた

Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)
Shinichirou Nakamura
 
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
takuma mori
 
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
Masaya TARUI
 

Similar a KotlinAndroidLibを使ってみた (20)

Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて   第16回 岡山ruby, ruby on rails勉強会Mrubyについて   第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
 
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLRubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
 
RubySeminar16_Analyze
RubySeminar16_AnalyzeRubySeminar16_Analyze
RubySeminar16_Analyze
 
Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)
 
KotlinでWebアプリ開発
KotlinでWebアプリ開発KotlinでWebアプリ開発
KotlinでWebアプリ開発
 
Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する
 
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
 
RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩
 
2015 12-19-ruby rails
2015 12-19-ruby rails2015 12-19-ruby rails
2015 12-19-ruby rails
 
【Ltech#0】RubyKaigi2018報告会
【Ltech#0】RubyKaigi2018報告会【Ltech#0】RubyKaigi2018報告会
【Ltech#0】RubyKaigi2018報告会
 
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltKotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8lt
 
Rosbag search system
Rosbag search systemRosbag search system
Rosbag search system
 
Rails Girls Tokyo 5th
Rails Girls Tokyo 5thRails Girls Tokyo 5th
Rails Girls Tokyo 5th
 
okrk01_ kitanokunikara-konnnichinu
okrk01_ kitanokunikara-konnnichinuokrk01_ kitanokunikara-konnnichinu
okrk01_ kitanokunikara-konnnichinu
 
RubyMotionを1週間 触ってみた印象
RubyMotionを1週間 触ってみた印象RubyMotionを1週間 触ってみた印象
RubyMotionを1週間 触ってみた印象
 
Rubymotionはオススメか?
Rubymotionはオススメか?Rubymotionはオススメか?
Rubymotionはオススメか?
 
YJTC18 C-1 Kotlin導入の状況と展望
YJTC18 C-1 Kotlin導入の状況と展望YJTC18 C-1 Kotlin導入の状況と展望
YJTC18 C-1 Kotlin導入の状況と展望
 
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
 
Rubyのススメ
RubyのススメRubyのススメ
Rubyのススメ
 
インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話
 

Más de 豊明 尾古

Más de 豊明 尾古 (18)

OSS-DB 取得のススメ
OSS-DB 取得のススメOSS-DB 取得のススメ
OSS-DB 取得のススメ
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について
 
ActiveRecord::Enumのススメ
ActiveRecord::EnumのススメActiveRecord::Enumのススメ
ActiveRecord::Enumのススメ
 
便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips
 
ウェブアプリケーションのためのユニバーサルデザインを読んだので共有する
ウェブアプリケーションのためのユニバーサルデザインを読んだので共有するウェブアプリケーションのためのユニバーサルデザインを読んだので共有する
ウェブアプリケーションのためのユニバーサルデザインを読んだので共有する
 
Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術
 
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
 
Slimの紹介
Slimの紹介Slimの紹介
Slimの紹介
 
Calabashでbddしようぜ
CalabashでbddしようぜCalabashでbddしようぜ
Calabashでbddしようぜ
 
Rubotoを試してみた
Rubotoを試してみたRubotoを試してみた
Rubotoを試してみた
 
Successful git
Successful gitSuccessful git
Successful git
 
アプリ内課金してみた
アプリ内課金してみたアプリ内課金してみた
アプリ内課金してみた
 
Webデザイナーのためのandroid用レイアウト講座
Webデザイナーのためのandroid用レイアウト講座Webデザイナーのためのandroid用レイアウト講座
Webデザイナーのためのandroid用レイアウト講座
 
Android 3.Xアプリを開発してみて
Android 3.Xアプリを開発してみてAndroid 3.Xアプリを開発してみて
Android 3.Xアプリを開発してみて
 
Gae開発入門
Gae開発入門Gae開発入門
Gae開発入門
 
ABC2011 Winter #jag4
ABC2011 Winter #jag4ABC2011 Winter #jag4
ABC2011 Winter #jag4
 
初めてのC2DM
初めてのC2DM初めてのC2DM
初めてのC2DM
 

KotlinAndroidLibを使ってみた