SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
明日からちょっと
KotlinでAndroidが書きたくなる(かもしれない?)
SAM変換と拡張関数
 
室星亮太
2014/7/4(金))第2回)かわいいKotlin勉強会)#jkug
突然ですが質問です!
Kotlin書いたことある方?
「Kotlin'書いたことない」
ってイベントページに書いたけれど
本当は書いたことある方?
Androidアプリ
開発したことある方?
ありがとうございました!
お前だれよ
• 名前":"室星亮太
• 仕事":"Androidアプリ開発(Java)、Unityゲーム開発(C#)
• Twi6er":"@RyotaMurohoshi
• 投稿先":"h6p://qiita.com/RyotaMurohoshi
• 興味":"Kotlin,"Groovy,"C#,"Unity,"SonyのWearable"Device
AndroidアプリをJavaで開発していて、
「なんでこんなに冗長なコードが必要なんだ!」
ってイラっとすることはありませんか?
私はあります!
C#を業務で使い始めたりしたり、
Groovyをほんのちょっと勉強したら、
「なんでJava、〇〇できないのー!」
って、イラッとなりました
そこでKotlinですね!
明日からちょっと
KotlinでAndroidが書きたくなる(かもしれない?)
SAM変換と拡張関数
と題して今日はLTします!
いらっとする冗長なコード1
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "clicked");
}
});
どんなAndroid入門書にも載っている、アクティビティでよくみるコード
Kotlinで書いたやつと比べると、冗長なのが一目瞭然!
Kotlinだとすっきり
button.setOnClickListener { Log.v(TAG, "clicked") }
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!");
}
});
行数が短くなったことではなく、
「冗長な部分は書く必要がなく
本質的なことだけ書けばよくなった」
というのがミソ
Javaのコードをもう一度見てみましょう
button.setOnClickListener(new View.OnClickListener() { // new以降本質じゃない
@Override // <- 本質じゃない
public void onClick(View v) { // <- 本質じゃない
Log.v(TAG, "clicked!");
} // <- 本質じゃない
}); // <- 本質じゃない
Javaは本質じゃない部分が多い。Kotlinは本質のみを記述すればいい
Kotlinはなぜあんな記述ができるのか?
Single'Abstract'Method'Conversions
SAM変換
h"p://blog.jetbrains.com/kotlin/2013/08/kotlin;m6;is;here/
SAM$インターフェース
一つの(Single))抽象(Abstract))メソッド(Method)
をもつインターフェース
• Runnable):)void)run()
• View.OnClickListener):)void)onClick(View)v)
• Response.Listener<T>):)void)onResponse(T)response))
など、他にもたくさん
SAM変換
関数リテラル!">!SAMインターフェース!な変換
Kotlinでは、SAMインターフェースを引数にとるメソッドで、
引数の型と順序そして返値型が一致する関数リテラルを渡すと
インターフェースに変換してくれる
SAMインターフェースが必要な所も、関数リテラルでスッキリ!
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)
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
引数に関数リテラルを渡さないといけない
SAM変換で無駄コードを無くせますね!
もう一例
VolleyのStringRequest
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();
}
}
);
無駄な部分が多く、縦に長い...
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変換可能
名前付き引数で可読性アップ
ちょっと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
ちょっと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
実はAndroidStudioとIntelliJだと
一つだけメソッドを実装した匿名クラスがいい感じに!(SAM型も)
button.setOnClickListener((v) -> {Log.v(TAG, "clicked");});
IDE上ではいい感じで折り畳まれてますが、
githubとかでコードリビューするときは、
ほら畳まれないし...
h"p://qiita.com/RyotaMurohoshi/items/0ce799c747d91756131a
以上
SAM変換でした。
いらっとする冗長なコード2
ImageView imageView = (ImageView)findViewById(R.id.image_view);
どんなAndroid入門書にも載っている、アクティビティでよくみるコード
けれど「ImageView」ってなんで2回書く必要あるん?型推論してくれてもいいじゃん!
とりあえず継承します?
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);
けど継承って
• 継承むずい
• 「継承が許されるのは小学生までだよね」、だと...
• Ac$vityのサブクラスいくつかあるけど、全部に更にサブクラス
作ってメソッド定義する?
ちょっとないかな...
さてどうしましょう?
• 冗長な記述が頻発したり、よく使う処理がある
• Ac$vityとかに、メソッドを追加したい!
• けど継承したくない)or)できない
Extension)Funcitons
拡張関数
h"p://confluence.jetbrains.com/display/Kotlin/Extension+func=ons
Extension)Funcitons(拡張関数)とは
• 継承せずにメソッドを追加できる"
• 継承禁止なクラスにもメソッドを追加できる
• privateなメンバにアクセスはできない
• メソッドをオーバーライドはできない
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
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) // <- 注目
}
}
• fun$ClassName.methodName(hoge$:$Hoge)$:$Fuga"みたいな感じで
メソッドを定義します
• 定義した拡張メソッドをimportします
• そうすると普通のメソッドのように使えます
• この例だとAc+vityのサブクラスだけでなく、
FragmentAc+vity、Ac+onBarAc+vity、他のサブクラスでも使え
ます(継承で定義するなら、各クラスにメソッド定義が必要)
Extension)Func-onsを使えば...
• 継承しなくてもメソッドを追加できますね
• たくさんのクラスにメソッドを追加しなくてもいいですね
• 自作のメソッドで冗長な記述をスッキリできますね!
ちょっと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なメソッドとして拡張メソッドを定義します。
ちょっとC#もみてみましょう
C#は
• Javaのpackageアクセスのような、メンバを同じ名前空間だけに
公開するという制限がない
• privateでsta.cな入れ子のクラスは作れる
• が↑なクラスでは拡張メソッドを定義できない
このクラスにだけ、この名前空間でだけ使えるという拡張メソッドを定義できない!
一方Kotlinでは
• packageにその名前空間とそのサブ名前空間限定で
• クラス内にprivateアクセスレベルで
• 関数内にローカル関数内として、ローカルスコープで
Kotlinだと拡張関数を定義できる!
以上
拡張関数でした。
質問ありますか?
ご清聴ありがとうございました!
 
