日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Yoda 表示法错在哪里

發布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yoda 表示法错在哪里 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(王垠 yinwang.org 版權所有,未經許可,請勿轉載)

在上一篇博文里,我提到了 Yoda 表示法。

Yoda Notation(Yoda 表示法)

它的含義是,在 C/C++ 里面使用這樣的表達式順序:

if ("blue" == theSky) ...

這是為了避免意外的寫成:

if (theSky = "blue") ...

“Yoda 表示法”的名字來源于《星球大戰》的 Yoda 大師。他說話的單詞順序相當奇特,比如:“Backwards it is, yes!”

一般認為

使用這個表示法是為了“變通”(workaround) C/C++ 的一個設計抉擇:使用?=?來表示賦值,而使用?==?來表示比較。這個設計充分的展現了“先輩的罪”(Sins of our Forefathers)這一詞匯的精髓。

我認為

使用?=?來表示賦值其實并不是真正的錯誤所在。真正的錯誤在于 C/C++ 的賦值語句不應該返回一個值。

也就是說,theSky = "blue"?的所有功能應該只是“賦值”這種“副作用”,副作用不應該具有“值”。即使你牽強附會說它有一個值,它的“值”也應該是?void(隨之這個?void?會被類型檢查所拒絕,因為它不是?if?所期望的?bool)。所以,一個良好的語言不應該允許你把?theSky = "blue"?放進?if (...)?的“條件”里面。如果你真的要賦值又要判斷,它會迫使你把這拆開成兩行:

theSky = "blue"; if (theSky) ...

更近一步。if (theSky)?這個寫法其實也是一個先輩的罪。theSky?的類型是?string,它不應該可以直接被作為?bool?使用。if (...)?的條件應該必須是一個?bool。 所以這里其實應該寫成:

theSky = "blue"; if (theSky != NULL) ...

因為賦值語句永遠不可能出現在條件的位置,所以之前的那種錯誤,即使我們使用?=?作為賦值操作符,也完全不可能出現。這樣我們也就完全沒必要用 Yoda 表示法了。

相反,如果我們只是把?=?換成像 Pascal 的?:=?這樣的賦值操作符,而保留其它的“特性”(賦值操作會返回值)的話,我們其實還是會遇到同樣的問題:

if (theSky := "blue") ...

這里假設你想打?=,卻不小心打成了?:=。機會雖然小,但是仍然有可能。而我推薦的解決方案,會讓你故意想犯錯誤都不可能,編譯器會拒絕接受你的程序。

所以你看到了,問題的根源其實不在于賦值操作的名字,而是有更深的原因。

總結

以上是生活随笔為你收集整理的Yoda 表示法错在哪里的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。