Upload
ryota-murohoshi
View
709
Download
1
Embed Size (px)
Citation preview
私とUnityとLINQと@RyotaMurohoshi
2014/12/20&プログラミング生放送勉強会&第32回
質問です!
Unity使っている方?
C#バリバリ使っている方?
LINQ知ってた方?
LINQ使っている方?
ありがとうございます
さっきLINQの話でましたね(※今日は、LINQ&to&Objectsの話しかしません。)
おさらい
LINQを使うとなにがいいか
コードが簡潔になる。読みやすくなる。
もうちょっと言うと、
配列、リスト、ディクショナリこれらなどを扱うコードが簡潔になる。読みやすくなる。
イメージわきます?
RPGのプレイヤーを司る、こんなクラスがあるとして、public class Player{ public int HP { get; set; } public string Name { get; set; }
/* 他なんかいろいろ */}
死んでいる(HPが0以下)のプレイヤーの数を数えよう!
どう書く?
LINQを使うとコードが短くなる!数える部分は6行
// LINQを使わないとList<Player> playerList = GetPlayerList ();
int deadPlayerCount = 0;foreach (Player player in playerList) { if(player.HP <= 0) { deadPlayerCount++; }}
LINQを使うとコードが短くなる!たった1行に!短い!
// LINQを使うとList<Player> playerList = GetPlayerList ();
int deadPlayerCount = playerList.Count (player => player.HP <= 0);
LINQを使うとコードが短くなる!// LINQを使わないとint deadPlayerCount = 0;foreach (Player player in playerList) { if(player.HP <= 0) { deadPlayerCount++; }}
// LINQを使うとint deadPlayerCount = playerList.Count (player => player.HP <= 0);
圧倒的じゃないか!
短いだけじゃない!読みやすい!
さっきの2つのコード何をしているのか調べる時
どう読むのか?
このコード、どう読みます?// LINQを使わないとList<Player> playerList = GetPlayerList ();
int deadPlayerCount = 0;foreach (Player player in playerList) { if(player.HP <= 0) { deadPlayerCount++; }}
int型のdeadPlayerCountを0で初期化foreach文でplayerListをまわす
もし要素のplayerのHPが0以下ならばdeadPlayerCountをインクリメント
あ、つまり!HPが0以下のプレイヤーを数えるのか!
ってなる1回頭の中で変換が必要
一方LINQは?どう読みます?// LINQを使うとint deadPlayerCount = playerList.Count (player => player.HP <= 0);
int型のdeadPlayerを次の値で初期化しろ!playerList内の次の条件を満たす要素数だ!
条件は要素のHPが0以下だ!
ほぼ意味的に、「HPが0以下のプレイヤーを数えろ!」
左から右に素直に読める!
foreach文、if文のは「どう処理しているか」が書かれている
LINQで書かれたのは「何がしたいか」が書かれている
どうですか?こんな感じで、配列、リスト、ディクショナリなどを
扱うコードが短く読みやすく書けますよ!
LINQいいでしょ!
第1部、完
今日のテーマは、「私とUnityとLINQと」Unityの話してない!
さて、UnityコミュニティでのLINQ
あんまり流行ってない気がしますいや、勉強会でLINQ使っている人って聞くと
使っている人の割合が少ないんです
理由その1
いろんな人がUnityを使うから
第2部、初学者とLINQ
Unityはいろいろ覚えることがある特にプログラミング初めてという人はいろいろ知らないといけない
まぁ、LINQ後回しになるのも仕方ない?
あと、LINQをしっかり理解はそんなに簡単じゃない
「C#の関連言語要素が多いから」
• デリゲート
• 匿名関数"(インラインな式"or"ステートメント)
• ラムダ式の書き方
• 共通デリゲート型
• 遅延評価
• 拡張メソッド
• 静的クラス
• ジェネリック"(なクラス、イターフェース、メソッド)"
• 型推論
• IEnumerable<T>と"IEnumerator<T>
• yield
• 匿名型
いや、全部完全に理解しなくてもいいけどとりあえず出てきます
特に次のと同時に勉強して「わかんねー」てなる人が多い気がします
• デリゲート
• ラムダ式の書き方
• 共通デリゲート型
ていうか私です
まずLINQのメリット「短く読みやすくなる」
を伝えるのが大事だと思っています
あまりC#を詳しくない人にLINQを教える際、• Where
• Select
最初のメソッドがこれベストではないと思います。
• 遅延評価
• IEnumerable<T>
を同時に教えないといけないから
逆にC#めっちゃ詳しい人にならWhereとSelectが良いと思います!
教えるのはなるべく同時ではなく、ひとつずつ!
ところで
日本Androidの会Unity部よりC87にてUNIBOOK2
500円で販売します(CD$or$バウチャーチケット)
私もUNIBOOK2に書きましたすぐ使えるオススメ!LINQ!メソッド!4!選
あえてなるべくC#の言語要素を登場させず、
次のメソッドを紹介
Count
Any
All
First
UNIBOOK2お願いします!いろんなテーマがもりだくさん!
こうご期待!詳しくは日本Androidの会Unity部のページで!
第2部、完
LINQ勉強したいなら良い本はいっぱいありますよ!私が「まず、こういうのがあったら」という本を書きました
第3部、UnityとiOSとLINQ
Unity+iOSだと、いろいろあって突然エラーになることがあります
(*AOTコンパイル関連)
残念ながらLINQもなります
つらい
UnityであんまりLINQが流行っていない?
理由その2
iOSだと死ぬことがあるから
つらい
それを解決したい!それが目標なライブラリを作成!
まだベータです!!!
UniLinq
続きは、C#アドカレで!
私とUnityとLINQと@RyotaMurohoshi
2014/12/20&プログラミング生放送勉強会&第32回