SAM変換について(Qiita)
h"p://qiita.com/RyotaMurohoshi

Contenu connexe

En vedette

もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4Yukiya Nakagawa
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたいyy yank
 
Kotlinでマッチョする話
Kotlinでマッチョする話Kotlinでマッチョする話
Kotlinでマッチョする話Shinobu Okano
 
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?Kotlin: Why Do You Care?
Kotlin: Why Do You Care?intelliyole
 
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!Ryota Murohoshi
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlinRyota Murohoshi
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係yy yank
 
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有Shinobu Okano
 

En vedette (9)

もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたい
 
Kotlinでマッチョする話
Kotlinでマッチョする話Kotlinでマッチョする話
Kotlinでマッチョする話
 
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?Kotlin: Why Do You Care?
Kotlin: Why Do You Care?
 
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
 
minne の API 改善
minne の API 改善minne の API 改善
minne の API 改善
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
 
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
 

Similaire à 明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数

Web socket and gRPC
Web socket and gRPCWeb socket and gRPC
Web socket and gRPCTIS Inc
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platformToru Yamaguchi
 
もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選Masayuki Akiyama
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumilab
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんYukari Sakurai
 
Titanium MobileでOAuth
Titanium MobileでOAuthTitanium MobileでOAuth
Titanium MobileでOAuthKosuke Isobe
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門Shohei Arai
 
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会yoshinori matsumoto
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talkmitamex4u
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
モバイル開発@symfony
モバイル開発@symfonyモバイル開発@symfony
モバイル開発@symfonyDaichi Kamemoto
 
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようSlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようShigeo Ueda
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキングTakashi Okamoto
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発Kazunori Hamamoto
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Takashi EGAWA
 

Similaire à 明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数 (20)

Web socket and gRPC
Web socket and gRPCWeb socket and gRPC
Web socket and gRPC
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選
 
CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
 
Titanium MobileでOAuth
Titanium MobileでOAuthTitanium MobileでOAuth
Titanium MobileでOAuth
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
 
Mobylet20100613
Mobylet20100613Mobylet20100613
Mobylet20100613
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
モバイル開発@symfony
モバイル開発@symfonyモバイル開発@symfony
モバイル開発@symfony
 
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようSlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
 
Jqm20120804 publish
Jqm20120804 publishJqm20120804 publish
Jqm20120804 publish
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
 

Plus de Ryota Murohoshi

【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】Ryota Murohoshi
 
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】Ryota Murohoshi
 
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっかJavaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっかRyota Murohoshi
 
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?Ryota Murohoshi
 
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件C#のList_TがIListを実装している件
C#のList_TがIListを実装している件Ryota Murohoshi
 
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?Ryota Murohoshi
 
広告ネイティブプラグインの辛かった話しよっか
広告ネイティブプラグインの辛かった話しよっか広告ネイティブプラグインの辛かった話しよっか
広告ネイティブプラグインの辛かった話しよっかRyota Murohoshi
 
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張Ryota Murohoshi
 
UnityでのLINQ活用例
UnityでのLINQ活用例UnityでのLINQ活用例
UnityでのLINQ活用例Ryota Murohoshi
 
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!Ryota Murohoshi
 
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!Ryota Murohoshi
 
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRyota Murohoshi
 
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?共変戻り値型って知ってますか?
共変戻り値型って知ってますか?Ryota Murohoshi
 

Plus de Ryota Murohoshi (16)

【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】
 
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
 
「var禁止」禁止
「var禁止」禁止「var禁止」禁止
「var禁止」禁止
 
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっかJavaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっか
 
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
 
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件C#のList_TがIListを実装している件
C#のList_TがIListを実装している件
 
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?
 
広告ネイティブプラグインの辛かった話しよっか
広告ネイティブプラグインの辛かった話しよっか広告ネイティブプラグインの辛かった話しよっか
広告ネイティブプラグインの辛かった話しよっか
 
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
 
T4使ってみた
T4使ってみたT4使ってみた
T4使ってみた
 
UnityでのLINQ活用例
UnityでのLINQ活用例UnityでのLINQ活用例
UnityでのLINQ活用例
 
私とUnityとLINQと
私とUnityとLINQと私とUnityとLINQと
私とUnityとLINQと
 
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!
 
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
 
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
 
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?共変戻り値型って知ってますか?
共変戻り値型って知ってますか?
 

明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数