亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
2。將條件提取到描述性函數(shù)或變量中
3。用策略模式或查找表代替嵌套條件
4。使用多態(tài)性根據(jù)類型或狀態(tài)進(jìn)行行為
5。結(jié)合佈爾代數(shù)
獎(jiǎng)金:提防混亂的擔(dān)憂
首頁 後端開發(fā) php教程 重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略

重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略

Jul 30, 2025 am 04:28 AM
PHP if Operators

  1. 使用後衛(wèi)條款提早返回和平坦的結(jié)構(gòu)。 2。將復(fù)雜條件提取到描述性函數(shù)或變量中,以清晰度和重複使用。 3。用查找表或策略模式代替多個(gè)條件組合,以集中邏輯。 4.應(yīng)用多態(tài)性通過將行為委派給班級(jí)來消除基於型或州的條件。 5。使用布爾代數(shù)簡(jiǎn)化嵌套條件,同時(shí)避免過度長(zhǎng)度的表達(dá)式。每種策略都會(huì)減少認(rèn)知負(fù)荷,提高可維護(hù)性並闡明條件邏輯的意圖。

重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略

嵌套if語句(通常稱為“如果地獄”)是一種常見的代碼氣味,使邏輯難以遵循,測(cè)試和維護(hù)。深度嵌套的條件掩蓋了意圖,增加了認(rèn)知負(fù)荷並使重構(gòu)風(fēng)險(xiǎn)。好消息?有證明的策略可以使有條件的邏輯弄平和闡明。 if地獄嵌套在乾淨(jìng),可讀的代碼中,這是重構(gòu)嵌套的方法。

重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略

1。使用後衛(wèi)條款(早期退貨)

減少嵌套的最有效方法之一是當(dāng)條件使其餘功能無關(guān)緊要時(shí),早期返回。

而不是:

重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略
 def process_user(用戶):
    如果用戶:
        如果user.is_active:
            如果user.has_permission:
                #主要邏輯在這裡
                返回“處理...”
            別的:
                返回“無許可”
        別的:
            返回“非活動(dòng)用戶”
    別的:
        返回“無效用戶”

帶有早期回報(bào)的重構(gòu):

 def process_user(用戶):
    如果不是用戶:
        返回“無效用戶”
    如果不是user.is_active:
        返回“非活動(dòng)用戶”
    如果不是user.has_permission:
        返回“無許可”

    #主要邏輯在這裡
    返回“處理...”

?好處

重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略
  • 平坦的結(jié)構(gòu)
  • 減少凹痕
  • 使失敗路徑明顯
  • 將主要邏輯保持在底部(“快樂之路”)

2。將條件提取到描述性函數(shù)或變量中

複雜或重複的條件應(yīng)提取到命名良好的功能或變量中,以提高可讀性。

而不是:

如果user.age> = 18和user.country ==“ us”和user.subscription_active而不是user.is_blocked:
    grant_access()

重構(gòu):

 def is_eligible_for_access(用戶):
    返回 (
        user.age> = 18
        和user.country ==“我們”
        和user.subscription_active
        而不是user.is_blocked
    )

#然後使用它:
如果IS_ELIGIBLE_FOR_ACCESS(用戶):
    grant_access()

