链式编程或者链式写法,是将多个方法 (函数) 通过点号 (.) 或者 (->)等符号链接在一起成为一句代码,这样不仅可以增强代码的可读性,而且每次链接,都是对对象的属性和状态进行一次操作和变化。

无论后台语言,还是前端开发,现在很多很多写法已经发生了变化,更多的是链式写法——即,上一个函数结果直接作为下一个方法的起点或者变量带入执行,本文将简单罗列出不同语言的链式写法,权当一次总结。

在 Laravel 5.3 开始引入了 tap 全局函数

<?php
function tap($value, $callback)
{$callback($value);return $value;
}

传入 value 值,并对 value 值进行操作,最后再返回 value。tap 函数就好将 value 值进行镀金,修改 value 对象的状态和属性,最后返回结果可以进行后续操作。如:

<?php
return tap($user)->update(['name' => $name,'age' => $age,
]);

当我们传入一个$usermodel 到 tap 方法后,我们就可以链式各种 Model函数,正常情况下,update 方法返回的是 boolean 类型,正因为我们用了 tap 函数,update 方法返回的是 user model 对象,可以继续链式 Model 方法,操作 user 模型对象。

其实在写一些第三方插件时,我们通常也采用链式的套路和写法,如 PHP 中的魔术方法 __call():

public function __call($method, $args)
{$map = ['template' => 'template_id','templateId' => 'template_id','uses' => 'template_id','to' => 'touser','receiver' => 'touser','color' => 'topcolor','topColor' => 'topcolor','url' => 'url','miniprogram' => 'miniprogram','link' => 'url','data' => 'data','with' => 'data',];if (0 === stripos($method, 'with') && strlen($method) > 4) {$method = lcfirst(substr($method, 4));}if (0 === stripos($method, 'and')) {$method = lcfirst(substr($method, 3));}if (isset($map[$method])) {$this->message[$map[$method]] = array_shift($args);}return $this;
}

有了这个魔法方法,链式写法就很有感觉了:

yield $this->bnotice->template($templateid)->to($v)->url($url)->data($data)->request();

在 Promise 中链式写法也很常用

ES6 Promise 中,promises的真正强大之处在于多重的链接,当调用promise.then(func)时返回一个新的 promise,它不会执行直到上一个完成。

只要条件允许,你可以一直then()下去,如

gulp 链式写法

gulp 是目前最火的前端构建工具之一,在 npm 上也是最火的工具之一。它的出现让前端开发变得十分方便。它和 webpack 不太一样,它属于流式处理文件,简单清晰。其中gulp.pipe()处理流程是将上一步的输出作为下一步的输入:

Glide 链式写法

Glide,一个被google所推荐的图片加载库。当我写 Android 代码时,我很喜欢这种链式的写法:

Masonry 链式写法

在 iOS 开发时,使用 masonry 框架实现自动布局时,链式写法也很常见:

// 设置约束
[demoView mas_makeConstraints:^(MASConstraintMaker *make) {// 设置顶部的约束 距self.view顶部为100make.top.equalTo(self.view).offset(100);// 设置左边的约束make.left.equalTo(self.view).offset(20);// 设置右边的约束make.right.equalTo(self.view).offset(-20);// 设置高make.height.equalTo(@50);}];

总结

本文只是简单罗列出一些链式写法,无论是后台语言,前端语言,工具,还是 Android、iOS 开发,这种链式写法已经得到很多开发者的推崇。

这种链式规则都是:将对象传入每个方法函数中进行逻辑处理,然后返回该对象,然后再进入下一个方法中,周而复始,此时改变的是这个对象的属性和对象。

就好比一个人不断进入不同的环境进行磨炼——进入一个环境磨炼自己,然后离开,然后再进入下一个环境继续镀金,最后返回自己,但此时的【自己】已经通过不同的【环境】得以锻炼,变成不一样的自己~~~

从 PHP、Promise、Android 和 iOS 代码看如何链式编程相关推荐

  1. 十二、Promise的学习笔记(Promise的基本使用、链式编程、all())

    一.认识Promise ES6中一个非常重要和好用的特性就是Promise 但是初次接触Promise会一脸懵逼,这TM是什么东西? 看看官方或者一些文章对它的介绍和用法,也是一头雾水. Promis ...

  2. 黑魔法:iOS链式编程

    链式编程 在使用SDAutoLayout 时就已经发现这种链式编程.通过"." 将属性链接在一起形成如同一条链的编程方法. self.totalMoneyCount.sd_layo ...

  3. iOS端JSON转Model链式编程框架SuperKVC使用方法与原理

    背景 在client编程中.字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入.且无法处理类型转换.key与属性名不正确应 ...

  4. 不少Android应用为何丧心病狂地进行链式启动及针对开发者的解决方案

    文章目录 1. 按 2. 链式启动不受手机厂商与用户的欢迎 3. 安卓系统推送途径 4. 链式启动所要解决的问题 5. 终极解决方案:加入统一推送联盟 6. 总结 1. 按 近日,一个"照明 ...

  5. 对Android和iOS项目中的模块结构和类结构设计的探讨

    1. 现有的代码规范缺少探讨的部分 1.1 关于项目的代码结构 通常来说,一个项目由多个模块组成:一个模块由多个类组成:一个类由多个方法组成:一个方法由多条语句组成: 按照代码粒度从大到小,可以划分为 ...

  6. js中 浅谈回调地狱 Promise之终极改造代码

    Callback helll Promise 异步编程的执行顺序都是不一样的,无法保证代码的顺序: 以下是读取三个文件 const fs=require('fs');fs.readFile('a.tx ...

  7. 彻底掌握 Promise-原生Promise的实现(二) Promise的链式调用

    在 彻底掌握 Promise- 原生 Promise 的实现(一) 已经初步实现了 promise 的简易版本,这距离实现完整版本的 Promise 还有一段距离,下面我们将在简易版本的基础上增加 P ...

  8. JS 通过 Promise 实现延时执行,支持链式调用

    JS 通过 Promise 实现延时执行,支持链式调用 延时执行 sleep 版本一 同步执行 异步方式 sleep 版本二 支持链式调用 版本一 版本二 参考资料 延时执行 定义sleep函数 sl ...

  9. 还搞不明白“响应式编程”,那得看这篇

    响应式编程详解 响应式编程是一种基于异步数据流驱动.响应式.使用声明式范式的编程模型,需要遵循一定的响应式编程开发规范,并且有具体的类库实现.响应式编程基于数据流而不是控制流进行业务逻辑的推进. 响应 ...

最新文章

  1. 如何将 winston log 库记录的日志写入 mongo DB 数据库
  2. AI 秒杀人类!OpenAI 击败 DOTA2 世界冠军 OG
  3. 《HBase权威指南》读书笔记:第一章 简介
  4. Mac双开微信(2种方法)、Win多开微信
  5. 一个https神奇的故事
  6. java下一页按钮_如何仅使用Spring在Java中单击提交按钮后才能转到下一页
  7. SQL server 服务报 远程过程调用失败0x800706be
  8. PHP网站地图生成类
  9. freemarker导出excel时office报错而wps不会
  10. 励志短片:献给努力前行的你
  11. nas安装emby_Emby+KODI--完美的NAS多媒体方案
  12. android开发关机代码,android代码实现关机
  13. 莫提博客 - 简约优雅的个人博客系统
  14. linux exp 导出数据库命令,linux exp 导出数据库
  15. 【知识分享】C语言中的设计模式——命令模式
  16. 话说当时晁盖并众人 水浒传
  17. 小白也能看懂:最全无线渗透测试与攻防+Fluxison钓鱼教程+路由器安全设置指南 2021.3.31
  18. Mysql数据库练习题之商品库
  19. Cython编译python为so 代码加密
  20. 联想卡在logo界面_电脑开机一直停在lenovo界面的解决方法

热门文章

  1. 【ESP8266教程】零基础入门学用物联网-基础知识篇(太极创客团队)学习笔记
  2. 机器视觉之图像基础知识,让计算机去理解获取数字图像与视频中的信息
  3. 修复百度站内搜索不能搜索问题
  4. java -- IO流之字节流
  5. 脑PET图像分析和疾病预测方案总结
  6. tty驱动初步了解学习
  7. POJ 1129 Channel Allocation DFS+四色问题优化
  8. opencv3/C++ 使用Tracker进行简单目标跟踪
  9. 辐射76角色扮演Steam游戏简体中文版下载
  10. 诺基亚安卓手机_诺基亚7.1即将升级安卓10,还有另外5款将在一月更新