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接口,可以无限进行下去,直接有订阅者来观察

总结

大概介绍了一下来由和作用,之后对每一个关键方法进行详细解答;

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