34
LINQSelect連弾ってやります? referencesource室星亮太 2015/04/11() 4Japan Xamarin User Group Conference

LINQ、Select連弾ってやります?

Embed Size (px)

Citation preview

Page 1: LINQ、Select連弾ってやります?

LINQ、Select連弾ってやります?【referencesource】

室星亮太

2015/04/11(土))第4回)Japan)Xamarin)User)Group)Conference

Page 2: LINQ、Select連弾ってやります?

すいません

Page 3: LINQ、Select連弾ってやります?

Xamarin.iOSとXamarin.Androidの話

Page 4: LINQ、Select連弾ってやります?

しません!

Page 5: LINQ、Select連弾ってやります?

お前だれよ?• 名前":"室星亮太

• 仕事":"Unityでゲーム開発

• Twi+er":"@RyotaMurohoshi

• 投稿先":"h+p://qiita.com/RyotaMurohoshi

Page 6: LINQ、Select連弾ってやります?

Unityクラスタから来ました!

Page 7: LINQ、Select連弾ってやります?

「UnityだとLINQが結構落ちて辛いよ!」っていうLTを以前した者です。JXUGの勉強会で、こんな話をさせていただいてありがとうございます。

Page 8: LINQ、Select連弾ってやります?

ということで今日もXamarin.iOSもXamarin.Android

の話はしません。

Page 9: LINQ、Select連弾ってやります?

さて、LINQ最高ですよね

Page 10: LINQ、Select連弾ってやります?

前もお話させていただいた通りUnityだと結構LINQが落ちました

原因はAOTコンパイラ関連のエラー。何が辛いってiOSだけ落ちる

Page 11: LINQ、Select連弾ってやります?

つらい

Page 12: LINQ、Select連弾ってやります?

なので作りました。「UniLinq」という、Unityでも使える

LINQ互換ライブラリ(β)

Page 13: LINQ、Select連弾ってやります?

UniLinqはmono/monoのLINQのコードをベースにいくつか手を加え作りましたUnityのUnity&Technologies/monoのLINQのコードと比べ

AOTコンパイル関連エラー対策がかなりされていました

Page 14: LINQ、Select連弾ってやります?

さて、ここまで前振りです

Page 15: LINQ、Select連弾ってやります?

ある日、事件が起きました

Page 16: LINQ、Select連弾ってやります?

「あれ、monoのリポジトリにLINQ%to%Objectsのコードがない」h"ps://github.com/mono/mono/blob/master/mcs/class/System.Core/System.Linq/Enumerable.cs

Page 17: LINQ、Select連弾ってやります?

な、んだと....

Page 18: LINQ、Select連弾ってやります?

本日のタイトル

Page 19: LINQ、Select連弾ってやります?

LINQ、Select連弾ってやります?【referencesource】

Page 20: LINQ、Select連弾ってやります?

referencesource

Page 21: LINQ、Select連弾ってやります?

referencesource

Page 22: LINQ、Select連弾ってやります?

referencesource

Page 23: LINQ、Select連弾ってやります?

そうですね。LINQのコードも、referencesourceに置き換わったんですね

issueはコチラ%h'ps://github.com/mono/mono/pull/1477 

Page 24: LINQ、Select連弾ってやります?

referencesourceh"ps://github.com/Microso2/referencesource

h"p://www.mono+project.com/docs/about+mono/dotnet+integra8on/

Page 25: LINQ、Select連弾ってやります?

referencesourceのLINQのコード、

とても見ていて面白いです。例えば、WhereとSelectの連弾

Page 26: LINQ、Select連弾ってやります?

読みずらくないですか?

List<A> aList = LoadList ();

IEnumerable<D> dList = aList .Select (a => CovetCtoD( CovetBtoC( ConvertAtoB( a ) ) ) );

Page 27: LINQ、Select連弾ってやります?

僕はこっちの方が好きです。連弾!

List<A> aList = LoadList ();

IEnumerable<D> dList = aList .Select (a => CovetAtoB(a)) .Select (b => CovetBtoC(b)) .Select (c => CovetCtoD(c));

Page 28: LINQ、Select連弾ってやります?

こうも書けますね、連弾!

List<A> aList = LoadList ();

IEnumerable<D> dList = aList .Select (CovetAtoB) .Select (CovetBtoC) .Select (CovetCtoD);

Page 29: LINQ、Select連弾ってやります?

オーバーヘッド気になります?referencesource版では対策されています!

Page 30: LINQ、Select連弾ってやります?

WhereとかSelectを効率よくやるためにEnumerableクラス内に内部クラス群が定義されている

• WhereSelectEnumerableIterator

• WhereSelectArrayIterator

• WhereSelectListIterator

など

Page 31: LINQ、Select連弾ってやります?

みなさんなら、多分コード見た方が早いです

h"ps://github.com/Microso2/referencesource/blob/master/System.Core/System/Linq/Enumerable.cs

 

あと、neueさんがとってもわかりやすくまとめられています

h"p://www.slideshare.net/neuecc/an3internal3of3linq3to3objects329200657

Page 32: LINQ、Select連弾ってやります?

お約束

Xamarinいいなぁ~Unityにも早く来ないかなぁ~

Page 33: LINQ、Select連弾ってやります?

まとめ• monoのコード、referencesourceをガンガン活用していますね

• referencesourceのLINQのコード面白いですよ

• WhereやSelectの連弾、読みやすければやっていいと思います

Page 34: LINQ、Select連弾ってやります?

蛇足Unityに新登場したIL2CPPで、UniLinqいらない子?