SlideShare a Scribd company logo
1 of 66
Download to read offline
私と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回

More Related Content

What's hot

Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
Code for iizukaとオープンデータ
Code for iizukaとオープンデータCode for iizukaとオープンデータ
Code for iizukaとオープンデータ
Kindai University
 
Lt python腕試しネタ
Lt python腕試しネタLt python腕試しネタ
Lt python腕試しネタ
kiwofusi
 
ハードウェアエンジニアとRuby
ハードウェアエンジニアとRubyハードウェアエンジニアとRuby
ハードウェアエンジニアとRuby
hiroyuki kotera
 

What's hot (20)

Seq2Seqでボットづくり
Seq2SeqでボットづくりSeq2Seqでボットづくり
Seq2Seqでボットづくり
 
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
 
Phpインタフェースについて
PhpインタフェースについてPhpインタフェースについて
Phpインタフェースについて
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方
 
Python for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )Python for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )
 
Node.js 奮闘日記
Node.js 奮闘日記Node.js 奮闘日記
Node.js 奮闘日記
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
Pythonでターミナルに画像表示
Pythonでターミナルに画像表示Pythonでターミナルに画像表示
Pythonでターミナルに画像表示
 
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
 
Code for iizukaとオープンデータ
Code for iizukaとオープンデータCode for iizukaとオープンデータ
Code for iizukaとオープンデータ
 
S10 t1 spc_by_nowfromnow
S10 t1 spc_by_nowfromnowS10 t1 spc_by_nowfromnow
S10 t1 spc_by_nowfromnow
 
クラーク創立25周年記念文化祭 秋葉原Ga専攻
クラーク創立25周年記念文化祭 秋葉原Ga専攻クラーク創立25周年記念文化祭 秋葉原Ga専攻
クラーク創立25周年記念文化祭 秋葉原Ga専攻
 
20160519 機械学習についてふわっと解説してみた
 20160519  機械学習についてふわっと解説してみた 20160519  機械学習についてふわっと解説してみた
20160519 機械学習についてふわっと解説してみた
 
191208 python-kansai-nishimoto
191208 python-kansai-nishimoto191208 python-kansai-nishimoto
191208 python-kansai-nishimoto
 
Lt python腕試しネタ
Lt python腕試しネタLt python腕試しネタ
Lt python腕試しネタ
 
ググリワードを探す話
ググリワードを探す話ググリワードを探す話
ググリワードを探す話
 
ウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返ってウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返って
 
ハードウェアエンジニアとRuby
ハードウェアエンジニアとRubyハードウェアエンジニアとRuby
ハードウェアエンジニアとRuby
 
とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門
とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門
とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門
 
CombGuide
CombGuideCombGuide
CombGuide
 

Viewers also liked

知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
Shota Baba
 

Viewers also liked (6)

C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
 
【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】
 
Unityでlinqを使おう
Unityでlinqを使おうUnityでlinqを使おう
Unityでlinqを使おう
 
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
 
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
 
LINQ in Unity
LINQ in UnityLINQ in Unity
LINQ in Unity
 

Similar to 私とUnityとLINQと

デスクトップ環境を作るらしいぞ!!!
デスクトップ環境を作るらしいぞ!!!デスクトップ環境を作るらしいぞ!!!
デスクトップ環境を作るらしいぞ!!!
centra3
 

Similar to 私とUnityとLINQと (11)

Siv3Dのすゝめ
Siv3DのすゝめSiv3Dのすゝめ
Siv3Dのすゝめ
 
20110717 Android SDK API総選挙LT
20110717 Android SDK API総選挙LT20110717 Android SDK API総選挙LT
20110717 Android SDK API総選挙LT
 
Cocos sharpでゲーム開発してみました
Cocos sharpでゲーム開発してみましたCocos sharpでゲーム開発してみました
Cocos sharpでゲーム開発してみました
 
C#への招待
C#への招待C#への招待
C#への招待
 
Python勉強会 2015-12-02
Python勉強会 2015-12-02Python勉強会 2015-12-02
Python勉強会 2015-12-02
 
ARLT_04_C#の勉強ってしてる?
ARLT_04_C#の勉強ってしてる?ARLT_04_C#の勉強ってしてる?
ARLT_04_C#の勉強ってしてる?
 
UE4を使用したゲーム開発の為のネットワーク対応その1
UE4を使用したゲーム開発の為のネットワーク対応その1UE4を使用したゲーム開発の為のネットワーク対応その1
UE4を使用したゲーム開発の為のネットワーク対応その1
 
誰にでも分かる「IPネットワーク」の図の描き方がない!?
誰にでも分かる「IPネットワーク」の図の描き方がない!?誰にでも分かる「IPネットワーク」の図の描き方がない!?
誰にでも分かる「IPネットワーク」の図の描き方がない!?
 
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
 
Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainerIntroduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainer
 
デスクトップ環境を作るらしいぞ!!!
デスクトップ環境を作るらしいぞ!!!デスクトップ環境を作るらしいぞ!!!
デスクトップ環境を作るらしいぞ!!!
 

More from Ryota Murohoshi

More from Ryota Murohoshi (13)

【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
 
「var禁止」禁止
「var禁止」禁止「var禁止」禁止
「var禁止」禁止
 
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっかJavaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっか
 
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件C#のList_TがIListを実装している件
C#のList_TがIListを実装している件
 
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?
 
広告ネイティブプラグインの辛かった話しよっか
広告ネイティブプラグインの辛かった話しよっか広告ネイティブプラグインの辛かった話しよっか
広告ネイティブプラグインの辛かった話しよっか
 
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
T4使ってみた
T4使ってみたT4使ってみた
T4使ってみた
 
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変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
 

私とUnityとLINQと