大家是否在初学 Rx(响应式扩展,经典如 RxJs, RxJava)时,觉得它的写法反过来会更好理解?

2022-01-15 19:56:31 +08:00
 Newyorkcity
我 订阅了 报纸,或者说,我向某家报纸发行商订阅了每日晨报。
->
I subscribe a newspaper or I subscribe a <newspaper company>


那在 Rx 的概念里,newspaper company 有数据(也就是每日晨报)要发送,是一个可订阅或者说可 Observe 的东西,所以应该是 Observable 的一个实例)。

而『我』抽象出来的话应该是一个 Observer 类型(具有订阅的能力,并且在获得到订阅的东西后有一些行为)

所以写成代码后应该是 I.subscribe(newspaperCompany)

然而

interface Observable<T> {
Subscription subscribe( Observer s )
}

所以 RxJava 里应该写成 newspaperCompany.subscribe(I)

就让我非常难顶。

实在不行,这个方法名能不能从 subscribe 改成 register 啊,

newspaperCompany.register(I) --> 报纸发行商把订阅报纸的我注册在要发每日晨报的名单里了 我一下子就觉得好理解和舒服得多

这里为什么这么设计呢?

谢谢
1666 次点击
所在节点    问与答
13 条回复
cmdOptionKana
2022-01-15 20:03:59 +08:00
单听你说的,我觉得也很有道理,蹲一下看看别人怎么说
ipwx
2022-01-15 20:07:18 +08:00
反正不符合语法。

真正符合语法的是 I subscribe to a newspaper
lvdb
2022-01-15 20:21:37 +08:00
你打别人电话时,如果对方挂断会有一个英文提示。the subscriber you dialed is busy now ,你猜为什么你打电话的那个人,是 subscriber 呢?
Newyorkcity
2022-01-15 20:33:44 +08:00
@ipwx
@lvdb

这 subscribe 这个不会像 除以和除那样 subscribe to 是除以,subscribe 是除吧。。。。。
DaVinci42
2022-01-15 20:38:35 +08:00
一点是方便链式调用

报纸被发行商出版.被邮递配送.被某人阅读

调用链没有嵌套,是平的
ipwx
2022-01-15 20:41:41 +08:00
@Newyorkcity 没有这种用法。
WoodenTea
2022-01-15 20:42:45 +08:00
我已经使用 RxJava 开发 Android 4 年, 开发的 Web 应用我也使用上了 RxJs.
当你理解它的编程模式后, 尤其是 Android 开发, 那真的就是爽. 线程切换, 多线程控制执行, 网络请求重试, 请求内容或响应内容变换, 网络请求在应用指定生命周期自动关闭等. 这些使用熟练后写代码真是得心应手.
Newyorkcity
2022-01-15 20:44:43 +08:00
@WoodenTea 当初学时怎么理解透彻的有留下笔记不
DrJekyll
2022-01-15 20:56:11 +08:00
客体思维,就是说英文经常以物作主语,多被动语态;而中文则多以人作主语,很少有被动。这里看到的 -- https://www.zhihu.com/question/29877577/answer/868178757 。感觉应该和这个有点关系。
WoodenTea
2022-01-15 20:56:29 +08:00
@Newyorkcity 我有一个严重的缺点就是不会做笔记.
我当时学习 RxJava 的时候是根据一名叫「扔物线 」的网友写的一篇文章开始的(现在网上还能搜索到), 我感觉最基本的功能都介绍到了.
当时是 RxJava1, 现在是 RxJava3, 有几个关键字已经修改.
luob
2022-01-15 23:09:39 +08:00
函数式语言就不会纠结这种语义,不管谁订阅谁都应该是 newspaper |> Observe.from |> Observe.subscribe me
Mav
2022-01-16 10:22:14 +08:00
你把 subscribe 理解成 addSubscription 是不是就好理解了?
Newyorkcity
2022-01-16 11:47:53 +08:00
@Mav 对 这就是我想说的。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/828473

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX