在支持兩者的語(yǔ)言中,&&/||比和/或和/或更高的優(yōu)先級(jí),因此將它們與分配一起使用會(huì)導(dǎo)致意外的結(jié)果; 1。使用&&/||對(duì)於表達(dá)式中的布爾邏輯,以避免優(yōu)先問(wèn)題; 2。由於其優(yōu)先級(jí)低,保留和/或用於控制流; 3。始終在復(fù)雜表達(dá)式中使用括號(hào)來(lái)確保清晰度和正確性; 4。了解您的語(yǔ)言 - Python和JavaScript僅通過(guò)提供一組操作員來(lái)避免陷阱,而Ruby,Perl和PHP則需要仔細(xì)區(qū)分。
在編程中使用邏輯表達(dá)式(尤其是在Python或JavaScript)中的邏輯表達(dá)式時(shí),可以理解邏輯運(yùn)算符( and
or
)及其符號(hào)對(duì)應(yīng)方( &&
, ||
)之間的區(qū)別至關(guān)重要。但更重要的是,知道短路和操作員的優(yōu)先級(jí)相互作用可以防止細(xì)微的錯(cuò)誤。讓我們分解一下。

短路相同,但優(yōu)先級(jí)有所不同
同時(shí)and
/ or
&&
/ ||
(取決於語(yǔ)言)支持短路評(píng)估:
-
a && b
或a and b
:如果a
是錯(cuò)誤的,則永遠(yuǎn)不會(huì)評(píng)估b
。 -
a || b
或a or b
:如果a
為真,則永遠(yuǎn)不會(huì)評(píng)估b
這對(duì)於諸如:

如果用戶和user.is_active(): user.do_something()
在這裡, user.is_active()
僅在user
存在時(shí)運(yùn)行 - 感謝短路。
但是真正的陷阱在於操作員的優(yōu)先級(jí)。

