摘要:類型檢測(cè)類型檢測(cè)也是一種讓代碼簡(jiǎn)潔的小技巧。上文中,我們只是嘗試搜集了一些例子,在這些例子里,你只需做出一點(diǎn)小的努力,就可以讓你的代碼變得更好更簡(jiǎn)潔。
保持代碼簡(jiǎn)潔和高可讀性遠(yuǎn)遠(yuǎn)要比我們想象的要難,有時(shí)候甚至比持續(xù)架構(gòu)設(shè)計(jì)都要難。這里收集了一些可能對(duì)你重構(gòu)代碼有用的 代碼片段 供大家參考。
數(shù)組轉(zhuǎn)化我們常常需要在一個(gè)函數(shù)里面接受一個(gè)支持字符串或者數(shù)組類型數(shù)據(jù)的參數(shù)??梢允褂眠m當(dāng)?shù)念愋娃D(zhuǎn)化方式將字符串類型轉(zhuǎn)化成數(shù)組類型,來(lái)取代類型檢測(cè)。
// 沒(méi)有類型轉(zhuǎn)化 $param = is_array($param) ? $param : [$param]; array_map(function ($item) { // }, $param); // 使用類型轉(zhuǎn)化 array_map(function ($item) { // }, (array) $param);
當(dāng)然這看起來(lái)沒(méi)什么區(qū)別,只是節(jié)省了一行代碼而已。但是你可以設(shè)想一下,當(dāng)你使用復(fù)雜的循環(huán)結(jié)構(gòu)或者嵌套數(shù)組處理大量數(shù)據(jù)時(shí)。這樣做將會(huì)有意義,它能使代碼保持簡(jiǎn)潔。
類型檢測(cè)類型檢測(cè)也是一種讓代碼簡(jiǎn)潔的小技巧。一個(gè)小的類型檢測(cè)可以為你節(jié)省幾行代碼,同時(shí)可以使參數(shù)具有一些靈活性。
public function scopeOfTeam($query, $team) { $team = $team instanceof Team ? $team->id : $team; return $query->where("team_id", $team); }
在這個(gè)例子中,我們可以使用一個(gè)表達(dá)式在一行中進(jìn)行類型檢測(cè),所以我們不需要到處使用 if-else 語(yǔ)句。同時(shí)這樣函數(shù)就可以接收 Team 類型或 int 型兩種類型的數(shù)據(jù)了。
重構(gòu)長(zhǎng) If 語(yǔ)句有時(shí)候,在執(zhí)行動(dòng)作之前我們需要做一些條件檢查。但是,隨著我們的應(yīng)用的持續(xù)增長(zhǎng),if 語(yǔ)句會(huì)變得越來(lái)越長(zhǎng)。所以,我們需要考慮重構(gòu)。一個(gè)小例子:
// 與其這樣 if ($a === "val_1" || $a === "val_2" || $a === "val_3") { // 執(zhí)行動(dòng)作 } // 不如這樣 if (in_array($a, ["val_1", "val_2", "val_3"])) { // 執(zhí)行方法 }
注意,第一個(gè)例子運(yùn)行方式與第二個(gè)有一些不同。第一個(gè)例子中,只要有一個(gè)條件為真,則后面的條件就會(huì)被忽略,在一些情況下,它會(huì)更快。謝謝 Zois Pag 的建議。
這兩個(gè)例子的結(jié)果是一樣的,但是第二個(gè)更整潔。我們可以不再使用 || 操作符,并且只引用了 $a 變量一次。
去掉不必要的 if 語(yǔ)句一個(gè)普遍的錯(cuò)誤,我們會(huì)經(jīng)常性的過(guò)度使用 if-else 語(yǔ)句。當(dāng)然,有些時(shí)候它是不可省略的,但也有些情況,我們不需要用到它。
// 之前這樣用 if ($a === "b") { return true; } else { return false; } // 現(xiàn)在可以這樣 return $a === "b";
但是邏輯顛倒了怎么辦? 那么, 如果條件是?true?我們又想返回 false 該怎么辦? 當(dāng)然,在 if 語(yǔ)句中,我們僅需要相反的 true 和 false ,但是在重構(gòu)的版本中,我們會(huì)有一個(gè)相對(duì)輕松的工作。只需要在你驗(yàn)真假的時(shí)候加上 ! 運(yùn)算符。它將返回顛倒后的結(jié)果。
總結(jié)每天我們都能發(fā)現(xiàn)一些充滿了過(guò)度復(fù)雜邏輯的方案和代碼,長(zhǎng)期來(lái)看,這對(duì)開(kāi)發(fā)者和產(chǎn)品本身都不好。上文中,我們只是嘗試搜集了一些例子,在這些例子里,你只需做出一點(diǎn)小的努力,就可以讓你的代碼變得更好更簡(jiǎn)潔。
討論請(qǐng)前往社區(qū):https://laravel-china.org/top...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28444.html
摘要:大刀闊斧的改造在學(xué)習(xí)了兩遍之后,基于教程開(kāi)發(fā)的校園二手書(shū)交易平臺(tái)熊能本周閱讀清單紙牌屋弗蘭克知道的太晚了實(shí)現(xiàn)微信紅包拆分算法聊聊最近求職發(fā)生的故事無(wú)銘更多現(xiàn)代化知識(shí),請(qǐng)前往知識(shí)社區(qū) showImg(https://segmentfault.com/img/bV8ctF?w=1650&h=1100); 最新資訊 Laravel 5.6 中文文檔翻譯完成,譯者 60 人,耗時(shí) 10 天...
摘要:以為例,來(lái)講解一下的一些有趣的配置。帥氣的也是調(diào)整開(kāi)發(fā)效率的一部分。的開(kāi)發(fā)者日也并不是全部商業(yè)宣傳,至少它做的事情是值得讓開(kāi)發(fā)者認(rèn)可的。抱歉大會(huì)主要將了以下幾項(xiàng)內(nèi)容,上午是主會(huì)場(chǎng),下午分倆個(gè)會(huì)場(chǎng)和,作為一個(gè)程序員,我沒(méi)得選。 showImg(https://segmentfault.com/img/bVbjWTw?w=2000&h=1118); 前言 本章主要說(shuō)一下如何去使用Jetbr...
摘要:當(dāng)查詢數(shù)據(jù)時(shí),本地范圍允許我們創(chuàng)建自己的查詢構(gòu)造器鏈?zhǔn)椒椒ā_@樣便會(huì)知道這是一個(gè)本地范圍并且可以在查詢構(gòu)造器中使用。某些查詢構(gòu)造器不可用或者說(shuō)可用但是方法名不同,關(guān)于這些請(qǐng)查閱所有集合的方法。 showImg(https://segmentfault.com/img/remote/1460000017877956?w=800&h=267); Laravel 因可編寫(xiě)出干凈,可用可調(diào)試的...
閱讀 809·2021-11-25 09:43
閱讀 1673·2021-09-29 09:42
閱讀 1893·2019-08-30 15:55
閱讀 3413·2019-08-30 15:54
閱讀 2618·2019-08-30 13:20
閱讀 3500·2019-08-29 13:25
閱讀 908·2019-08-28 18:03
閱讀 1777·2019-08-26 13:44