他說的“申請(qǐng)”信息應(yīng)該在類型系統(tǒng)中進(jìn)行編碼。..不應(yīng)該依賴翻轉(zhuǎn)變量名來確保不將不安全的數(shù)據(jù)傳遞給需要安全數(shù)據(jù)的函數(shù)。你應(yīng)該把它變成一個(gè)類型錯(cuò)誤,所以它是不可能這樣做。任何不安全的數(shù)據(jù)都應(yīng)該有標(biāo)記為不安全的類型,這樣就不能簡(jiǎn)單地將其傳遞給安全函數(shù)。要從不安全轉(zhuǎn)換為安全,需要使用某種消毒功能進(jìn)行處理。
喬爾所說的“種類”的很多東西都不是種類,事實(shí)上,它們是類型的。
然而,大多數(shù)語言所缺少的是一種類型系統(tǒng),它具有足夠的表現(xiàn)力來加強(qiáng)這種區(qū)別。例如,如果C有一種“強(qiáng)類型的類型”(在這種情況下,類型名稱包含基類型的所有操作,但不能轉(zhuǎn)換為基類型),那么許多這些問題就會(huì)消失。例如,如果你可以說,strong typedef std::string unsafe_string;
引進(jìn)一種新型unsafe_string
無法轉(zhuǎn)換為std:string(因此可以參與重載解決等)。那我們就不需要愚蠢的前綴了。
所以,關(guān)于匈牙利語對(duì)非類型事物的中心說法是錯(cuò)誤的。它被用于類型信息。當(dāng)然,類型信息比傳統(tǒng)的C類型信息更豐富;是類型信息編碼了某種語義細(xì)節(jié)來表示對(duì)象的用途。但它仍然是類型信息,正確的解決方案一直是將其編碼到類型系統(tǒng)中。將其編碼到類型系統(tǒng)中是獲得規(guī)則的正確驗(yàn)證和執(zhí)行的最佳方法。變量的名字根本不切斷芥末。
換句話說,目標(biāo)不應(yīng)該是“讓開發(fā)人員看錯(cuò)代碼”。應(yīng)該是“讓錯(cuò)誤的代碼看起來不對(duì)”。到編譯器".