摘要:函數就好將值進行鍍金,修改對象的狀態和屬性,最后返回結果可以進行后續操作。只要條件允許,你可以一直下去,如鏈式寫法是目前最火的前端構建工具之一,在上也是最火的工具之一。
鏈式編程或者鏈式寫法,是將多個方法 (函數) 通過點號 (.) 或者 (->)等符號鏈接在一起成為一句代碼,這樣不僅可以增強代碼的可讀性,而且每次鏈接,都是對對象的屬性和狀態進行一次操作和變化。
無論后臺語言,還是前端開發,現在很多很多寫法已經發生了變化,更多的是鏈式寫法——即,上一個函數結果直接作為下一個方法的起點或者變量帶入執行,本文將簡單羅列出不同語言的鏈式寫法,權當一次總結。
在 Laravel 5.3 開始引入了 tap 全局函數傳入 value 值,并對 value 值進行操作,最后再返回 value。tap 函數就好將 value 值進行鍍金,修改 value 對象的狀態和屬性,最后返回結果可以進行后續操作。如:
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,它不會執行直到上一個完成。
gulp 鏈式寫法
只要條件允許,你可以一直then()下去,如gulp 是目前最火的前端構建工具之一,在 npm 上也是最火的工具之一。它的出現讓前端開發變得十分方便。它和 webpack 不太一樣,它屬于流式處理文件,簡單清晰。其中gulp.pipe()處理流程是將上一步的輸出作為下一步的輸入:
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 開發,這種鏈式寫法已經得到很多開發者的推崇。
這種鏈式規則都是:將對象傳入每個方法函數中進行邏輯處理,然后返回該對象,然后再進入下一個方法中,周而復始,此時改變的是這個對象的屬性和對象。
就好比一個人不斷進入不同的環境進行磨煉——進入一個環境磨煉自己,然后離開,然后再進入下一個環境繼續鍍金,最后返回自己,但此時的【自己】已經通過不同的【環境】得以鍛煉,變成不一樣的自己~~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25704.html
摘要:不少第三方模塊并沒有做到異步調用,卻裝作支持回調,堆棧的風險就更大。我們可以編寫一個高階函數,讓傳入的函數順序執行還是我們之前的例子看起來還是很不錯的,簡潔并且清晰,最終的代碼量也沒有增加。 原文: http://pij.robinqu.me/JavaScript_Core/Functional_JavaScript/Async_Programing_In_JavaScript....
摘要:學習開發,無論是前端開發還是都避免不了要接觸異步編程這個問題就和其它大多數以多線程同步為主的編程語言不同的主要設計是單線程異步模型。由于異步編程可以實現非阻塞的調用效果,引入異步編程自然就是順理成章的事情了。 學習js開發,無論是前端開發還是node.js,都避免不了要接觸異步編程這個問題,就和其它大多數以多線程同步為主的編程語言不同,js的主要設計是單線程異步模型。正因為js天生的與...
摘要:回調函數,一般在同步情境下是最后執行的,而在異步情境下有可能不執行,因為事件沒有被觸發或者條件不滿足。同步方式請求異步同步請求當請求開始發送時,瀏覽器事件線程通知主線程,讓線程發送數據請求,主線程收到 一直以來都知道JavaScript是一門單線程語言,在筆試過程中不斷的遇到一些輸出結果的問題,考量的是對異步編程掌握情況。一般被問到異步的時候腦子里第一反應就是Ajax,setTimse...
摘要:實例生成以后,可以用方法分別指定狀態和狀態的回調函數處理返回的結果。 文章的目的 揭開go的 gorouter,c#的 async/await等 使用同步的寫法寫異步代碼的神秘面紗 , 證明其本質就是一個語法糖 為什么使用js來講異步編程 因為js可以通過編程語言自己的語法特性,實現async/await語法 js異步最底層寫法promise const promise = new P...
閱讀 375·2023-04-25 16:38
閱讀 1492·2021-09-26 09:46
閱讀 3333·2021-09-08 09:35
閱讀 2785·2019-08-30 12:54
閱讀 3255·2019-08-29 17:06
閱讀 1023·2019-08-29 14:06
閱讀 3351·2019-08-29 13:00
閱讀 3471·2019-08-28 17:53