Re: [請益] 程式該怎麼越寫越好呢

看板Programming作者 (眠月)時間15年前 (2009/08/21 17:36), 編輯推噓8(8056)
留言64則, 9人參與, 最新討論串11/34 (看更多)
※ 引述《adrianshum (Alien)》之銘言: : 其實, 往往要寫一千字去解釋, 我覺得那不算真的高手. : 我一向的目標都是要把程式寫得 self-descriptive, 要 : 別人不看 comment 也看得懂. : comment 就留在偶然為了效率寫得難明, 或有特別東西要 : 別人留意的時候才用吧. : (還在磨練中) 同意,還要寫註解那就代表程式碼本身描述力不足。 「程式可讀性」有個很經典的例子 XD 假設有一個 Date 類別,請問建構函數要怎麼設計? Date date1 = Jan(12, 2008) ; Date date2 = Feb( 9, 2009) ; 忘記在哪邊看到的了... XD -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.160.254.105

08/21 18:18, , 1F
這個... 是反面教材嗎?...
08/21 18:18, 1F

08/21 19:54, , 2F
這個例子很正面,程式本身就很具描述性
08/21 19:54, 2F

08/21 20:19, , 3F
黑書前兩章的地方有提過。
08/21 20:19, 3F

08/21 21:20, , 4F
很不錯,只是要定義較複雜的語意就難摟
08/21 21:20, 4F

08/21 21:25, , 5F
好的介面設計就是讓人一看用例就懂,
08/21 21:25, 5F

08/21 21:26, , 6F
並且不容易忘記,因為是如此的自然 :)
08/21 21:26, 6F

08/21 21:26, , 7F
這時如果再加註解,那就顯得多餘了
08/21 21:26, 7F

08/22 04:24, , 8F
我反而不喜歡這樣設計這個Date Object
08/22 04:24, 8F

08/22 04:26, , 9F
Date的原意在日期 這樣重點(Method)跑道
08/22 04:26, 9F

08/22 04:26, , 10F
月份去了
08/22 04:26, 10F

08/22 13:06, , 11F
不會跑到月份啦,看也知道是日期
08/22 13:06, 11F

08/22 13:06, , 12F
用高階的方式思考,不要侷限在語言
08/22 13:06, 12F

08/22 13:10, , 13F
program into a language;
08/22 13:10, 13F

08/22 13:10, , 14F
NOT program in a language.
08/22 13:10, 14F

08/22 13:17, , 15F
Jan(12, 2008) 不但易懂,還防呆
08/22 13:17, 15F

08/22 14:05, , 16F
跑到月份去的話那寫 Date date = 幹嘛。
08/22 14:05, 16F

08/22 14:16, , 17F
何必呢
08/22 14:16, 17F

08/22 15:27, , 18F
還有,月份只有 Jan ,不會有 (12, 2008)
08/22 15:27, 18F

08/24 14:50, , 19F
你可以說我古板, 但 method 就該是動詞
08/24 14:50, 19F

08/24 14:50, , 20F
當你看到一個叫 Jan 的 method, 那有什
08/24 14:50, 20F

08/24 14:50, , 21F
麼好處呢?... 要防呆, 我寧願弄個enum
08/24 14:50, 21F

08/24 17:31, , 22F
青菜蘿蔔各有喜好
08/24 17:31, 22F

08/25 10:43, , 23F
我還是老論點: 這種違背正常設計原則的
08/25 10:43, 23F

08/25 10:44, , 24F
創新方法, 待把程式撰寫作為工藝磨練好
08/25 10:44, 24F

08/25 10:45, , 25F
才搞這種 "創新" 吧. 我實在不能苟同一
08/25 10:45, 25F

08/25 10:45, , 26F
個叫 Jan 的 method, 超詭異的
08/25 10:45, 26F

08/25 10:46, , 27F
Date d=getDate(2008, Month.JAN, 1);
08/25 10:46, 27F

08/25 10:46, , 28F
這會比起那個寫法難讀嗎? 我覺得還比較
08/25 10:46, 28F

08/25 10:46, , 29F
易讀, 防呆也沒分別
08/25 10:46, 29F