甚至與一個(gè)變量的內(nèi)聯(lián):

 iS_ELIGE =((
    user.age> = 18
    和user.country ==“我們”
    和user.subscription_active
    而不是user.is_blocked
)

如果是符合條件:
    grant_access()

?好處

  • 封裝邏輯
  • 意圖清晰
  • 更容易測(cè)試和重複使用

3。用策略模式或查找表代替嵌套條件

當(dāng)您具有多種條件組合導(dǎo)致不同結(jié)果的組合時(shí),請(qǐng)考慮使用基於字典的調(diào)度策略模式。

例如,而不是:

如果user.role ==“ admin”:
    如果user.tier ==“ premium”:
        apply_full_access()
    elif user.tier ==“基本”:
        apply_limited_admin()
elif user.role ==“用戶”:
    如果user.tier ==“ premium”:
        apply_premium_features()
    elif user.tier ==“基本”:
        apply_basic_features()

使用查找表:

動(dòng)作= {
    (“ admin”,“ premium”):apply_full_access,
    (“ admin”,“ basic”):apply_limited_admin,
    (“用戶”,“ premium”):apply_premium_features,
    (“用戶”,“基本”):apply_basic_features,
}

action = action.get((user.role,user.tier))
如果行動(dòng):
    行動(dòng)()

?好處

  • 消除了分支複雜性
  • 集中映射邏輯
  • 易於擴(kuò)展或配置

注意:當(dāng)條件是離散且可預(yù)測(cè)時(shí),這最有效。


4。使用多態(tài)性根據(jù)類型或狀態(tài)進(jìn)行行為

如果您的if鍊是基於對(duì)像類型或狀態(tài)的,則多態(tài)性可以完全消除條件。

而不是:

 if帳戶==“儲(chǔ)蓄”:
    利息=金額 * 0.03
elif account.type ==“檢查”:
    利息=金額 * 0.01
elif帳戶==“投資”:
    利息=金額 * 0.05

定義類:

班級(jí)帳戶:
    def calculate_interest(self,金額):
        提出通知

SavingsAccount類(帳戶):
    def calculate_interest(self,金額):
        退貨金額 * 0.03

班級(jí)checkingAccount(帳戶):
    def calculate_interest(self,金額):
        退貨金額 * 0.01

班級(jí)投資計(jì)劃(帳戶):
    def calculate_interest(self,金額):
        退貨金額 * 0.05

然後只需致電:

興趣= account.calculate_interest(金額)

?好處

  • 符合開放/關(guān)閉原則
  • 通話代碼中沒有條件邏輯
  • 更容易添加新類型

5。結(jié)合佈爾代數(shù)

有時(shí), if可以通過邏輯結(jié)合條件來扁平,則會(huì)嵌套。

而不是:

如果user.is_authenticated:
    如果user.is_verified:
        如果user.has_subscription:
            show_premium_content()

您可以寫:

如果user.is_authenticated and user.is_verified和user.has_subscription:
    show_premium_content()

或者更好:

 is_ready =((
    user.is_authenticated
    和user.is_verified
    和user.has_subscription
)

如果IS_ready:
    show_premium_content()

請(qǐng)注意不要產(chǎn)生過長(zhǎng)的條件 - 在需要時(shí)提取。


獎(jiǎng)金:提防混亂的擔(dān)憂

通常,嵌套if出現(xiàn),因?yàn)橐粋€(gè)函數(shù)做得太多。問問自己:

  • 此功能是否處理驗(yàn)證,業(yè)務(wù)邏輯和副作用?
  • 我可以將其分成較小的碎片嗎?

關(guān)注的分離自然減少了築巢。


重構(gòu)嵌套條件不僅涉及美學(xué),還可以提高正確性,可檢驗(yàn)性和可維護(hù)性。從後衛(wèi)條款和提取功能開始;當(dāng)邏輯生長(zhǎng)時(shí),朝著多態(tài)性或調(diào)度表發(fā)展。目的不是消除if ,而是要使它們顯而易見,孤立且易於管理。

基本上,如果您的邏輯看起來像是金字塔,那麼該將其弄平了。

以上是重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
零合併操作員(??):一種現(xiàn)代處理無效的方法 零合併操作員(??):一種現(xiàn)代處理無效的方法 Aug 01, 2025 am 07:45 AM

thenullcoalescoleserator(??)提供AconCiseWayDoAssignDefaultValuesWhenDeAlingWithNullOundEndined.1.ItreturnStheTheStheStheStheLsthelefterftoperandifitisnotNullOndined nullOndined;否則,ittReturnTherStherStherStherStherStherStherStherStherStherightoperand.2.unlikethelogicalor(| nlikethelogicalor(

脫神秘的類型雜耍:`==`===```==== 脫神秘的類型雜耍:`==`===```==== Jul 30, 2025 am 05:42 AM

使用===而非==是避免PHP類型轉(zhuǎn)換錯(cuò)誤的關(guān)鍵,因?yàn)?=會(huì)進(jìn)行類型轉(zhuǎn)換導(dǎo)致意外結(jié)果,而===同時(shí)比較值和類型,確保判斷準(zhǔn)確;例如0=="false"為真但0==="false"為假,因此在處理可能為0、空字符串或false的返回值時(shí)應(yīng)使用===來防止邏輯錯(cuò)誤。

優(yōu)化條件邏輯:``vs. vs. switch''的性能含義 優(yōu)化條件邏輯:``vs. vs. switch''的性能含義 Aug 01, 2025 am 07:18 AM

有時(shí)會(huì)影響性能,具體取決於語言、編譯器優(yōu)化和邏輯結(jié)構(gòu);1.if語句按順序執(zhí)行,最壞情況時(shí)間複雜度為O(n),應(yīng)將最可能成立的條件放在前面;2.switch語句在條件為連續(xù)整數(shù)、分支較多且值為編譯時(shí)常量時(shí)可被編譯器優(yōu)化為O(1)的跳轉(zhuǎn)表;3.當(dāng)比較單一變量與多個(gè)常量整數(shù)且分支較多時(shí)switch更快;4.當(dāng)涉及範(fàn)圍判斷、複雜條件、非整型類型或分支較少時(shí)if更合適或性能相當(dāng);5.不同語言(如C/C 、Java、JavaScript、C#)對(duì)switch的優(yōu)化程度不同,需結(jié)合實(shí)際測(cè)試;應(yīng)優(yōu)先使用swi

當(dāng)不使用三元操作員時(shí):可讀性指南 當(dāng)不使用三元操作員時(shí):可讀性指南 Jul 30, 2025 am 05:36 AM

避免避免使用;

超越' if-else”:探索PHP的替代控制結(jié)構(gòu) 超越' if-else”:探索PHP的替代控制結(jié)構(gòu) Jul 30, 2025 am 02:03 AM

PHP的替代控制結(jié)構(gòu)使用冒號(hào)和endif、endfor等關(guān)鍵字代替花括號(hào),能提升混合HTML時(shí)的可讀性。 1.if-elseif-else用冒號(hào)開始,endif結(jié)束,使條件塊更清晰;2.foreach在模板循環(huán)中更易識(shí)別,endforeach明確標(biāo)示循環(huán)結(jié)束;3.for和while雖較少用但同樣支持。這種語法在視圖文件中優(yōu)勢(shì)明顯:減少語法錯(cuò)誤、增強(qiáng)可讀性、與HTML標(biāo)籤結(jié)構(gòu)相似。但在純PHP文件中應(yīng)繼續(xù)使用花括號(hào)以避免混淆。因此,在PHP與HTML混合的模板中推薦使用替代語法以提高代碼可維護(hù)性。

重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略 重構(gòu)嵌套``if`地獄:更清潔的有條件邏輯的策略 Jul 30, 2025 am 04:28 AM

Useguardclausestoreturnearlyandflattenstructure.2.Extractcomplexconditionsintodescriptivefunctionsorvariablesforclarityandreuse.3.Replacemultipleconditioncombinationswithalookuptableorstrategypatterntocentralizelogic.4.Applypolymorphismtoeliminatetyp

用嚴(yán)格的類型比較製作防彈條件 用嚴(yán)格的類型比較製作防彈條件 Jul 30, 2025 am 04:37 AM

Alwaysusestrictequality(===and!==)inJavaScripttoavoidunexpectedbehaviorfromtypecoercion.1.Looseequality(==)canleadtocounterintuitiveresultsbecauseitperformstypeconversion,making0==false,""==false,"1"==1,andnull==undefinedalltrue.2

``&& vs.`and`:揭示了PHP的細(xì)微但關(guān)鍵差異 ``&& vs.`and`:揭示了PHP的細(xì)微但關(guān)鍵差異 Aug 01, 2025 am 06:04 AM

&&和and在PHP中邏輯功能相同,但優(yōu)先級(jí)不同,導(dǎo)致執(zhí)行順序不同;&&優(yōu)先級(jí)高於and,and優(yōu)先級(jí)低於賦值操作符=;因此$success=trueandfalse實(shí)際被解析為($success=true)andfalse,使$success仍為true;1.在條件判斷中應(yīng)使用&&和||;2.僅在控制流(如$file=fopen()ordie())中使用and和or;3.複雜表達(dá)式應(yīng)使用括號(hào)明確優(yōu)先級(jí);4.避免在賦值中混用and/or除非明確意圖

See all articles