動態

詳情 返回 返回

Objective-C (OC) 中 不推薦 使用 true 和 false 分析 - 動態 詳情

背景: 寫多混編語言 把swift 習慣帶入到了OC 就比如這個布爾值的寫法 

前言:雖然 true 和 YES 實際上等效為 1,但為了代碼的一致性和可讀性,最好在 Objective-C 中用 YES 和 NO

 1. 類型不同 

 YES 和 NO 是 Objective-C 的 BOOL 類型,它本質上是一個 signed char,YES 等於 1,NO 等於 0。

 true 和 false 是 C語言 C99 標準中的布爾值類型,來自 stdbool.h,屬於 bool 類型,true 是 1,false 是 0。

 雖然它們在數值上相同(1 和 0),但它們屬於不同的類型。如果代碼中混用 BOOL 和 bool,可能會導致一些不容易察覺的細微問題。

2.跨語言和庫兼容性

 如果你在一個項目中混合使用 C、C++ 和 Objective-C 代碼,可能會有如下情況:

BOOL 類型與 bool 類型的轉換:雖然 BOOL 可以和 bool 直接比較,但它們屬於不同的類型。在跨越 C 和 Objective-C 的接口時,類型不匹配可能會導致警告或行為差異。

 BOOL objcFlag = YES;  // Objective-C 中使用 YES
 bool cFlag = true;    // C 中使用 true
 if (objcFlag == cFlag) {
     // 這個比較可以工作,但編譯器可能會發出警告
 } 

 舊代碼中的習慣:如果你的項目中有大量的舊式 Objective-C 代碼,開發者習慣使用 YES 和 NO。如果新代碼突然使用 true 和 false,可能會讓其他開發者誤解這部分代碼在使用 C 或 C++ 中的布爾邏輯。

3.比較時的語義混淆

雖然在數值上 YEStrue1 都等同於真值,NOfalse0 都等同於假值,但在習慣上,人們傾向於在不同的上下文中使用不同的布爾值:

  • 在 Objective-C 中,使用 YES 和 NO
  • 在 C 或 C++ 中,使用 true 和 false

如果你在 Objective-C 中使用 true 和 false,其他開發者可能會困惑你的意圖,特別是當你在同一個項目中有混合的 C 和 Objective-C 代碼時,這樣的代碼風格不一致會讓代碼的可讀性變差

4. 風險來源

並非技術上的風險,而更多的是代碼可讀性和維護性。在大型項目或多人協作項目中,保持代碼風格的一致性非常重要。如果有些地方使用 YES,有些地方使用 true,讀代碼的人可能會困惑,尤其是面對維護舊代碼的開發者。他們可能會以為 true 和 YES 之間有某種語義上的區別,而實際上它們在這裏的意義是相同的。

BOOL flag = true; // 這是完全可以工作的代碼
if (flag == YES) {
    // 可以正確執行,但有人可能不清楚為什麼不用 true 或者直接用 YES
    // 而不是用 true,這會讓代碼變得不統一。
}

總結

風險主要來自於代碼的可維護性和一致性,而非功能本身。如果在 Objective-C 中混合使用 true/false 和 YES/NO,開發者可能對代碼的風格產生困惑。為了避免這種情況,建議在 Objective-C 代碼中統一使用 YES 和 NO

 

Add a new 評論

Some HTML is okay.