SlideShare a Scribd company logo
1 of 35
C#
関数型プログラミング
Linq・UniRx
関数型プログラミングとはの前に・・・
三項演算子を知ってますか?
三項演算子とは
int score = 50;
string result = "";
if(score > 80)
{
result = "合格";
}
else
{
result = "不合格";
}
int score = 50;
string result = "";
result = (score > 80) ? "合格" : "不合格";
関数型プログラミングとは
特に正確な定義は無いらしい
(Wiki情報)
関数型プログラミングとは
複数の式を関数の適用によって組み合わせて
いくプログラミングスタイルである
(Wiki情報)
関数型プログラミングとは
「データに何らかの処理を加えていく」
の連続で組み立てていくものです。
あと…
https://qiita.com/stkdev/items/5c021d4e5d54d56b927c
数学的な考え方である
身近な関数型プログラミング
SQLの例
SELECT 価格 FROM 商品表 WHERE 価格 < 300 ORDER BY ASC
商品表 価格
価格 <
300
価格 <
300
昇順並び替え
複数の式を結合し、データの塊を最終的な形になるまで操作する。
LINQとは
C#でSQLクエリっぽい
書き方ができる
class Product
{
public string name;
public int price;
public Product(string n, int p)
{
name = n;
price = p;
}
}
// Use this for initialization
void Start () {
List<Product> productList = new List<Product>();
productList.Add(new Product("リンゴ", 120));
productList.Add(new Product("みかん", 80));
productList.Add(new Product("お米", 900));
productList.Select(x => x.price)
.Where(x => x < 300)
.OrderBy(x => x);
}
ちょっと待って
Select(x => x.price)
なにその引数?
そう、それがラムダ式
x => x.price
←引
数
←
返
り
値
(
処
理
)
返り値の決め方
IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TResult> selector);
ラムダ式について
() 引数無し
arg1 引数一つ
(arg1, arg2) 引数二つ
=>
返り値あり:
result
{処理…
return result;}
返り値なし:
{処理…}
LINQとは
集約関数も使える
productList.Where(x => x.price < 300).Count(); //2
productList.Select(x => x.price).Sum(); //1100
productList.Select(x => x.price).Average(); //367
productList.Select(x => x.price).Max(); //900
productList.Select(x => x.price).Min(); //80
LINQとは
SQLで出来ることは大体できる!(と思う)
とても便利>
LINQ使ってみようか
Unityを開け!
UNIRXとは
Reactive Extensions for Unity that
allows
LINQ to asynchronous and
LINQ to multithreading and
LINQ to events and
more.
UNIRXとは
UniRxは Linqを使って
非同期、マルチスレッド、イベント処理
をいい感じにしてくれる!
※意訳
UNIRXでの重要知識
Observerパターン
Observer
Subject
Subscrib
e
Publish
値の
変化
UNIRXでの重要知識
日本語で言うと
観察する側
観察される側
購読
発行
OBSERVERパターン
HP:100/100
Subscribe
Event処理でよく使
う
HPを監視
OBSERVERパターン
HP:50/100
Event処理でよく使
う
ダメージを受ける
OBSERVERパターン
HP:50/100
Publish
Event処理でよく使
う
HPの変更を通知
通知を受けたので、変更
UNIRXを使ってみよう
Subject
IObserver IObservable
購読者1 購読者2発行者
OnNext
(データ)
UNIRXを使ってみよう
public class RxObserver : MonoBehaviour {
[SerializeField]RxTest _rxTest;
// Use this for initialization
void Start () {
_rxTest.OnHpChanged.Subscribe(x =>
{
Debug.Log("Hp change : " + x);
});
}
}
public class RxTest : MonoBehaviour {
Subject<int> _hpNotify = new Subject<int>();
public IObservable<int> OnHpChanged {
get
{
return _hpNotify;
}
}
private void Start()
{
int hp = 100;
_hpNotify.OnNext(hp);
hp = 50;
_hpNotify.OnNext(hp);
}
}
イベント購読側
イベント発行側
UNIRXを使ってみよう
良く分からんし、一回使ってみようか
UNIRXを使ってみよう
OnNextでいちいちやるの面倒だよね
もっと簡単な方法があるんだよね^-^
UNIRXを使ってみよう
UniRx特別機能!
ReactiveProperty
UNIRXを使ってみよう
public class RxTest : MonoBehaviour {
ReactiveProperty<int> HP = new ReactiveProperty<int>();
private void Start()
{
HP.Value = 100;
HP.Value = 50;
}
}
イベント発行側
値の変更をするだけで、OnNextと同等の動作を行う
UNIRXのフィルタリング
UniRxもフィルタリングが出来る!
UNIRXのフィルタリング
•フィルタリングする「Where」
•メッセージ変換する「Select]
•重複を排除する「Distinct」
•一定個数まとまるまで待つ「Buffer」
•短時間にまとめてきた場合に先頭のみを使う「ThrottleFirst」
ここに全て書いてある:https://qiita.com/toRisouP/items/3cf1c9be3c37e7609a2f
UNIRXのフィルタリング
_rxTest.HP.Where(x => x < 20).DistinctUntilChanged().Subscribe(x =>
{
Debug.Log(“Danger! Remaining hp is : " + x);
});
Hpが20未満で、前と同じデータでなければ通す
UNIRXの重要知識②
Strea
m
データをごにょごにょ(メッセージが発行されてからSubscribeに到達するまでの一連の処理の流れ)する事を
と呼ぶ
UNIRXの利点
監視しているだけなので
疎結合な関係を保てる
あと、簡単にフィルタリングできる
まとめ
まぁ色々やったわけですが...
・LINQなどでデータをフィルタリングする
・UniRxでイベント処理をハンドリングする
・IObservarとIObservableを理解する
・とりあえず、何回も使いなさい(便利だよ)

More Related Content

Similar to Rx class

より良いコードを書くための
より良いコードを書くためのより良いコードを書くための
より良いコードを書くためのTATSUYA HAYAMIZU
 
Shibya.trac #2: TracとTestLinkの合わせ技
Shibya.trac #2: TracとTestLinkの合わせ技Shibya.trac #2: TracとTestLinkの合わせ技
Shibya.trac #2: TracとTestLinkの合わせ技Toshiyuki Kawanishi
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshareKeisuke Yahata
 
クリーンアーキテクチャを試してみた
クリーンアーキテクチャを試してみたクリーンアーキテクチャを試してみた
クリーンアーキテクチャを試してみたTakuya Matsunaga
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
pi-1. プログラミング入門
pi-1. プログラミング入門pi-1. プログラミング入門
pi-1. プログラミング入門kunihikokaneko1
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ京大 マイコンクラブ
 
Unimaginable code & commentary
Unimaginable code & commentaryUnimaginable code & commentary
Unimaginable code & commentaryKazuki Kachi
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
ChatGPT(LLMによる生成系AI)の追加学習を No Code で行う ~ 概念モデリング教本を元に ~
ChatGPT(LLMによる生成系AI)の追加学習を No Code で行う  ~ 概念モデリング教本を元に ~ChatGPT(LLMによる生成系AI)の追加学習を No Code で行う  ~ 概念モデリング教本を元に ~
ChatGPT(LLMによる生成系AI)の追加学習を No Code で行う ~ 概念モデリング教本を元に ~Knowledge & Experience
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 

Similar to Rx class (20)

より良いコードを書くための
より良いコードを書くためのより良いコードを書くための
より良いコードを書くための
 
Wtm
WtmWtm
Wtm
 
C# 3.0 以降
C# 3.0 以降C# 3.0 以降
C# 3.0 以降
 
Shibya.trac #2: TracとTestLinkの合わせ技
Shibya.trac #2: TracとTestLinkの合わせ技Shibya.trac #2: TracとTestLinkの合わせ技
Shibya.trac #2: TracとTestLinkの合わせ技
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
LINQ概要
LINQ概要LINQ概要
LINQ概要
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshare
 
What is template
What is templateWhat is template
What is template
 
クリーンアーキテクチャを試してみた
クリーンアーキテクチャを試してみたクリーンアーキテクチャを試してみた
クリーンアーキテクチャを試してみた
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
pi-1. プログラミング入門
pi-1. プログラミング入門pi-1. プログラミング入門
pi-1. プログラミング入門
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
Unimaginable code & commentary
Unimaginable code & commentaryUnimaginable code & commentary
Unimaginable code & commentary
 
ソフトウェアとは
ソフトウェアとはソフトウェアとは
ソフトウェアとは
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
ji-2. 計算
ji-2. 計算ji-2. 計算
ji-2. 計算
 
ChatGPT(LLMによる生成系AI)の追加学習を No Code で行う ~ 概念モデリング教本を元に ~
ChatGPT(LLMによる生成系AI)の追加学習を No Code で行う  ~ 概念モデリング教本を元に ~ChatGPT(LLMによる生成系AI)の追加学習を No Code で行う  ~ 概念モデリング教本を元に ~
ChatGPT(LLMによる生成系AI)の追加学習を No Code で行う ~ 概念モデリング教本を元に ~
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 

Recently uploaded

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (14)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

Rx class