看板 java 關於我們 聯絡資訊
大家好 我是程式初學者,剛從 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() 這種結構會不會造成日後牽一髮動全身難以維護? 是不是應該把這兩個方法寫成一個? 初學程式所以問題有點多 但是不想要在不經意的情況下養成壞習慣 請各位前輩多多指教,謝謝 -- ╔═ ═╦╦═════╦═════╗ ◤◤◤ ╠╣飛鳥ももこ╠═╗ ║ ║╚═════╝ ╚═╦═╣ ║╔══════╗╔═╩═╣ █◤ ╠╣Momoko Asuka╠╝ ║ ◣◢◣◢╩╩══════╩════╝ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.130.223 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1540471604.A.F5A.html
starburs: 一個方法裡面只做一件事 就醬 10/26 19:08
Cavalier: 看起來不錯呀 只是外面用不到的就沒必要寫 public 10/27 01:55
Cavalier: 不想養成壞習慣可以多看 design pattern 裡面人家怎麼做 10/27 01:55
new122851: Clean Code 無暇的程式碼 一個method只做跟method名字 10/30 11:05
new122851: 一樣的事 10/30 11:05