01.UniRx序列(爲什麼使用UniRx,哪好,爲什麼好)

本序列爲自己研究個人筆記,不涉及版權信息;如果有錯誤的地方,希望笑而指出,謝謝!

寫給自己的一些話

傳統編程裏面,我總是按照編譯器的邏輯來處理代碼;代碼是按照順序執行,當有數據刷新的時候,需要重新去獲取;重新去獲取並不影響什麼,關鍵的是這是一個主動發起的行爲;而數據是被動在刷新,這樣的我們編寫的代碼就變得被動了,你如果有一定的工作經驗,你遇到這樣的低級的問題,忘記去刷新某一個數據導致程序異常;當一個程序的數據量越大,你就會花費更多的精力在重置一個變量,重置一個flag;
你徹夜加班只爲了調通程序裏面一個低級的flag,第二天拖着疲憊的身軀又開始這樣的工作旅程;使用UniRx可以在一定程度上減輕這樣的工作煩惱;
鑑於Unity使用Rx的程序員非常之少,根據我個人的學習理解,不時的寫一些文章;傳播一下UniRx帶來的便利和強大,序列的內容會比較多,預計今年內寫不完哈!

怎樣去學一個新技術

我一般是先看官方的例子,看看怎麼使用在進行進一步的學習;根據個人的學習方式不同,找書籍看視頻,看代碼都可以;我這個人比較特殊,喜歡寫文檔來記錄個人的理解,當發現自己理解錯誤了,那表明已經學會了,需要大膽的去定義一些未知的事情。

學習需要去看源碼嗎

大神總是盯着源碼不停的去瞄,不時的去感慨天感慨地;我覺得吧,沒有太多的必要,先要去學會怎麼使用這個技術點,然後纔是慢慢的瞭解原理;當你用了UniRx5年了,10年了,想學着寫一套自己的架構,這個時候需要去查閱源碼;看源碼和學習用沒一點關係,你不會玩遊戲你去看看鼠標是怎麼做的,鍵盤是怎麼生產的,買好電腦,曲面屏,真的有用嗎?
我本着務實誠懇的態度告訴看官們,先學會用在考慮源碼!GitHub 超過上千星星的項目,有bug你也不一定能處理好,所以源碼這事不要老掛嘴邊,沒意義,忽悠自己還行哈!
不要拿一些什麼安卓開源的項目什麼的,我們不是搞開源那一塊的,安卓的項目,這裏不談,誰用誰知道

UniRx和C#的關係

ReactiveX C# 項目官方網站
UniRx GitHub開源地址
第一個地址是C#發起的一個項目,RX最早是C#發起的一個項目,包含在.net 2.0標準庫裏面,不過標準庫裏面沒有拓展的功能,只有定義好的接口,IObserver和IObservable;那麼爲什麼微軟不直接往庫裏面放啊?這是有原因的,RX編程對新手並不友好,不好理解,抽象!這個庫在2012的時候就發行到了標準庫裏面,有移植各種語言,基本主流的語言全部都有,不過在安卓和IOS上用的人挺多;主要是資料多,好找;
UniRx是日本的一個有爲青年移植到Unity上的版本,最初是爲了解決WWW和協同帶來的煩惱,慢慢的完善了,蘊含了幾乎所有RX的主流功能。

什麼是UniRx

使用UniRx製作一個3秒定時器

public class No01_What : MonoBehaviour
{
    void Start()
    {
        IObservable<long> timer = Observable.Timer(TimeSpan.FromSeconds(3f));
        IDisposable disposable = timer.Subscribe(Next, Error, Complete);
        disposable.AddTo(gameObject);
    }

    void Next(long time)
    {
        Debug.Log("time up.");
    }

    void Error(Exception ex)
    {

    }

    void Complete()
    {

    }
}
代碼解析

UniRx一般都是基於Observable這個類裏面的靜態方法來製作一個IObservable接口,返回的接口需要指定一個類型,這個類型是你在使用的時候根據方法返回指定;Timer的IObservable返回的都是long類型;
IObserveable接口擁有很多的拓展,where、select、zip等等,當然你也直接直接訂閱,訂閱表明這個數據流開始執行,沒有訂閱者訂閱之前,數據流不會執行;
Next在數據執行結果返回
Error有異常的時候
Complete數據流執行完成
訂閱會返回一個IDisposable接口,拓展可以綁定到當前物體同生命週期,物體銷燬以後,數據執行清空操作

UniRx的數據流

基於系統提供的IObservable和IObserver接口來拓展;第一個接口的中文意思是可以被觀察的,第二個是觀察者;在UniRx中
每當發起一個語句,都會當作一個流來處理,爲什麼要用流來稱呼,不是數據源什麼的;因爲RX對數據的操作能力非常強大,可以對數據進行篩選,過程處理,中途提取;數據一般指的靜態的數據,流是動態的數據;
我每次發起了請求以後返回的都是IObservable接口,可以無限進行下去,直接有訂閱者來觀察

總結

大概介紹了一下來由和作用,之後對每一個關鍵方法進行詳細解答;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章