Submit Search
Upload
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
•
2 likes
•
6,369 views
Ryota Murohoshi
Follow
2014/07/04 かわいいKotlin勉強会で行った発表の資料です
Read less
Read more
Report
Share
Report
Share
1 of 44
Download now
Download to read offline
Recommended
Hubotを使ってbotをつくろう!
Hubotを使ってbotをつくろう!
Daisuke Kikuchi
Hubotを用いて、HipChatと連携。 HipChatからJenkinsで自動デプロイしたり、 Backlogの更新をHipChatに通知したり。 開発のお供にいかがでしょうか。
SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介
Shinichi Kozake
4/2(土) Kotlin 1.0リリース記念勉強会 in 京都の資料です。
KotlinでROSノードを書いてみた
KotlinでROSノードを書いてみた
Naoki Iwata
2015/10/04 ROS勉強会
Kotlinソースコード探訪
Kotlinソースコード探訪
yy yank
Kotlin Internal勉強会の発表資料です https://connpass.com/event/40360/
とある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャ
Shinichi Kozake
DevLOVE関西 現場のアーキテクチャの話をしてみませんか? のセッション資料です。
Kotlin
Kotlin
Shumpei Hozumi
プログラミング言語 kotlin の紹介スライドです
kotlinについて
kotlinについて
隆史 川中
kotlinについて話してみました。 コードはほとんどないです。
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8lt
Junpei Matsuda
Recommends to develop Android application with Kotlin. (Japanese)
Recommended
Hubotを使ってbotをつくろう!
Hubotを使ってbotをつくろう!
Daisuke Kikuchi
Hubotを用いて、HipChatと連携。 HipChatからJenkinsで自動デプロイしたり、 Backlogの更新をHipChatに通知したり。 開発のお供にいかがでしょうか。
SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介
Shinichi Kozake
4/2(土) Kotlin 1.0リリース記念勉強会 in 京都の資料です。
KotlinでROSノードを書いてみた
KotlinでROSノードを書いてみた
Naoki Iwata
2015/10/04 ROS勉強会
Kotlinソースコード探訪
Kotlinソースコード探訪
yy yank
Kotlin Internal勉強会の発表資料です https://connpass.com/event/40360/
とある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャ
Shinichi Kozake
DevLOVE関西 現場のアーキテクチャの話をしてみませんか? のセッション資料です。
Kotlin
Kotlin
Shumpei Hozumi
プログラミング言語 kotlin の紹介スライドです
kotlinについて
kotlinについて
隆史 川中
kotlinについて話してみました。 コードはほとんどないです。
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8lt
Junpei Matsuda
Recommends to develop Android application with Kotlin. (Japanese)
もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4
Yukiya Nakagawa
NDS in Niigata #4 http://nds-meetup.connpass.com/event/10998/ 2014年3月のKotlin話の続きみたいなものです。
Kotlinあるある言いたい
Kotlinあるある言いたい
yy yank
【東京】Kotlin Birthday Party #jkug のネタLT資料です
Kotlinでマッチョする話
Kotlinでマッチョする話
Shinobu Okano
Kotlinでマッチョする話 Retty Tech Cafe #8 https://retty.connpass.com/event/45628/
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?
intelliyole
Kotlin talk from JetBrains Night Munich (25 Nov 2015)
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
Ryota Murohoshi
2016年5月21日に開催された「まどすた #1 ~ //build/ 2016 振り返り」のLTで発表した、「UnityでC#6.0が使える未来がそろそろ来そう!」の資料です。
minne の API 改善
minne の API 改善
Toshihiro Gotou
Rubyエンジニアが語る、2016年の振り返りとこれから GMOペパボ株式会社・株式会社Speee minne で 2016 年に行った API 改善の一部を紹介
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
Ryota Murohoshi
普段C#を使っている僕から見たKotlin 2015/06/05(金)に開催された第3回 かわいいKotlin勉強会の発表資料です。 #jkug https://kotlin.doorkeeper.jp/events/23515
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
yy yank
JJUG CCC Fall 2016のの発表資料です
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
DroidKaigi Android学ぶを君へ。生き抜くためのナレッジ共有 Note : https://github.com/operando/DroidKaigi
Web socket and gRPC
Web socket and gRPC
TIS Inc
Chuo-line meetup #2
ngCore engine for mobage platform
ngCore engine for mobage platform
Toru Yamaguchi
Introduction ngCore that is smartphone sdk for social platform.
もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選
Masayuki Akiyama
社内勉強会のライトニングトークで用いた資料です。 プログラマ一年生を対象にしています。
CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発
アシアル株式会社
Cordova勉強会 第2回にて講演した内容です。
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumilab
appcelerator Titanium Mobile を利用すると iPhone/Android のネイティブアプリを JavaScript で開発することができます。 普通の iPhone/Android アプリの開発と比較しながらその様子を 紹介します。
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
サイラボがスタートする、ソーシャルアプリに関する公開社内勉強会の第1回目の資料です。 ソーシャルアプリが持つ無限の可能性 サイテック株式会社 代表取締役 谷田部輝真 サーバサイドプログラミングで行うmixiアプリ開発 電脳製作株式会社 技師 新井元基
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Yukari Sakurai
Androidの通信周りを軽くLTしました。
Titanium MobileでOAuth
Titanium MobileでOAuth
Kosuke Isobe
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
Shohei Arai
JavaScriptを書いたことがある人向けに、Go言語の言語仕様を紹介します。
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
yoshinori matsumoto
これからHTML5を書く人のためのセキュリティ 2012年7月21日 HTML5など勉強会
Mobylet20100613
Mobylet20100613
Shin Takeuchi
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
mitamex4u
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
Groovy Bootcamp Handson slide
More Related Content
Viewers also liked
もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4
Yukiya Nakagawa
NDS in Niigata #4 http://nds-meetup.connpass.com/event/10998/ 2014年3月のKotlin話の続きみたいなものです。
Kotlinあるある言いたい
Kotlinあるある言いたい
yy yank
【東京】Kotlin Birthday Party #jkug のネタLT資料です
Kotlinでマッチョする話
Kotlinでマッチョする話
Shinobu Okano
Kotlinでマッチョする話 Retty Tech Cafe #8 https://retty.connpass.com/event/45628/
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?
intelliyole
Kotlin talk from JetBrains Night Munich (25 Nov 2015)
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
Ryota Murohoshi
2016年5月21日に開催された「まどすた #1 ~ //build/ 2016 振り返り」のLTで発表した、「UnityでC#6.0が使える未来がそろそろ来そう!」の資料です。
minne の API 改善
minne の API 改善
Toshihiro Gotou
Rubyエンジニアが語る、2016年の振り返りとこれから GMOペパボ株式会社・株式会社Speee minne で 2016 年に行った API 改善の一部を紹介
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
Ryota Murohoshi
普段C#を使っている僕から見たKotlin 2015/06/05(金)に開催された第3回 かわいいKotlin勉強会の発表資料です。 #jkug https://kotlin.doorkeeper.jp/events/23515
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
yy yank
JJUG CCC Fall 2016のの発表資料です
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
DroidKaigi Android学ぶを君へ。生き抜くためのナレッジ共有 Note : https://github.com/operando/DroidKaigi
Viewers also liked
(9)
もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4
Kotlinあるある言いたい
Kotlinあるある言いたい
Kotlinでマッチョする話
Kotlinでマッチョする話
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
minne の API 改善
minne の API 改善
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Similar to 明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
Web socket and gRPC
Web socket and gRPC
TIS Inc
Chuo-line meetup #2
ngCore engine for mobage platform
ngCore engine for mobage platform
Toru Yamaguchi
Introduction ngCore that is smartphone sdk for social platform.
もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選
Masayuki Akiyama
社内勉強会のライトニングトークで用いた資料です。 プログラマ一年生を対象にしています。
CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発
アシアル株式会社
Cordova勉強会 第2回にて講演した内容です。
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumilab
appcelerator Titanium Mobile を利用すると iPhone/Android のネイティブアプリを JavaScript で開発することができます。 普通の iPhone/Android アプリの開発と比較しながらその様子を 紹介します。
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
サイラボがスタートする、ソーシャルアプリに関する公開社内勉強会の第1回目の資料です。 ソーシャルアプリが持つ無限の可能性 サイテック株式会社 代表取締役 谷田部輝真 サーバサイドプログラミングで行うmixiアプリ開発 電脳製作株式会社 技師 新井元基
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Yukari Sakurai
Androidの通信周りを軽くLTしました。
Titanium MobileでOAuth
Titanium MobileでOAuth
Kosuke Isobe
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
Shohei Arai
JavaScriptを書いたことがある人向けに、Go言語の言語仕様を紹介します。
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
yoshinori matsumoto
これからHTML5を書く人のためのセキュリティ 2012年7月21日 HTML5など勉強会
Mobylet20100613
Mobylet20100613
Shin Takeuchi
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
mitamex4u
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
Groovy Bootcamp Handson slide
モバイル開発@symfony
モバイル開発@symfony
Daichi Kamemoto
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
Shigeo Ueda
SlackにあるIncomingWebhooksとOutgoingWebhooksのIntegrationを使ってRaspberryPiと連携させます。
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
Takashi Okamoto
jQuery MobileとPhoneGapによるスマートフォンアプリの開発について紹介
Jqm20120804 publish
Jqm20120804 publish
Takashi Okamoto
今からでも遅くないC#開発
今からでも遅くないC#開発
Kazunori Hamamoto
Hacker Tackleで発表した、C♯開発を今から始める方向けのセッションです。
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
登壇資料です https://vscode.connpass.com/event/221961/
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
Takashi EGAWA
how to pass data betweein activities. This slide was written in Japanese.
Similar to 明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
(20)
Web socket and gRPC
Web socket and gRPC
ngCore engine for mobage platform
ngCore engine for mobage platform
もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選
CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Titanium MobileでOAuth
Titanium MobileでOAuth
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
Mobylet20100613
Mobylet20100613
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
モバイル開発@symfony
モバイル開発@symfony
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
Jqm20120804 publish
Jqm20120804 publish
今からでも遅くないC#開発
今からでも遅くないC#開発
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
More from Ryota Murohoshi
【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】
Ryota Murohoshi
2016/03/20(日)に開催したUnity部もくもく会でのLT兼クロージングトークの資料です。
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
Ryota Murohoshi
2016年02月26日(金)に開催された、【東京】Kotlin Birthday Party での発表資料です! エモいやつです。 #jkug
「var禁止」禁止
「var禁止」禁止
Ryota Murohoshi
2016/02/20 Hokuriku Comm CampのLTで発表した際のプレゼンテーションスライドです。
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっか
Ryota Murohoshi
2016/01/21(木)に行われた第1回ゆるゆる高専エンジニアLT大会 at FULLER の発表資料です。
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
Ryota Murohoshi
2015/04/11のJXUG第4回で発表した資料です
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件
Ryota Murohoshi
2015/01/31の富山合同勉強会 .NET & Java ~ぶりしゃぶで休もう~で発表した際の資料です
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?
Ryota Murohoshi
2015/01/15 Xamarin 本社に Mono 申したい会 兼 Xamarin 新年会で発表した際の資料です
広告ネイティブプラグインの辛かった話しよっか
広告ネイティブプラグインの辛かった話しよっか
Ryota Murohoshi
2015/12/05(土)【年末だよ】 Unity お・と・なのLT大会【ポロリしてもいいのよ】 の発表資料です。 ほぼ、そのままですが、関連資料のリンクを追加しました。
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
Ryota Murohoshi
2015/09/26(土) comm tech festivalでの 「UnityでC#を勉強しはじめた私の主張」 の資料です。 C#erな方、.NETマスターな方、ご意見、ご感想、つっこみをぜひぜひよろしくお願いします。 [Comm Tech Festival](https://comuplus.doorkeeper.jp/events/30403)
T4使ってみた
T4使ってみた
Ryota Murohoshi
2015/02/24(火) Unity部主催、日本Microsoft様で開催されたVisual Studio Tools for Unityの勉強会で行ったLTの資料です。
UnityでのLINQ活用例
UnityでのLINQ活用例
Ryota Murohoshi
2015/02/20(金)の勉強会の資料です。
私とUnityとLINQと
私とUnityとLINQと
Ryota Murohoshi
# 私とUnityとLINQと ## @RyotaMurohoshi ### 2014/12/20 プログラミング生放送勉強会 第32回
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!
Ryota Murohoshi
「LINQ」っていう名前だけでも 覚えて帰ってください! 2014/12/18(木) Unity.お・と・な.のLT大会2 の資料です。
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
Ryota Murohoshi
2014/11/22(土)に開かれた 第2回 Japan Xamarin User Group Conference 東日本編 (https://atnd.org/events/57246) のLTで発表した資料です。
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
Ryota Murohoshi
2014/10/28にpixivさんで行われたRxJavaNightの@RyotaMurohoshiの資料です。
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?
Ryota Murohoshi
JJUGビール片手にLT&納涼会でLT (2014/08/22)の発表分
More from Ryota Murohoshi
(16)
【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
「var禁止」禁止
「var禁止」禁止
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっか
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?
広告ネイティブプラグインの辛かった話しよっか
広告ネイティブプラグインの辛かった話しよっか
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
T4使ってみた
T4使ってみた
UnityでのLINQ活用例
UnityでのLINQ活用例
私とUnityとLINQと
私とUnityとLINQと
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
1.
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?) SAM変換と拡張関数 室星亮太 2014/7/4(金))第2回)かわいいKotlin勉強会)#jkug
2.
突然ですが質問です!
3.
Kotlin書いたことある方?
4.
「Kotlin'書いたことない」 ってイベントページに書いたけれど 本当は書いたことある方?
5.
Androidアプリ 開発したことある方?
6.
ありがとうございました!
7.
お前だれよ • 名前":"室星亮太 • 仕事":"Androidアプリ開発(Java)、Unityゲーム開発(C#) •
Twi6er":"@RyotaMurohoshi • 投稿先":"h6p://qiita.com/RyotaMurohoshi • 興味":"Kotlin,"Groovy,"C#,"Unity,"SonyのWearable"Device
8.
AndroidアプリをJavaで開発していて、 「なんでこんなに冗長なコードが必要なんだ!」 ってイラっとすることはありませんか?
9.
私はあります! C#を業務で使い始めたりしたり、 Groovyをほんのちょっと勉強したら、 「なんでJava、〇〇できないのー!」 って、イラッとなりました
10.
そこでKotlinですね!
11.
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?) SAM変換と拡張関数 と題して今日はLTします!
12.
いらっとする冗長なコード1 button.setOnClickListener(new View.OnClickListener() { @Override public
void onClick(View v) { Log.v(TAG, "clicked"); } }); どんなAndroid入門書にも載っている、アクティビティでよくみるコード Kotlinで書いたやつと比べると、冗長なのが一目瞭然!
13.
Kotlinだとすっきり button.setOnClickListener { Log.v(TAG,
"clicked") }
14.
Java、Kotlinそれぞれのクリックリスナー Kotlin button.setOnClickListener { Log.v(TAG,
"clicked") } Java button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.v(TAG, "clicked!"); } });
15.
行数が短くなったことではなく、 「冗長な部分は書く必要がなく 本質的なことだけ書けばよくなった」 というのがミソ
16.
Javaのコードをもう一度見てみましょう button.setOnClickListener(new View.OnClickListener() {
// new以降本質じゃない @Override // <- 本質じゃない public void onClick(View v) { // <- 本質じゃない Log.v(TAG, "clicked!"); } // <- 本質じゃない }); // <- 本質じゃない Javaは本質じゃない部分が多い。Kotlinは本質のみを記述すればいい Kotlinはなぜあんな記述ができるのか?
17.
Single'Abstract'Method'Conversions SAM変換 h"p://blog.jetbrains.com/kotlin/2013/08/kotlin;m6;is;here/
18.
SAM$インターフェース 一つの(Single))抽象(Abstract))メソッド(Method) をもつインターフェース • Runnable):)void)run() • View.OnClickListener):)void)onClick(View)v) •
Response.Listener<T>):)void)onResponse(T)response)) など、他にもたくさん
19.
SAM変換 関数リテラル!">!SAMインターフェース!な変換 Kotlinでは、SAMインターフェースを引数にとるメソッドで、 引数の型と順序そして返値型が一致する関数リテラルを渡すと インターフェースに変換してくれる SAMインターフェースが必要な所も、関数リテラルでスッキリ!
20.
SAM変換できる例 button.setOnClickListener( { (v
: View): Unit -> Log.v(TAG, "clicked") }) button.setOnClickListener( { v -> Log.v(TAG, "clicked")}) button.setOnClickListener{ v -> Log.v(TAG, "clicked") } button.setOnClickListener{ Log.v(TAG, "clicked") } val listener : (View) -> Unit = {v -> Log.v(TAG, "clicked") } //or val listener : (View) -> Unit = { Log.v(TAG, "click") } //or val listener = { (v : View) : Unit -> Log.v(TAG, "clicked") } button.setOnClickListener(listener)
21.
SAM変換できない例 // 下記はコンパイルエラー // Type
mismatch val listener : View.OnClickListener = { (v : View) : Unit -> Log.v(TAG, "clicked") } // 下記は実行時エラー // java.lang.ClassCastException val listener = { (v : View) : Unit -> Log.v(TAG, "clicked") } as View.OnClickListener 引数に関数リテラルを渡さないといけない
22.
SAM変換で無駄コードを無くせますね! もう一例 VolleyのStringRequest
23.
VolleyのStringRequest0Java版 StringRequest request =
new StringRequest( "https://www.google.co.jp/", new Response.Listener<String>() { @Override public void onResponse(String response) { Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(getApplicationContext(), "onErrorResponse", Toast.LENGTH_LONG).show(); } } ); 無駄な部分が多く、縦に長い...
24.
VolleyのStringRequest0Kotlin版 val request =
StringRequest( url = "https://www.google.co.jp/", listener = { response -> Toast.makeText(this, response, Toast.LENGTH_LONG).show() }, errorListener = { volleyError -> Toast.makeText(this, "onErrorResponse", Toast.LENGTH_LONG).show() } ); 型パラーメータがあるインターフェースもSAM変換可能 名前付き引数で可読性アップ
25.
ちょっとGroovyもみてみましょう GroovyもSAM変換が使えるようです。 button.setOnClickListener { v
-> Toas.makeText(this, "click", Toast.LENGTH_LONG).show() } Groovy&2.2からas演算子がいらなくなったそうです。 h"p://groovy.codehaus.org/Groovy+2.2+release+notes
26.
ちょっとGroovyもみてみましょう SAMインターフェースだけでなく、複数メソッドを持つインターフェースも Map+クロージャー+as演算子でこんな感じに! viewPager.setOnPageChangeListener ([ onPageScrollStateChanged: {
state -> Log.v(TAG, state) }, onPageScrolled : { position, positionOffset, positionOffsetPixels -> /*略*/ }, onPageSelected : { position -> Log.v(TAG, position) } ] as ViewPager.OnPageChangeListener) h"p://groovy.codehaus.org/Groovy+way+to+implement+interfaces
27.
実はAndroidStudioとIntelliJだと 一つだけメソッドを実装した匿名クラスがいい感じに!(SAM型も) button.setOnClickListener((v) -> {Log.v(TAG,
"clicked");}); IDE上ではいい感じで折り畳まれてますが、 githubとかでコードリビューするときは、 ほら畳まれないし... h"p://qiita.com/RyotaMurohoshi/items/0ce799c747d91756131a
28.
以上 SAM変換でした。
29.
いらっとする冗長なコード2 ImageView imageView =
(ImageView)findViewById(R.id.image_view); どんなAndroid入門書にも載っている、アクティビティでよくみるコード けれど「ImageView」ってなんで2回書く必要あるん?型推論してくれてもいいじゃん!
30.
とりあえず継承します? Ac#vityを継承したクラスBaseAc#vityにて、こんなメソッド定義すれば、 public <T extends
View> T findById(int viewId) { return (T)findViewById(viewId); } BaseAc'vityを更に継承したクラスでは、こんな感じでキャスト不要になりますね ImageView imageView = findById(R.id.image_view);
31.
けど継承って • 継承むずい • 「継承が許されるのは小学生までだよね」、だと... •
Ac$vityのサブクラスいくつかあるけど、全部に更にサブクラス 作ってメソッド定義する? ちょっとないかな...
32.
さてどうしましょう? • 冗長な記述が頻発したり、よく使う処理がある • Ac$vityとかに、メソッドを追加したい! •
けど継承したくない)or)できない
33.
Extension)Funcitons 拡張関数 h"p://confluence.jetbrains.com/display/Kotlin/Extension+func=ons
34.
Extension)Funcitons(拡張関数)とは • 継承せずにメソッドを追加できる" • 継承禁止なクラスにもメソッドを追加できる •
privateなメンバにアクセスはできない • メソッドをオーバーライドはできない
35.
Extension)Func-onsの例)定義側 extensions.kt内にて package com.mrstar.extensions import android.app.Activity import
android.view.View fun <T : View> Activity.findById (id : Int) : T = findViewById(id) as T
36.
Extension)Func-onsの例)利用側 package com.mrstar.android_with_kotlin // 略 import
com.mrstar.extensions.findById // <- 注目 public class MainActivity() : FragmentActivity() { // <- 注目 protected override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val textView: ImageView = findById (R.id.image_view) // <- 注目 } }
37.
• fun$ClassName.methodName(hoge$:$Hoge)$:$Fuga"みたいな感じで メソッドを定義します • 定義した拡張メソッドをimportします •
そうすると普通のメソッドのように使えます • この例だとAc+vityのサブクラスだけでなく、 FragmentAc+vity、Ac+onBarAc+vity、他のサブクラスでも使え ます(継承で定義するなら、各クラスにメソッド定義が必要)
38.
Extension)Func-onsを使えば... • 継承しなくてもメソッドを追加できますね • たくさんのクラスにメソッドを追加しなくてもいいですね •
自作のメソッドで冗長な記述をスッキリできますね!
39.
ちょっとC#もみてみましょう C#にも拡張関数と同じような拡張メソッドがあります。 // 定義側 public static
class StringExtensions { public static string Decorate(this string str, string symbol) { return string.Format("{0}{1}{2}", symbol, str, symbol); } } //利用側 string decoratedMessage = "Hello!".Decorate("===") こんな感じで、sta$cなクラスにsta$cなメソッドとして拡張メソッドを定義します。
40.
ちょっとC#もみてみましょう C#は • Javaのpackageアクセスのような、メンバを同じ名前空間だけに 公開するという制限がない • privateでsta.cな入れ子のクラスは作れる •
が↑なクラスでは拡張メソッドを定義できない このクラスにだけ、この名前空間でだけ使えるという拡張メソッドを定義できない!
41.
一方Kotlinでは • packageにその名前空間とそのサブ名前空間限定で • クラス内にprivateアクセスレベルで •
関数内にローカル関数内として、ローカルスコープで Kotlinだと拡張関数を定義できる!
42.
以上 拡張関数でした。
43.
質問ありますか?
44.
ご清聴ありがとうございました! SAM変換について(Qiita) h"p://qiita.com/RyotaMurohoshi
Download now