當(dāng)您在循環(huán)中看到斷點(diǎn)語(yǔ)句時(shí),通常表明可以將其提取到功能中的獨(dú)特邏輯。 2.提取這種邏輯可以通過創(chuàng)建具有清晰輸入和輸出的孤立的單一責(zé)任函數(shù)來提高可測(cè)試性; 3。此重構(gòu)可以實(shí)現(xiàn)獨(dú)立的單位測(cè)試,如contains_item和is_valid_name之類的示例所示; 4。除了測(cè)試之外,這種方法還通過促進(jìn)模塊化的可合章代碼設(shè)計(jì)來增強(qiáng)可重複性,可讀性,可維護(hù)性和調(diào)試。
編寫可測(cè)試的代碼不會(huì)偶然發(fā)生,而是故意設(shè)計(jì)選擇的結(jié)果。編寫良好測(cè)試的最常見障礙之一是緊密耦合的線性代碼很難分離。提高可測(cè)試性的有用策略始於一個(gè)簡(jiǎn)單的觀察:每當(dāng)您在循環(huán)中看到break
語(yǔ)句時(shí),可能是邏輯想要成為功能的標(biāo)誌。

讓我們探討該想法周圍的重構(gòu)代碼如何導(dǎo)致更清潔,更模塊化和最終更可測(cè)試的軟件。
1。 break
和內(nèi)聯(lián)邏輯的問題
考慮這個(gè)典型的循環(huán):

項(xiàng)目= [1、2、3、4、5、6] 目標(biāo)= 4 找到= false 對(duì)於項(xiàng)目中的項(xiàng)目: 如果項(xiàng)目==目標(biāo): 找到= true 休息 如果發(fā)現(xiàn): 打印(“找到目標(biāo)!”)
這有效,但是搜索邏輯直接嵌入了控制流中。您無法獨(dú)立測(cè)試“查找項(xiàng)目”行為。 break
是一個(gè)線索:它標(biāo)誌著特定意圖的終結(jié) - “當(dāng)我們找到所需的東西時(shí)停止?!痹撘鈭D應(yīng)封裝。
2。將邏輯提取到功能中可提高可測(cè)試性
通過將搜索提取到單獨(dú)的函數(shù)中,我們使代碼更可讀和可測(cè)試:

def contains_item(項(xiàng)目,目標(biāo)): 對(duì)於項(xiàng)目中的項(xiàng)目: 如果項(xiàng)目==目標(biāo): 返回true 返回false
現(xiàn)在我們可以編寫單元測(cè)試:
def test_contains_item(): assert contains_item([1,2,3],2)是正確的 assert contains_item([1,2,3],4)是錯(cuò)誤的 assert contains_item([],1)是錯(cuò)誤的
該功能具有單一的責(zé)任,明確的輸入和輸出,沒有副作用。它很容易測(cè)試,因?yàn)樗枪铝⒌摹?/p>
該原則適用於簡(jiǎn)單的搜索。每當(dāng)您使用break
, continue
還是在循環(huán)或有條件塊內(nèi)提早return
,請(qǐng)問: “這是一種獨(dú)特的行為嗎?”如果是,請(qǐng)?zhí)崛∷?/p>
3。一般策略:從控制流到可合約的功能
這是一種實(shí)用方法:
- 尋找
break
,continue
或提早return
聲明- 它們通常標(biāo)誌著邏輯單元的結(jié)束。 - 命名邏輯背後的意圖(例如,“查找項(xiàng)目”,“驗(yàn)證輸入”,“檢查許可”)。
- 將該邏輯提取到具有清晰參數(shù)並返回值的單獨(dú)函數(shù)中。
- 用函數(shù)調(diào)用替換內(nèi)聯(lián)邏輯。
- 為新功能編寫測(cè)試。
示例:在循環(huán)中驗(yàn)證用戶輸入。
前:
而真: 名稱=輸入(“ Enter Name:”) 如果name.strip()和len(name)> = 2: 休息 打?。ā盁o效的名稱。再試一次?!保?/pre>後:
def is_valid_name(name): 返回布爾(name.strip())和len(name)> = 2 #用於循環(huán) 而真: 名稱=輸入(“ Enter Name:”) 如果IS_VALID_NAME(名稱): 休息 打印(“無效的名稱。再試一次?!保?/pre>現(xiàn)在可以獨(dú)立測(cè)試
is_valid_name()
:def test_is_valid_name(): assert is_valid_name(“ jo”)是正確的 essert is_valid_name(“ j”)是正確的 surstert is_valid_name(“ j”)是false assert is_valid_name(“”)是錯(cuò)誤的
4。除了測(cè)試之外的好處
雖然可檢驗(yàn)性是主要目標(biāo),但這種方法帶來了其他優(yōu)勢(shì):
- 可重複性:可以在其他地方使用相同的驗(yàn)證。
- 可讀性:代碼讀起來像一個(gè)故事 - 高級(jí)別的流呼叫描述功能。
- 可維護(hù)性:在一個(gè)地方修復(fù)一個(gè)錯(cuò)誤,而不是散佈在循環(huán)中。
- 調(diào)試:當(dāng)功能較小且專注時(shí),更容易跟蹤和日誌行為。
更複雜的邏輯(例如解析,過濾或狀態(tài)檢查)可以使用相同的模式分解。
break
的存在並不是天生的不好,但這是一個(gè)信號(hào)。這通常意味著您正在實(shí)施一個(gè)應(yīng)得名的決定或搜索。通過將這種邏輯轉(zhuǎn)換為功能,您自然地朝著更可檢驗(yàn)的模塊化設(shè)計(jì)轉(zhuǎn)向。
基本上,如果您看到break
,請(qǐng)問:“我可以提取這個(gè)嗎?”答案通常是肯定的,您的測(cè)試會(huì)感謝您。
以上是從'突破”到功能:改善代碼可檢驗(yàn)性的策略的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

