1

人们编程时很容易走到怎么想怎么做的过程式的思维当中去, 可代码不是
代码需要的是抽象化和隔离, 一段代码尽量不依赖不相关的那些数据
或者说, 一段代码应该保留尽可能少的引用, 并且同时能够充分地完成工作
我挺喜欢的一个说法是, code is blind, 它只能触碰到整个程序中身边的一点点状态
对于代码进行隔离, 以及设计出良好的在隔离之后能协同工作的方案, 我认为极为重要

隔离的方案有:
* 闭包
* 类
* 文件作用域
* 另外一个编程语言的环境

通信的方案有:
* 直接引用
* 函数参数
* 全局的消息信道
* 取得输入输出的 channel 和 stream
* TCP Socket 等等外部的请求

MVC 设计模式的各种变体, 就是隔离, 事件通知, 引用这些关联不断改变
比如 Flux 的数据流, 每个部分主要接收前一个部分事件, 发送个下一个部分
这些架构的设计, 形成了模块重用的方便, 也决定了反向的一些操作将会有限制
我没能具体想清楚, 不过可以确认这在各种系统当中都存在而且起到作用

使用脚本语言和面向对象的我们有个习惯是用引用数据来通信
比如定义变量为 true, 经过操作得到 false, 其他引用代码就知道了状态改变
函数式编程当中, 数据是不可变的, 意味着通过变量拿不到变量的状态了
而代码通信的需求并不会减少, 于是就被迫引入新的编程手段.. 比如重建整个状态..
状态的代码被整个重建, 但是沿用了变量名, 逻辑代码不变, 因此正常工作
当然重建状态意味着高阶函数和内存回收之类技术需求明显


类似的想法以前也写过, 上边是最近几天想到的东西..
具体想得不够清楚, 应该会有不少遗漏... 有兴趣的同学帮我升发一下吧..


题叶
17.3k 声望2.6k 粉丝

Calcit 语言作者