2009-09-01 182 views
0

只是好奇,你如何評價這行代碼:正確的註釋代碼

string customerNm = customerNm.EndsWith("s") ? customerNm+= "'" : customerNm+="'s"; 
+1

我希望您確切地知道您的應用程序永遠不會被本地化爲除英語之外的任何語言...... – 2009-09-01 18:33:29

+0

這可能是對的。但客戶現在不在意 – bizl 2009-09-04 10:57:24

回答

4

把它放進自己的功能,並適當命名的功能。這應該足夠清楚。 (你可以更容易地測試它,太!)

string makePossessive(string customerName) { 
    ... 
} 
+0

我第二種方法。現在,它是單元測試的。 – Amy 2009-09-01 17:52:23

+0

雖然我是單線功能的粉絲,但我看到了推理。謝謝 – bizl 2009-09-04 11:00:06

+0

我會同意你的觀點,單行功能可能很奇怪。但是,有些人也不喜歡條件運算符,因爲它會使事情變得不可讀。如果你將你的陳述擴展到if/else,那麼它就不再是一蹴而就的。 – 2009-09-04 12:42:14

1
// Enforce English grammar 
string customerNm = customerNm.EndsWith("s") ? customerNm+= "'" : customerNm+="'s"; 
+0

感謝您的重構。整齊 – bizl 2009-09-04 10:58:53

3

我不一定會評論它。這是很清楚的。

如果你對它做出評論,你應該解釋一下爲什麼你是這樣做的。

例如爲:

/* Don't add "'s" for names ending on "s" 
    (request by Important Customer in June 1978) */ 
+2

所有評論,除​​了那些公共API,應該回答「爲什麼」的問題。我可以閱讀代碼來了解你做了什麼,但我想知道你爲什麼這樣做,或者甚至完成了。 – 2009-09-01 15:47:17

1

//Apply genitive case 
string customerNm = customerNm.EndsWith("s") ? customerNm+= "'" : customerNm+="'s"; 
3

我會用「不工作」發表評論吧。因爲您在分配給它之前訪問'customerNm'。 (您使用「customerNm + = ...」表示:創建一個新的字符串實例作爲舊實例[尚未分配]和...)的串聯。

這甚至不應該被編譯。

我想你的意思是:

customerNm += customerNm.EndsWith("s") ? "'" : "'s"; 

其中customerNm是前一次已經被分配給一個字符串。

2

不是你問的問題,但它看起來像你的代碼違反grammar rules

一個名稱不應該被當作複數名詞來對待,因爲它以's'結尾。例如,如果詹姆斯有一隻狗,那就是詹姆斯的狗,而不是詹姆斯的狗。但是,如果兩個叫邁克的生命夥伴有一條狗,那麼它就是米克斯的狗。例外:如果多音節名稱以「ess」或「ezz」聲音結尾,則可以將其視爲「s」中的複數結尾。如果Linus有一條狗,它可以是Linus的狗,儘管我相信Linus也是可以接受的。

+0

有趣。感謝您的鏈接 – bizl 2009-09-04 11:01:40

+0

大聲笑!我用錯誤的語法糾正了你的語法!最後一段,「as」代替「an」和「than」代替「then」。我要離開它。諷刺。 – 2009-09-04 12:15:41