66
私とUnityLINQ@RyotaMurohoshi 2014/12/20 プログラミング生放送勉強会 第32

私とUnityとLINQと

Embed Size (px)

Citation preview

Page 1: 私とUnityとLINQと

私とUnityとLINQと@RyotaMurohoshi

2014/12/20&プログラミング生放送勉強会&第32回

Page 2: 私とUnityとLINQと

質問です!

Page 3: 私とUnityとLINQと

Unity使っている方?

Page 4: 私とUnityとLINQと

C#バリバリ使っている方?

Page 5: 私とUnityとLINQと

LINQ知ってた方?

Page 6: 私とUnityとLINQと

LINQ使っている方?

Page 7: 私とUnityとLINQと

ありがとうございます

Page 8: 私とUnityとLINQと

さっきLINQの話でましたね(※今日は、LINQ&to&Objectsの話しかしません。)

Page 9: 私とUnityとLINQと

おさらい

Page 10: 私とUnityとLINQと

LINQを使うとなにがいいか

Page 11: 私とUnityとLINQと

コードが簡潔になる。読みやすくなる。

Page 12: 私とUnityとLINQと

もうちょっと言うと、

配列、リスト、ディクショナリこれらなどを扱うコードが簡潔になる。読みやすくなる。

Page 13: 私とUnityとLINQと

イメージわきます?

Page 14: 私とUnityとLINQと

RPGのプレイヤーを司る、こんなクラスがあるとして、public class Player{ public int HP { get; set; } public string Name { get; set; }

/* 他なんかいろいろ */}

Page 15: 私とUnityとLINQと

死んでいる(HPが0以下)のプレイヤーの数を数えよう!

Page 16: 私とUnityとLINQと

どう書く?

Page 17: 私とUnityとLINQと

LINQを使うとコードが短くなる!数える部分は6行

// LINQを使わないとList<Player> playerList = GetPlayerList ();

int deadPlayerCount = 0;foreach (Player player in playerList) { if(player.HP <= 0) { deadPlayerCount++; }}

Page 18: 私とUnityとLINQと

LINQを使うとコードが短くなる!たった1行に!短い!

// LINQを使うとList<Player> playerList = GetPlayerList ();

int deadPlayerCount = playerList.Count (player => player.HP <= 0);

Page 19: 私とUnityとLINQと

LINQを使うとコードが短くなる!// LINQを使わないとint deadPlayerCount = 0;foreach (Player player in playerList) { if(player.HP <= 0) { deadPlayerCount++; }}

// LINQを使うとint deadPlayerCount = playerList.Count (player => player.HP <= 0);

Page 20: 私とUnityとLINQと

圧倒的じゃないか!

Page 21: 私とUnityとLINQと

短いだけじゃない!読みやすい!

Page 22: 私とUnityとLINQと

さっきの2つのコード何をしているのか調べる時

どう読むのか?

Page 23: 私とUnityとLINQと

このコード、どう読みます?// LINQを使わないとList<Player> playerList = GetPlayerList ();

int deadPlayerCount = 0;foreach (Player player in playerList) { if(player.HP <= 0) { deadPlayerCount++; }}

Page 24: 私とUnityとLINQと

int型のdeadPlayerCountを0で初期化foreach文でplayerListをまわす

もし要素のplayerのHPが0以下ならばdeadPlayerCountをインクリメント

Page 25: 私とUnityとLINQと

あ、つまり!HPが0以下のプレイヤーを数えるのか!

Page 26: 私とUnityとLINQと

ってなる1回頭の中で変換が必要

Page 27: 私とUnityとLINQと

一方LINQは?どう読みます?// LINQを使うとint deadPlayerCount = playerList.Count (player => player.HP <= 0);

Page 28: 私とUnityとLINQと

int型のdeadPlayerを次の値で初期化しろ!playerList内の次の条件を満たす要素数だ!

条件は要素のHPが0以下だ!

Page 29: 私とUnityとLINQと

ほぼ意味的に、「HPが0以下のプレイヤーを数えろ!」

左から右に素直に読める!

Page 30: 私とUnityとLINQと

foreach文、if文のは「どう処理しているか」が書かれている

LINQで書かれたのは「何がしたいか」が書かれている

Page 31: 私とUnityとLINQと

どうですか?こんな感じで、配列、リスト、ディクショナリなどを

扱うコードが短く読みやすく書けますよ!

Page 32: 私とUnityとLINQと

LINQいいでしょ!

Page 33: 私とUnityとLINQと

第1部、完

Page 34: 私とUnityとLINQと

今日のテーマは、「私とUnityとLINQと」Unityの話してない!

Page 35: 私とUnityとLINQと

さて、UnityコミュニティでのLINQ

あんまり流行ってない気がしますいや、勉強会でLINQ使っている人って聞くと

使っている人の割合が少ないんです

Page 36: 私とUnityとLINQと

理由その1

いろんな人がUnityを使うから

Page 37: 私とUnityとLINQと

第2部、初学者とLINQ

Page 38: 私とUnityとLINQと

Unityはいろいろ覚えることがある特にプログラミング初めてという人はいろいろ知らないといけない

まぁ、LINQ後回しになるのも仕方ない?

Page 39: 私とUnityとLINQと

あと、LINQをしっかり理解はそんなに簡単じゃない

「C#の関連言語要素が多いから」

Page 40: 私とUnityとLINQと

• デリゲート

• 匿名関数"(インラインな式"or"ステートメント)

• ラムダ式の書き方

• 共通デリゲート型

• 遅延評価

Page 41: 私とUnityとLINQと

• 拡張メソッド

• 静的クラス

• ジェネリック"(なクラス、イターフェース、メソッド)"

• 型推論

• IEnumerable<T>と"IEnumerator<T>

• yield

• 匿名型

Page 42: 私とUnityとLINQと

いや、全部完全に理解しなくてもいいけどとりあえず出てきます

Page 43: 私とUnityとLINQと

特に次のと同時に勉強して「わかんねー」てなる人が多い気がします

• デリゲート

• ラムダ式の書き方

• 共通デリゲート型

Page 44: 私とUnityとLINQと

ていうか私です

Page 45: 私とUnityとLINQと

まずLINQのメリット「短く読みやすくなる」

を伝えるのが大事だと思っています

Page 46: 私とUnityとLINQと

あまりC#を詳しくない人にLINQを教える際、• Where

• Select

最初のメソッドがこれベストではないと思います。

Page 47: 私とUnityとLINQと

• 遅延評価

• IEnumerable<T>

を同時に教えないといけないから

Page 48: 私とUnityとLINQと

逆にC#めっちゃ詳しい人にならWhereとSelectが良いと思います!

Page 49: 私とUnityとLINQと

教えるのはなるべく同時ではなく、ひとつずつ!

Page 50: 私とUnityとLINQと

ところで

Page 51: 私とUnityとLINQと

日本Androidの会Unity部よりC87にてUNIBOOK2

500円で販売します(CD$or$バウチャーチケット)

Page 52: 私とUnityとLINQと

私もUNIBOOK2に書きましたすぐ使えるオススメ!LINQ!メソッド!4!選

Page 53: 私とUnityとLINQと

あえてなるべくC#の言語要素を登場させず、

次のメソッドを紹介

Count

Any

All

First

Page 54: 私とUnityとLINQと

UNIBOOK2お願いします!いろんなテーマがもりだくさん!

こうご期待!詳しくは日本Androidの会Unity部のページで!

Page 55: 私とUnityとLINQと

第2部、完

Page 56: 私とUnityとLINQと

LINQ勉強したいなら良い本はいっぱいありますよ!私が「まず、こういうのがあったら」という本を書きました

Page 57: 私とUnityとLINQと

第3部、UnityとiOSとLINQ

Page 58: 私とUnityとLINQと

Unity+iOSだと、いろいろあって突然エラーになることがあります

(*AOTコンパイル関連)

Page 59: 私とUnityとLINQと

残念ながらLINQもなります

Page 60: 私とUnityとLINQと

つらい

Page 61: 私とUnityとLINQと

UnityであんまりLINQが流行っていない?

理由その2

iOSだと死ぬことがあるから

Page 62: 私とUnityとLINQと

つらい

Page 63: 私とUnityとLINQと

それを解決したい!それが目標なライブラリを作成!

まだベータです!!!

Page 64: 私とUnityとLINQと

UniLinq

Page 65: 私とUnityとLINQと

続きは、C#アドカレで!

Page 66: 私とUnityとLINQと

私とUnityとLINQと@RyotaMurohoshi

2014/12/20&プログラミング生放送勉強会&第32回