使用break可在找到目標(biāo)時(shí)立即退出循環(huán),避免不必要的處理;2.通過提前處理邊界情況減少嵌套條件;3.利用帶標(biāo)籤的break控制多層嵌套循環(huán),直接跳出指定層級(jí);4.採(cǎi)用守衛(wèi)子句模式提升代碼可讀性和調(diào)試效率,使邏輯更清晰完整。

break用於立即退出循環(huán),後續(xù)迭代不再執(zhí)行;2.continue用於跳過當(dāng)前迭代,繼續(xù)下一次循環(huán);3.在嵌套循環(huán)中,break和continue可加數(shù)字參數(shù)控制跳出多層;4.實(shí)際應(yīng)用中,break常用於找到目標(biāo)後終止搜索,continue用於過濾無效數(shù)據(jù);5.避免過度使用break和continue,保持循環(huán)邏輯清晰易讀,最終應(yīng)根據(jù)場(chǎng)景合理選擇以提升代碼效率。

使用Breakinlarge-ScaleIterationsCantimprectimproverimprovePerformanceByEnablingEarlyLymelation,尤其是InsearchOperations WherethethetArgetConditionallyseartial.2.2.the BreakStatattateTateTatementItitItItItItItItInTrodIntroDucesNeTroduceNtroducibleOverOverOverHead,ASITTRANSL,ASITTRANSL

ThebreakstatementinPHPexitstheinnermostlooporswitch,andcanoptionallyexitmultiplenestedlevelsusinganumericargument;1.breakstopsthecurrentlooporswitch,2.breakwithanumber(e.g.,break2)exitsthatmanyenclosingstructures,3.itisusefulforefficiencyandcontrolin

使用break的數(shù)字參數(shù)可以跳出多層嵌套循環(huán),避免使用標(biāo)誌變量;例如break2能直接退出兩層循環(huán),提升代碼可讀性和維護(hù)性,適用於在多層循環(huán)中基於條件終止執(zhí)行的場(chǎng)景。

Whenyouseeabreakstatementinaloop,itoftenindicatesadistinctlogicthatcanbeextractedintoafunction;2.Extractingsuchlogicimprovestestabilitybycreatingisolated,single-responsibilityfunctionswithclearinputsandoutputs;3.Thisrefactoringenablesindependentunitt

BreakIsApprepreprefinswitchStatementStopreventfall-throughandinloopstoexitearlyforfifsifice,SueAsAsWhenAnaTsIffound; 2. ItbecomesacodesmellwhenusedEndedeplynesteplyNestEdeplloopSwithBreak2orbreak2orhigher,OrwhenSimullyTryingerlyTryerlytrynernersforerrorrorhandling,指示

UsEtheBreakStatementToExitInfinItelOpswhenAcenditionSt,sustasuserInputorTaskCompletion.2.PairbreakWithClear,有意義的fifulconditionStoensureleloopsRemainReadableAbableAndableAnponsive.3.avoidoverovervoidoverovervoidoverovervoidoverbybybybyemployingflagvaraiablesforplepleplepleCompleCompleCompleComainTainAinainCodeCodeClaainCodeCla
