链式编程或者链式写法,是将多个方法 (函数) 经过点号 (.) 或者 (->)等符号连接在一块儿成为一句代码,这样不只能够加强代码的可读性,并且每次连接,都是对对象的属性和状态进行一次操做和变化。php
不管后台语言,仍是前端开发,如今不少不少写法已经发生了变化,更多的是链式写法——即,上一个函数结果直接做为下一个方法的起点或者变量带入执行,本文将简单罗列出不一样语言的链式写法,权当一次总结。前端
在 Laravel 5.3 开始引入了 tap 全局函数
<?php function tap($value, $callback) { $callback($value); return $value; }
传入 value 值,并对 value 值进行操做,最后再返回 value。tap 函数就好将 value 值进行镀金,修改 value 对象的状态和属性,最后返回结果能够进行后续操做。如:webpack
<?php return tap($user)->update([ 'name' => $name, 'age' => $age, ]);
当咱们传入一个$user
model 到 tap 方法后,咱们就能够链式各类 Model函数,正常状况下,update 方法返回的是 boolean 类型,正由于咱们用了 tap 函数,update 方法返回的是 user model 对象,能够继续链式 Model 方法,操做 user 模型对象。web
其实在写一些第三方插件时,咱们一般也采用链式的套路和写法,如 PHP 中的魔术方法 __call()
:npm
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 链式写法
gulp 是目前最火的前端构建工具之一,在 npm 上也是最火的工具之一。它的出现让前端开发变得十分方便。它和 webpack 不太同样,它属于流式处理文件,简单清晰。其中gulp.pipe()处理流程是将上一步的输出做为下一步的输入:promise
Glide 链式写法
Glide,一个被google所推荐的图片加载库。当我写 Android 代码时,我很喜欢这种链式的写法:微信
Masonry 链式写法
在 iOS 开发时,使用 masonry 框架实现自动布局时,链式写法也很常见:框架
// 设置约束 [demoView mas_makeConstraints:^(MASConstraintMaker *make) { // 设置顶部的约束 距self.view顶部为100 make.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 开发,这种链式写法已经获得不少开发者的推崇。
这种链式规则都是:将对象传入每一个方法函数中进行逻辑处理,而后返回该对象,而后再进入下一个方法中,周而复始,此时改变的是这个对象的属性和对象。
就比如一我的不断进入不一样的环境进行磨炼——进入一个环境磨炼本身,而后离开,而后再进入下一个环境继续镀金,最后返回本身,但此时的【本身】已经经过不一样的【环境】得以锻炼,变成不同的本身~~~
开通原创了,恭喜下本身!!!
iOS 打赏做者 | 关注公众号 |
---|---|
![]() |
![]() |
本文分享自微信公众号 - coding01(coding01)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。