启示录 javascript (2)

所谓的函数式编程,类似数学上的函数,也就是确定的输入有确定输出。函数式编程中没有侧边效应,所以函数式编程是测试的,那么什么是侧边效应呢?侧边效应这个词,个人也了解一段时间才明白其内在意义,这里举一个小例子来帮助大家了解侧边效应(side effects)。


妈妈给小明钱去买酱油,这就是一个函数式编程,输入 money 而输出是酱油。当然有关函数式编程对异常处理,我们以后再探讨。先不考虑异常,异常可能是钱掉了或酱油洒了导致没有输出。好有了故事背景,那么什么是侧边效应,小明去买酱油的途中去游戏厅完一把游戏,玩游戏这件事这就是侧边效应。

side effect 也是副作用的意识,在生病时服药,药物上都有提示服用这种药需要注意什么,会有什么副作用。当然我们不希望有任何副作用。所以即使在我们平时 OOP 时也要尽可能考虑减少副作用,让我们的类或函数职能单一。

当下流行的编程是 immutable 编程,有关 immutable 具体如何翻译,这里我个人也是逐步随着学习而逐渐深入了解这个词的含义。这里暂时就直接用英文,不给予个人理解的翻译了吧。

想了想还是翻译成"不可变的",如果我们创建一个数据,数据集合,这个数据在整个应用不可变的,也就是他确定的。那就少了许多麻烦。但是世界是变化的。是 mutable。immutable 其实在每次修改对象时,不是修改对象的本身,而是将数据复制一份将现有数据保存,副本上修改数据生成一个全新的对象。或是理解每一次不是修改,而是创建一个全新的对象,并且修改对象。这样好处不然而喻了,我们的数据是可以 undo 和 redo 的。良好的追溯性。

其实无论是生活还是工作我们都希望一切都是根据我们期望的发展,也就是可以预判,我们经过努力就可以成功。不过世界是多变的,我们是无法预知未来的。即使我们通过跟种各样理论让我们预测无限地接近未来,我们也只是接近。那么好 如果我们的程序是确定性,起码我们把确定性那部分拿出来,然后专注去控制不确定性。程序就会 better。

纯函数是更趋近于 map ,将一种类型的数据转换为另一种数据,其实这也是函数的本质。所以在纯函数中对于输入输出确定性 测试结果正确done 简化测试 组合有效 modify 来共享内存 危险 jinzheng和难debug 如果是 全速不存在

我们可以让 javascript 也成为支持 immutable 编程的语言,那么就需要将那些支持 mutable 方法移除来使 javascript 成为 immutable 语言。

1. 首先我们要移除的 Date ,因为每次调用他的返回值是不确定,  同样 Math.random 也会返回一个不确定的随机数,所以他们都不适合纯函数编程。

2. 这里我们移除 delete 操作符,因为 delete 可以修改 object 的属性,所以没有必要在纯函数中保留 delete。

3 Object.assign 这个在 OO 中没做扩展对象或者是实现继承的操作符。由于类似方法可能会修改对象,所以他们将不会出现在 immutabl 纯函数编程中。

4. 我们再来看一看 Array.splice 这个方法会修改我们的数组,而 slice 则不会破坏原有 Array 而修改后重新创建一个 Array。


所以我们去掉 splice 而保留 Array.slice 。


5. 同样由于 sort  方法也会修改 Array 所以当然这不是我们希望的所以也移除他

hui

6. 同样因为 RegExp.exec 因为会修改对象所以不再保留他。

6. for 循环我们也不需要,原因

7. 当然 var 和 assignment 这样赋值符号我们也不再需要了,他们会改变对象,我们不希望改变希望的是海枯石烂。


8. user ,当然用户是善变的,所以我们在 immutable 编程中也不需要用户。

9. network 同样是不确定的,相同的请求,返回的结果不是确定。所以我们也把他归类 mutable 而从 Immutable 编程剔除。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,894评论 2 89
  • 你认为这个行业怎么样,你认为这个行业发展前途怎么样?这样的话我们时常会问。 养多肉也同样如此,你认为养多肉怎么...
    雪儿love2017阅读 180评论 0 0
  • 雄鸡展翅高飞去,金狗欢跳迎春到。时间在缓慢流淌,却又让即将步入中年的人格外恐慌。时间都去哪了?我们又干了些什么? ...
    何乐不为63阅读 177评论 0 0
  • 张勤咏 岁月的皮肤 一叶无垠的碧绿 粉红的诱惑。是你涉水而去的距离 七月的声音。来自桨 鸟的喉咙,昨日一样婉转 莲...
    安徽港河阅读 360评论 0 3