優(yōu)先陷阱: and
/ or
VS. &&
/ ||
在Python中,沒(méi)有&&
或||
。您使用and
or
not
。但是,在Ruby , Perl或其他一些語(yǔ)言中,都存在符號(hào)( &&
, ||
)和基於單詞的( and
, or
)運(yùn)算符 - 並且它們具有不同的優(yōu)先級(jí)。
讓我們以Ruby為例:一個(gè)明顯的例子:
#示例1 a = true && false #=> false #示例2 a = true和false #syntaxerror!或因優(yōu)先級(jí)而引起的意外行為。
為什麼?因?yàn)?code>and / or
比=
=, &&
和||
具有更高的優(yōu)先級(jí)。
所以這個(gè):
x =真和錯(cuò)誤
被解釋為:
(x = true)和false
這意味著x
變?yōu)?code>true ,整個(gè)表達(dá)式評(píng)估為false
,但x
已分配。
與:
x = true && false
這是:
x =(true && false)
因此x
變成了false
。
在結(jié)合分配和邏輯時(shí),這是一個(gè)巨大的陷阱。
實(shí)際含義
1。使用&&
和||
表達(dá)式中的布爾邏輯
如果您正在進(jìn)行有條件的作業(yè)或複雜的邏輯,請(qǐng)堅(jiān)持使用高預(yù)言操作員:
#安全可預(yù)測(cè)的 logged_in = user_valid && token_valid || temp_access
2。避免and
/ or
複雜表達(dá)
它們更適合控制流或加入聲明:
#在Ruby中慣用的流量 process_data或提出“無(wú)數(shù)據(jù)”
在這裡, or
表現(xiàn)得像低預(yù)期分離器 - 類(lèi)似於||
,但是在鏈條上更安全,因?yàn)樗粫?huì)緊密地綁定。
3。始終在疑問(wèn)時(shí)使用括號(hào)
即使您知道優(yōu)先級(jí),其他人也可能不會(huì):
x =(user_active?&& has_permission?)|| Admin_Override
這更清楚,不受誤解的影響。
特定於語(yǔ)言的筆記
- Python :只有
and
,or
not
。否&&
/||
。因此優(yōu)先級(jí)是一致的(但仍低於比較)。 - Ruby/Perl :兩組都存在。
&&
/||
用於邏輯;and
/or
用於控制流。 - JavaScript :唯一
&&
/||
。否and
/or
。因此,沒(méi)有這樣的陷阱,但是仍然適用短路。 - PHP :具有
and
/or
具有與&&
/||
具有不同優(yōu)先級(jí)的優(yōu)先級(jí)。 。
php中的示例:
$ x = true and False; var_dump($ x); // 真的!
因?yàn)樗?code>($x = true) and false 。
但:
$ x = true && false; var_dump($ x); // 錯(cuò)誤的
關(guān)鍵要點(diǎn)
- ?短路對(duì)這兩種形式都相同。
- ??優(yōu)先差異:
&&
/||
綁定比and
/or
更緊。 - ?除非您想要低優(yōu)先級(jí),否則不要混合
and
/or
分配。 - ?始終使用複雜邏輯中的括號(hào)。
- ?了解您的語(yǔ)言:在Python中,沒(méi)有問(wèn)題;在Ruby/PHP中,大問(wèn)題。
基本上,如果您的語(yǔ)言同時(shí)提供,治療and
/ or
類(lèi)似的流量控制工具,以及&&
/ ||
就像表達(dá)式中的邏輯運(yùn)算符一樣。混合它們可能會(huì)導(dǎo)致難以發(fā)現(xiàn)的錯(cuò)誤。
以上是短路和優(yōu)先陷阱:`&`/`|| vs.的詳細(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)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

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

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

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

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

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

Thespaceshipoperator()inPHPreturns-1,0,or1basedonwhethertheleftoperandislessthan,equalto,orgreaterthantherightoperand,makingitidealforsortingcallbacks.2.Itsimplifiesnumericandstringcomparisons,eliminatingverboseif-elselogicinusort,uasort,anduksort.3.

theunionoperator()comminesArraysByByPreservingKeySandEwertheleftArray'svalueSonKeyConflicts,MakeitiTIDealForsetTingDefaults; 2. booseEquality(==)checksifarrayshavethesmekey-valuepairsepordectientity(==)

使用===而非==是避免PHP類(lèi)型轉(zhuǎn)換陷阱的關(guān)鍵,因?yàn)?==同時(shí)比較值和類(lèi)型,而==會(huì)進(jìn)行類(lèi)型轉(zhuǎn)換導(dǎo)致意外結(jié)果。 1.==在類(lèi)型不同時(shí)會(huì)自動(dòng)轉(zhuǎn)換,例如'hello'被轉(zhuǎn)為0,因此0=='hello'為true;2.===要求值和類(lèi)型都相同,避免了此類(lèi)問(wèn)題;3.在處理strpos()返回值或區(qū)分false、0、''、null時(shí)必須使用===;4.儘管==可用於用戶輸入比較等場(chǎng)景,但應(yīng)優(yōu)先顯式類(lèi)型轉(zhuǎn)換並使用===;5.最佳實(shí)踐是默認(rèn)使用===,避免依賴==的隱式轉(zhuǎn)換規(guī)則,確保代碼行為一致可靠。

PHP的=&操作符創(chuàng)建變量引用,使多個(gè)變量指向同一數(shù)據(jù),修改一個(gè)會(huì)影響另一個(gè);2.其合法用途包括從函數(shù)返回引用、處理遺留代碼及特定變量操作;3.但易引發(fā)循環(huán)後引用未釋放、意外副作用和調(diào)試?yán)щy等問(wèn)題;4.現(xiàn)代PHP中對(duì)象默認(rèn)以引用句柄傳遞,數(shù)組和字符串採(cǎi)用寫(xiě)時(shí)復(fù)制,性能優(yōu)化已無(wú)需手動(dòng)引用;5.最佳實(shí)踐是避免普通賦值中使用=&,循環(huán)後及時(shí)unset引用,僅在必要時(shí)使用參數(shù)引用並做好文檔說(shuō)明;6.絕大多數(shù)情況下應(yīng)優(yōu)先採(cǎi)用更安全清晰的對(duì)象導(dǎo)向設(shè)計(jì),=&僅在極少數(shù)明確需要時(shí)謹(jǐn)慎使用

Inlanguagesthatsupportboth,&&/||havehigherprecedencethanand/or,sousingthemwithassignmentcanleadtounexpectedresults;1.Use&&/||forbooleanlogicinexpressionstoavoidprecedenceissues;2.Reserveand/orforcontrolflowduetotheirlowprecedence;3.Al

Pre-increment( $i)incrementsthevariablefirstandreturnsthenewvalue,whilepost-increment($i )returnsthecurrentvaluebeforeincrementing.2.Whenusedinexpressionslikearrayaccess,thistimingdifferenceaffectswhichvalueisaccessed,leadingtopotentialoff-by-oneer

Combinedassignmentoperatorslike =,-=,and=makecodecleanerbyreducingrepetitionandimprovingreadability.1.Theyeliminateredundantvariablereassignment,asinx =1insteadofx=x 1,reducingerrorsandverbosity.2.Theyenhanceclaritybysignalingin-placeupdates,makingop

InstanceOfIntyPescriptIsatiSatyPeguardThatNarrowsObjectTypesBasedOnClassMembership,Enablingsaferandmore Expricationerpolymorphiccode.1.itchecksecksecksifanobjectisaninstanceofacoclassofaclassofaclassandinefloclockansandInarrowtheTeTecompilOtonArrowtheTeTepeTepewTheTeconconditionalblockss,EliminatipeThemeNateTypertypertypertypelypertypelype
