Re: [問題] 學code要看天分嗎?
※ 引述《FableKevinS (FableKevinS)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: 自己是初學c++ 也是相關科系生
: 每次看別人寫的code, 就覺得相當簡潔.
: 相較之下,自己寫的就複雜許多.
: 有些我覺得蠻難的問題. 高手也就只是while包幾個for就出來了.
: 自己寫就很難看..
我自己是這樣認為,一個人多強
是在於看他寫過多少爛程式
當然,光會寫爛程式沒有任何幫助
重點在於每次你寫完程式,覺得很糟
你多少都要能從裡面學到什麼,同樣的錯不要再犯
舉些例子
if (foo)
bar1();
else
bar2();
for(i = 0; i < 10; ++i)
do_something();
很多人遇到單行的句子都喜歡把括號省略
我個人是絕對不省那括號
為什麼? 因為這樣出過錯,考慮一下你改程式
if (foo)
bar1();
else
bar2();
bar3();
for(i = 0; i < 10; ++i)
do_something();
do_something2();
你以為你在寫Python嗎? 很可惜不是
上面的程式都會出問題,只有第一行的程式會被認為是屬於前面的code block
而且這樣很難被看出來,因為讀的時候直覺上是認縮排
這樣寫還沒有任何語法錯誤與警告
程式夠大就很難以被發現和偵錯
正因為犯過這樣的錯,後來我得到一個結論
"為了省那一行括號很容易造成修改時的錯誤,那麼寧可一律不省"
if (foo) {
bar1();
} else {
bar2();
}
這樣就不易犯上面的錯,像這樣的認知累積起來,你寫的程式才會漸漸完善
我也遇過中文註解引起的問題,從那之後都強迫自己用英文寫註解
http://0rz.tw/MLEp0
還有很多很多,都是靠犯錯累積起來的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.170.197.154
推
12/10 10:54, , 1F
12/10 10:54, 1F
推
12/10 12:00, , 2F
12/10 12:00, 2F
推
12/10 13:27, , 3F
12/10 13:27, 3F
推
12/10 13:44, , 4F
12/10 13:44, 4F
→
12/10 14:37, , 5F
12/10 14:37, 5F
或許你自己寫有把握不會犯這種錯
但你可能沒有考慮過程式不是自己寫就算了
很多情況你還得和別人一起合寫
別人也有可能會改寫你的程式
再說,其實寫程式寫久了就會發現
常常那些除錯最久的bug,都是很蠢的錯誤
好吧,就算犯這錯誤的機率很低
但即然多寫一對 {} 可以省去出錯的可能
那為什麼要省? 省打那兩個字元省不了幾秒
然而出錯除錯可能要花十分鐘 甚至半小時
良好的程式風格
不是只有可執行就好
或是自己看得懂方便、我自己不會弄錯就好
還得考量別人是否易懂,是否會容易造成誤解、錯誤等等
雖然是很小的細節,但是還是有強制寫括號的理由
推
12/10 14:58, , 6F
12/10 14:58, 6F
現代的程式碼檢視工具都會有區塊折疊的功能
省一行的捲動 VS 避免可能發生的錯誤
我會選擇避免可能發生的錯誤
因為少那一行對整體可讀性來說並沒有太大實質的幫助
整體長度的控制是在於函數的切割
而不是在於那一個括號所佔的一行
※ 編輯: StubbornLin 來自: 118.170.197.154 (12/10 15:06)
→
12/10 15:06, , 7F
12/10 15:06, 7F
推
12/10 15:15, , 8F
12/10 15:15, 8F
沒遇過不代表不會出現
或許我比較龜毛,但是即然是習慣上的選擇
我會選擇較佳的那個習慣,因為兩個括號的成本遠低於出錯的成本
而且,這和我認知的Python精神是一致的
http://www.python.org/dev/peps/pep-0020/
"There should be one-- and preferably only one --obvious way to do it."
同時,這種做法不是只有我自己這麼想,可以參考K&R風格裡
http://en.wikipedia.org/wiki/Indent_style
"The One True Brace Style"
Joel談軟體也有在 "讓錯的程式看得出錯" 提過
http://www.cc.ntut.edu.tw/~s4599001/docs/ErrProgSee.htm
"1. 你不知道乾淨和髒有什麼分別.
2. 你對乾淨有粗淺的認知, 主要以是否符合編程規範為準.
3. 你開始能嗅出藏在表面下不對勁的蛛絲馬跡. 你會察覺這是問題並且找出來修正.
不過其實還有更高的層次, 而這也就是我真正要說的:
4. 你有計劃地架構程式碼, 藉助能察覺問題的靈眼讓程式碼更正確.
這是真正的藝術: 仔細地設計讓錯誤顯而易見的編程規範, 藉此製作出穩固的程式.
"
這是程式碼風格的堅持,沒有一定對錯
但是我相信我的堅持是對的
每個人或團隊看法都不一樣
這要看團隊的狀況而定
※ 編輯: StubbornLin 來自: 118.170.197.154 (12/10 15:25)
推
12/10 15:54, , 9F
12/10 15:54, 9F
→
12/10 15:55, , 10F
12/10 15:55, 10F
→
12/10 15:55, , 11F
12/10 15:55, 11F
→
12/10 15:57, , 12F
12/10 15:57, 12F
推
12/10 16:05, , 13F
12/10 16:05, 13F
→
12/10 16:06, , 14F
12/10 16:06, 14F
→
12/10 16:07, , 15F
12/10 16:07, 15F
推
12/10 16:16, , 16F
12/10 16:16, 16F
推
12/10 16:18, , 17F
12/10 16:18, 17F
→
12/10 16:19, , 18F
12/10 16:19, 18F
推
12/10 16:53, , 19F
12/10 16:53, 19F
→
12/10 16:54, , 20F
12/10 16:54, 20F
→
12/10 16:57, , 21F
12/10 16:57, 21F
→
12/10 16:57, , 22F
12/10 16:57, 22F
→
12/10 16:59, , 23F
12/10 16:59, 23F
→
12/10 17:00, , 24F
12/10 17:00, 24F
→
12/10 17:24, , 25F
12/10 17:24, 25F
→
12/10 17:26, , 26F
12/10 17:26, 26F
→
12/10 17:27, , 27F
12/10 17:27, 27F
→
12/10 17:29, , 28F
12/10 17:29, 28F
→
12/10 17:59, , 29F
12/10 17:59, 29F
推
12/10 18:00, , 30F
12/10 18:00, 30F
→
12/10 18:00, , 31F
12/10 18:00, 31F
推
12/10 18:10, , 32F
12/10 18:10, 32F
→
12/10 18:18, , 33F
12/10 18:18, 33F
→
12/10 18:19, , 34F
12/10 18:19, 34F
推
12/10 18:24, , 35F
12/10 18:24, 35F
→
12/10 18:24, , 36F
12/10 18:24, 36F
推
12/10 18:51, , 37F
12/10 18:51, 37F
推
12/10 19:02, , 38F
12/10 19:02, 38F
→
12/10 19:26, , 39F
12/10 19:26, 39F
推
12/10 19:28, , 40F
12/10 19:28, 40F
→
12/10 19:28, , 41F
12/10 19:28, 41F
→
12/10 22:26, , 42F
12/10 22:26, 42F
推
12/11 10:09, , 43F
12/11 10:09, 43F
→
12/11 21:20, , 44F
12/11 21:20, 44F
→
12/11 21:24, , 45F
12/11 21:24, 45F
推
12/11 21:51, , 46F
12/11 21:51, 46F
→
12/11 21:54, , 47F
12/11 21:54, 47F
→
12/11 21:55, , 48F
12/11 21:55, 48F
→
12/11 21:57, , 49F
12/11 21:57, 49F
推
12/11 23:05, , 50F
12/11 23:05, 50F
→
12/11 23:05, , 51F
12/11 23:05, 51F
推
12/11 23:19, , 52F
12/11 23:19, 52F
→
12/11 23:19, , 53F
12/11 23:19, 53F
→
12/11 23:20, , 54F
12/11 23:20, 54F
推
12/11 23:36, , 55F
12/11 23:36, 55F
→
12/12 12:54, , 56F
12/12 12:54, 56F
→
12/12 12:55, , 57F
12/12 12:55, 57F
→
12/12 12:55, , 58F
12/12 12:55, 58F
→
12/12 12:57, , 59F
12/12 12:57, 59F
→
12/12 12:58, , 60F
12/12 12:58, 60F
→
12/12 13:04, , 61F
12/12 13:04, 61F
推
12/12 18:19, , 62F
12/12 18:19, 62F
→
12/12 21:24, , 63F
12/12 21:24, 63F
推
12/12 22:22, , 64F
12/12 22:22, 64F
→
12/12 22:23, , 65F
12/12 22:23, 65F
→
12/12 22:24, , 66F
12/12 22:24, 66F
→
12/12 22:50, , 67F
12/12 22:50, 67F
→
12/12 22:50, , 68F
12/12 22:50, 68F
推
12/12 23:32, , 69F
12/12 23:32, 69F
推
12/12 23:49, , 70F
12/12 23:49, 70F
推
12/13 02:09, , 71F
12/13 02:09, 71F
→
12/13 02:10, , 72F
12/13 02:10, 72F
推
12/13 06:17, , 73F
12/13 06:17, 73F
→
12/13 06:18, , 74F
12/13 06:18, 74F
→
12/13 10:19, , 75F
12/13 10:19, 75F
→
12/13 10:49, , 76F
12/13 10:49, 76F
→
12/13 12:23, , 77F
12/13 12:23, 77F
→
12/13 12:24, , 78F
12/13 12:24, 78F
→
12/13 12:35, , 79F
12/13 12:35, 79F
推
04/02 23:38, , 80F
04/02 23:38, 80F
→
04/02 23:39, , 81F
04/02 23:39, 81F
→
04/02 23:40, , 82F
04/02 23:40, 82F
→
04/02 23:41, , 83F
04/02 23:41, 83F
討論串 (同標題文章)