成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從 PHP、Promise、Android 和 iOS 代碼看如何鏈式編程

chaosx110 / 2132人閱讀

摘要:函數(shù)就好將值進行鍍金,修改對象的狀態(tài)和屬性,最后返回結(jié)果可以進行后續(xù)操作。只要條件允許,你可以一直下去,如鏈式寫法是目前最火的前端構(gòu)建工具之一,在上也是最火的工具之一。

鏈式編程或者鏈式寫法,是將多個方法 (函數(shù)) 通過點號 (.) 或者 (->)等符號鏈接在一起成為一句代碼,這樣不僅可以增強代碼的可讀性,而且每次鏈接,都是對對象的屬性和狀態(tài)進行一次操作和變化。

無論后臺語言,還是前端開發(fā),現(xiàn)在很多很多寫法已經(jīng)發(fā)生了變化,更多的是鏈式寫法——即,上一個函數(shù)結(jié)果直接作為下一個方法的起點或者變量帶入執(zhí)行,本文將簡單羅列出不同語言的鏈式寫法,權(quán)當(dāng)一次總結(jié)。

在 Laravel 5.3 開始引入了 tap 全局函數(shù)

傳入 value 值,并對 value 值進行操作,最后再返回 value。tap 函數(shù)就好將 value 值進行鍍金,修改 value 對象的狀態(tài)和屬性,最后返回結(jié)果可以進行后續(xù)操作。如:

update([
    "name" => $name,
    "age" => $age,
]);

當(dāng)我們傳入一個$usermodel 到 tap 方法后,我們就可以鏈式各種 Model函數(shù),正常情況下,update 方法返回的是 boolean 類型,正因為我們用了 tap 函數(shù),update 方法返回的是 user model 對象,可以繼續(xù)鏈式 Model 方法,操作 user 模型對象。

其實在寫一些第三方插件時,我們通常也采用鏈式的套路和寫法,如 PHP 中的魔術(shù)方法 __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的真正強大之處在于多重的鏈接,當(dāng)調(diào)用promise.then(func)時返回一個新的 promise,它不會執(zhí)行直到上一個完成。

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

gulp 鏈式寫法

gulp 是目前最火的前端構(gòu)建工具之一,在 npm 上也是最火的工具之一。它的出現(xiàn)讓前端開發(fā)變得十分方便。它和 webpack 不太一樣,它屬于流式處理文件,簡單清晰。其中g(shù)ulp.pipe()處理流程是將上一步的輸出作為下一步的輸入:

Glide 鏈式寫法

Glide,一個被google所推薦的圖片加載庫。當(dāng)我寫 Android 代碼時,我很喜歡這種鏈式的寫法:

Masonry 鏈式寫法

在 iOS 開發(fā)時,使用 masonry 框架實現(xiàn)自動布局時,鏈式寫法也很常見:

// 設(shè)置約束
[demoView mas_makeConstraints:^(MASConstraintMaker *make) {

    // 設(shè)置頂部的約束 距self.view頂部為100
    make.top.equalTo(self.view).offset(100);
    
    // 設(shè)置左邊的約束
    make.left.equalTo(self.view).offset(20);
    
    // 設(shè)置右邊的約束
    make.right.equalTo(self.view).offset(-20);
    
    // 設(shè)置高
    make.height.equalTo(@50);

}];
總結(jié)

本文只是簡單羅列出一些鏈式寫法,無論是后臺語言,前端語言,工具,還是 Android、iOS 開發(fā),這種鏈式寫法已經(jīng)得到很多開發(fā)者的推崇。

這種鏈式規(guī)則都是:將對象傳入每個方法函數(shù)中進行邏輯處理,然后返回該對象,然后再進入下一個方法中,周而復(fù)始,此時改變的是這個對象的屬性和對象。

就好比一個人不斷進入不同的環(huán)境進行磨煉——進入一個環(huán)境磨煉自己,然后離開,然后再進入下一個環(huán)境繼續(xù)鍍金,最后返回自己,但此時的【自己】已經(jīng)通過不同的【環(huán)境】得以鍛煉,變成不一樣的自己~~~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25704.html

相關(guān)文章

  • Javascript異步編程 - 函數(shù)式編程 - Javascript核心

    摘要:不少第三方模塊并沒有做到異步調(diào)用,卻裝作支持回調(diào),堆棧的風(fēng)險就更大。我們可以編寫一個高階函數(shù),讓傳入的函數(shù)順序執(zhí)行還是我們之前的例子看起來還是很不錯的,簡潔并且清晰,最終的代碼量也沒有增加。 原文: http://pij.robinqu.me/JavaScript_Core/Functional_JavaScript/Async_Programing_In_JavaScript....

    hlcc 評論0 收藏0
  • js學(xué)習(xí)之異步處理

    摘要:學(xué)習(xí)開發(fā),無論是前端開發(fā)還是都避免不了要接觸異步編程這個問題就和其它大多數(shù)以多線程同步為主的編程語言不同的主要設(shè)計是單線程異步模型。由于異步編程可以實現(xiàn)非阻塞的調(diào)用效果,引入異步編程自然就是順理成章的事情了。 學(xué)習(xí)js開發(fā),無論是前端開發(fā)還是node.js,都避免不了要接觸異步編程這個問題,就和其它大多數(shù)以多線程同步為主的編程語言不同,js的主要設(shè)計是單線程異步模型。正因為js天生的與...

    VioletJack 評論0 收藏0
  • 淺析JavaScript異步

    摘要:回調(diào)函數(shù),一般在同步情境下是最后執(zhí)行的,而在異步情境下有可能不執(zhí)行,因為事件沒有被觸發(fā)或者條件不滿足。同步方式請求異步同步請求當(dāng)請求開始發(fā)送時,瀏覽器事件線程通知主線程,讓線程發(fā)送數(shù)據(jù)請求,主線程收到 一直以來都知道JavaScript是一門單線程語言,在筆試過程中不斷的遇到一些輸出結(jié)果的問題,考量的是對異步編程掌握情況。一般被問到異步的時候腦子里第一反應(yīng)就是Ajax,setTimse...

    Tangpj 評論0 收藏0
  • js來聊聊異步編程

    摘要:實例生成以后,可以用方法分別指定狀態(tài)和狀態(tài)的回調(diào)函數(shù)處理返回的結(jié)果。 文章的目的 揭開go的 gorouter,c#的 async/await等 使用同步的寫法寫異步代碼的神秘面紗 , 證明其本質(zhì)就是一個語法糖 為什么使用js來講異步編程 因為js可以通過編程語言自己的語法特性,實現(xiàn)async/await語法 js異步最底層寫法promise const promise = new P...

    huashiou 評論0 收藏0

發(fā)表評論

0條評論

chaosx110

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<