-
Notifications
You must be signed in to change notification settings - Fork 46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
補充「檢查」 情境+命名 範例 #44
Comments
Ensure 的部份,C# 有個常用的: 我自己的認知是,assert 驗證狀態或結果的成份更重點,而且會是目的。ensure 則是在這邊做一個驗證前提假設,如果沒問題,流程就可以繼續往下執行。 所以通常 assert 放在文末,ensure 則是往下做某件事的前置檢查。 但這只是我的習慣,對英文的敏感度不夠高,不知道有沒曲解。 |
短答案:我覺得它偏向 assert 。 assert 在字典上的解釋是「大力宣稱、主張」:
大力、自信地主張一事實或想法
以力量、自信來使它人認可「說話者的權威性、權利」
以有力、充滿自信的方式說話、行動 到了軟體開發領域, assert (動詞) / assertion (名詞) 就是我們這裡在談的這個東西: (a)「宣告某個布林(Boolean)值條件C為真;如果在執行時間偵測到該條件C為假,就丟出錯誤/例外」 ref: https://en.wikipedia.org/wiki/Assertion_(software_development) 我想,可以說:雖然 assert 這個字的字典解釋只有提到「大力宣稱/主張」,沒提到任何後續動作,但在軟工領域的人,大多會認同 assert / assertion 就是會像上述 (a), (b) 那個樣子。 回頭來看 "ensure" ,它的字典解釋是「保證、確保」:
確保某事將會發生、成真
確保某物將會到某人的手上
確保某問題不會發生 在這個「提議把 ensure 加入 PowerShell 官方認可的動詞表」討論串裡, ensure 有被以下這樣子解釋: ref: PowerShell/PowerShell#11710 (comment)
而 assert 是這樣被解釋:
(該討論串後半是另一哲理辯論,也很有意思,可以另開主題來聊。) 上述案例偏向把 ensure 當「祈使句 / 命令動詞」來用,去真正執行「確保某事將會發生、成真」這個動作。 而在 #44 (comment) 提到的這種用法:
比較偏向「 宣稱 此函式將會去確保某事將會發生、成真」;易言之,我主觀覺得,那其實比較接近 assertion 的性質 🤔 進入主題: HttpResponseMessage.EnsureSuccessStatusCode() 😅 很不幸的, https://referencesource.microsoft.com/ 似乎沒有那部分的程式碼,而 .NET Core 版本的程式碼也沒有提供額外的註解,很難去知道當初設計此方法的考量。 我們能知道的是,當我們拿到 HttpResponseMessage 時,如果其 HTTP 狀態碼(status code)不是 2XX ,其實我們也不能怎麼樣 😅 除了重試(retry)之外,應該沒有方法能 有意義地 去「確保我們拿到的是成功的狀態碼」。 在 .NET Core 早期的版本 (例如 1.0.0) 裡, EnsureSuccessStatusCode() 除了「像是 assert 的行為」外,還會順便 dispose 其 message content ( 參考 https://github.com/dotnet/corefx/blob/release/1.0.0/src/System.Net.Http/src/System/Net/Http/HttpResponseMessage.cs#L148-L165 ) 在最近的版本 ( 3.1 ) 裡,就只有留下「像是 assert 的行為」 ( 參考 https://github.com/dotnet/corefx/blob/release/3.1/src/System.Net.Http/src/System/Net/Http/HttpResponseMessage.cs#L168-L180 ) 與其它的 "ensure" 方法相比,例如 StringBuilder.EnsureCapacity(Int32)
確保此 StringBuilder 的容量 (至少要有指定值那麼多)
這樣子的 "ensure" 方法就比較符合「確保」的語意 🤔 結論:在已經有 IsSuccessStatusCode 的前提下,我猜不太到當初設計 EnsureSuccessStatusCode() 時考量的 use case 是什麼 (尤其是,它在舊版本裡會去 dispose message content ), 以及為什麼會選 ensure 作為方法動詞 🤔 |
找到了比較正式的解釋:英文的 "simple present" (簡單現在式) https://en.wikipedia.org/wiki/Simple_present#Uses ;用來表達「習慣、事實、 一般情況 」。
|
https://www.facebook.com/twy30/posts/2615081322075516?comment_id=2615083622075286
https://www.facebook.com/twy30/posts/2615081322075516?comment_id=2615083622075286&reply_comment_id=2615104028739912
The text was updated successfully, but these errors were encountered: