鏈式編程或者鏈式寫法,是將多個方法 (函數) 經過點號 (.) 或者 (->)等符號連接在一塊兒成爲一句代碼,這樣不只能夠加強代碼的可讀性,並且每次連接,都是對對象的屬性和狀態進行一次操做和變化。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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。