2012-08-08 49 views
4

使用yes | no與true | false是否存在任何已知的功能或性能差異? ColdFusion文檔指出,布爾類型屬性的值是用yes/no指定的。例如,< cfargument required =「yes | no」... >我用true和false代替yes | no並且沒有看到意外的功能。在功能性和性能方面指定參數/屬性值時,True和False是否等於Yes和No?

[編輯] 我很欣賞這些迴應,也許我在這種情況下思考的更一般。

ColdFusion文檔指出,某些參數的期望值爲'yes | no',例如cfargument required。有沒有任何洞察,爲什麼yes | no記錄爲唯一期望值,而不是true | false或陳述'任何布爾值'是預期的?似乎有點含糊不表示任何布爾類型,而不是隻有狀態'是|否',如果A)我們要假設'任何布爾值'B)有一個實際的性能差異。思考?

+1

基本上ColdFusion文檔是一個矛盾和不準確的雷區。很遺憾的原因是因爲寫這個頁面的人決定他喜歡是/否,而寫一個不同頁面的人喜歡真/假。這對新用戶來說很難。我的建議是決定你喜歡哪一對並保持一致。他們都以同樣的方式工作。 – baynezy 2012-08-08 21:59:34

+0

我懷疑其中很大一部分原因僅僅是由於混合了舊的/新的文檔。他們經常將現有標籤/功能的文檔從一個版本回收到另一個版本(對新屬性進行較小的修改或添加)。因此,儘管較新的文檔傾向於使用true/false,但舊文檔中的yes/no遺留問題仍然存在...... – Leigh 2012-08-09 13:17:35

回答

5

"yes/no"是少了幾個字符的類型。

"true/false"(和true/false)更符合其他編程語言。

就性能而言,就CF而言,它們都是字符串。直到你試圖在條件邏輯中使用它們,它們奇蹟般地變成其他數據類型,比如java.lang.Boolean。字符串和布爾之間的轉換又返回非常快。這是CF大部分時間都在做的事情。你很難找到證明比另一個更快的可靠測試。

對於代碼可維護性/可讀性,最好堅持一個或另一個。

一些傳統的CF標籤功能特別要求「是/否」。他們根本不會用「真/假」。我相信這不再是CF9 +的情況。

不要依賴ColdFusion文檔是準確的或最新的。幾乎所有列出「是/否」作爲默認/允許值的方法實際上都支持任何類型的布爾值。 「yes/no」,「true/false」,true/false,1/0等

恕我直言,對布爾人使用「是/否」是瘋狂的。從舊CF5時代向後兼容。吮吸Adobe仍在使用它來輸出java布爾值。

例如。 writeDump(var: (not true));給你「不」。但是,我想要false?!哎呀。

你可以告訴你目前的變量是什麼java類調用myVar.getClass().getName()。您可以使用它來觀察CF將您的數據從布爾型轉換爲字符串並再次回到布爾型,就像魔術一樣。

+0

這個答案符合我需要知道的 - 設置布爾參數,而不是測試布爾值。我也同意使用真/假更合適。然而,在一個團隊中,當使用「是/否」時僅僅因爲文檔顯示這些值是實施標準更加困難。 – David 2012-08-09 15:57:09

+0

回覆:*我相信這不再是CF9 +的情況。*我希望。 在CF10中仍然需要「是/否」。我總是忘記那一個。 – Leigh 2012-09-13 15:10:32

0

作爲一個實驗,你可以試試這個。對我來說,一千萬次不使用「是」的迭代大部分會導致100毫秒的毫秒數。

<cfscript> 
bln = true; 
starttime = getTickCount(); 

for(i=0;i<10000000;i++){ 
if(bln eq true) 
    foo="bar"; 
} 
writeOutput(getTickCount()-startTime & '<br />'); 

starttime = getTickCount(); 

for(i=0;i<10000000;i++){ 
if(bln eq "yes") 
    foo="bar"; 
} 
writeOutput(getTickCount()-startTime & '<br />'); 
</cfscript> 
+1

'getTickCount()'不是非常精確。嘗試'sys = createObject('java','java.lang.System');'然後使用'start = sys.nanoTime();'在納秒內得到一個「tick」。 – 2012-08-10 07:39:55

9

ColdFusion評估是/否,真/假,1(或任何非零數)/ 0相等。這使得快捷布爾類似<cfif myquery.recordcount><cfif len(FORM.myVar)>很容易,而不必將整數轉換爲true/false。

+6

不只是正整數,但任何非零數字都將被視爲「真」。 – ale 2012-08-08 14:53:29

+1

我有一個關於此的帖子,討論在腦海中的來龍去脈細節:) http://www.coldfusionmuse.com/index.cfm/2010/2/5/Booleans.and.Coldfusion – 2012-08-08 15:48:19

+0

我更喜歡使用條件語句的布爾評估。謝謝你的評論。 – David 2012-08-09 01:21:08