08/25 11:16, , 30F
有些規範比較嚴格的軟體公司會限制程設師用
08/25 11:16, 30F

08/25 11:17, , 31F
這類'別樹一格'的語法.
08/25 11:17, 31F

08/25 11:17, , 32F
為什麼?搞得跟人家不一樣只會造成大家的困擾
08/25 11:17, 32F

08/25 11:19, , 33F
.一看就懂嗎?只怕未必.因為人家還是希望有標
08/25 11:19, 33F

08/25 11:19, , 34F
準文件做為參考基準.而不是讓程式自己說話.
08/25 11:19, 34F

08/25 12:09, , 35F
to adrianshum, 你那樣寫的確也防呆,
08/25 12:09, 35F

08/25 12:10, , 36F
看起來也很清楚,但用起來卻顯得比較累贅
08/25 12:10, 36F

08/25 12:12, , 37F
若 Jan() 或 Date() 視為 constructor ,
08/25 12:12, 37F

08/25 12:12, , 38F
或 factory method ,就不必堅持使用動詞
08/25 12:12, 38F

08/25 12:16, , 39F
to bobju, 不確定你說的標準文件的內含,
08/25 12:16, 39F

08/25 12:16, , 40F
為啥該文件會跟這個用例衝突,
08/25 12:16, 40F

08/25 12:17, , 41F
就我知道,很少程式規範到那麼細的地方
08/25 12:17, 41F

08/25 12:19, , 42F
另外,請區分 function 及 procedure
08/25 12:19, 42F

08/25 12:19, , 43F
procedure 命名才會建議用動詞
08/25 12:19, 43F

08/25 12:25, , 44F
我想 adrianshum 一定把這段碼當成 JAVA,
08/25 12:25, 44F

08/25 12:26, , 45F
剛好想到 JAVA 的 new 也很累贅...
08/25 12:26, 45F

08/25 17:06, , 46F
這就是Java程設師和C++程設師的不同
08/25 17:06, 46F

08/25 23:57, , 47F
to ykjiang簡單講就是不要用自創的'程式語法
08/25 23:57, 47F

08/25 23:58, , 48F
寫程式.你寫的程式碼用法最好都有官方文件為
08/25 23:58, 48F

08/25 23:58, , 49F
參考根據.
08/25 23:58, 49F

08/26 00:42, , 50F
和 C++/Java 沒關吧?! method 是動詞是
08/26 00:42, 50F

08/26 00:42, , 51F
基本 OOAD 的做法吧...
08/26 00:42, 51F

08/26 01:53, , 52F
樓上看rails的document一定會看到吐血..
08/26 01:53, 52F

08/26 01:56, , 53F
寫起來像英文是好事啊 不一定要堅持什麼
08/26 01:56, 53F

08/26 01:56, , 54F
OOAD的作法..
08/26 01:56, 54F

08/26 08:29, , 55F
Java寫久了自然會比較接受Java那一套
08/26 08:29, 55F

08/26 11:29, , 56F
其實我是幹了五六年 C++ development
08/26 11:29, 56F

08/26 11:30, , 57F
最近幾年才主力寫 Java 而已. 我說的原
08/26 11:30, 57F

08/26 11:30, , 58F
則在 C++ 的時候已經有遵從. 我常說,
08/26 11:30, 58F

08/26 11:31, , 59F
創新不是問題, 但待你把基本的磨練好
08/26 11:31, 59F

08/26 11:39, , 60F
才想創新的玩法吧.
08/26 11:39, 60F

08/26 13:02, , 61F
內文明明就說是問「建構函式」怎麼設計
08/26 13:02, 61F

08/26 13:03, , 62F
而不是問 object methods
08/26 13:03, 62F

08/26 13:05, , 63F
例如數學函式也都命名為 sin(), cos() 等
08/26 13:05, 63F

08/26 13:05, , 64F
不會是 getSin(), getCos()
08/26 13:05, 64F
文章代碼(AID): #1AZcg9xn (Programming)
討論串 (同標題文章)
文章代碼(AID): #1AZcg9xn (Programming)