[問題] 應該要有多少方法(method)?

作者: gasbomb (虛空雷神獸)   2018-10-25 20:46:39
大家好
我是程式初學者,剛從 Hello, World 跟乘法表迴圈脫離
正在練習陣列、字串,今天在想老師出的練習題
題目:
請設計一隻程式由鍵盤輸入三個整數,分別代表西元yyyy年,mm月,
dd日,它會顯示是該年的第幾天
例:輸入 1984 9 8 三個號碼後,程式會顯示「西元1984年,第250天」
(需判斷閏年)
直覺判斷這題解法是
拿一份yyyy年的月曆 => 從 1/1 開始填序數 => 填到指定日期停手 => 得到答案
依照上面流程寫出來的程式如下
https://pastebin.com/QXX5vrGZ
寫完之後看到 49 ~ 60 行的結構嚇了一跳
怕自己兩個月之後回來根本看不懂
很想在旁邊寫一串註解把自己當時的思考流程寫在上面
但是看到有些同學註解比 code 還長
程式有修改光註解重新排版就花了一堆時間
更不用說解法如果改了註解有可能全部廢掉
剛好最近上到 method, 就順手練習了一下
把這隻程式裡面的重要功能全部寫成 method
https://pastebin.com/GdCua2gx
改寫之後 main 只剩下這麼短
Scanner sc = new Scanner(System.in);
DayInYearV3 diy = new DayInYearV3();
System.out.println("請輸入年月日(YYYY MM DD):");
int yy, mm, dd;
yy = sc.nextInt();
mm = sc.nextInt();
dd = sc.nextInt();
if(yy < 1)
yy = Math.abs(yy) - 1;
diy.setEmptyCalendarOf(yy);
if(diy.isInputLegal(yy, mm, dd)) {
diy.countDIY(yy, mm ,dd);
sc.close();
}
感覺更簡潔好懂了
而且整個程式感覺完全不需要註解了
因為看方法的名字就可以讓我很具體的想像那一段程式到底在幹嘛
雖然說物件導向的優點是方法可以不斷重複使用,不必重複發明輪子
但像上面這種簡單的小程式,不知道裡面的方法還會不會派上用場
有必要把裡面的功能拆得這麼細嗎?
這樣做有沒有什麼明顯的壞處?
如果真的要寫成方法,方法的大小又該如何拿捏?
像是 setEmptyCalendarOf() 裡面又呼叫了 isLeapYear()
這種結構會不會造成日後牽一髮動全身難以維護?
是不是應該把這兩個方法寫成一個?
初學程式所以問題有點多
但是不想要在不經意的情況下養成壞習慣
請各位前輩多多指教,謝謝
作者: starburs (星爆氣流斬)   2018-10-26 19:08:00
一個方法裡面只做一件事 就醬
作者: Cavalier (Cavalier)   2018-10-27 01:55:00
看起來不錯呀 只是外面用不到的就沒必要寫 public不想養成壞習慣可以多看 design pattern 裡面人家怎麼做
作者: new122851 (未若柳絮因風起)   2018-10-30 11:05:00
Clean Code 無暇的程式碼 一個method只做跟method名字一樣的事

Links booklink

Contact Us: admin [ a t ] ucptt.com