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

看板java作者 (虛空雷神獸)時間6年前 (2018/10/25 20:46), 編輯推噓0(005)
留言5則, 3人參與, 6年前最新討論串1/1
大家好 我是程式初學者,剛從 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

10/26 19:08, 6年前 , 1F
一個方法裡面只做一件事 就醬
10/26 19:08, 1F

10/27 01:55, 6年前 , 2F
看起來不錯呀 只是外面用不到的就沒必要寫 public
10/27 01:55, 2F

10/27 01:55, 6年前 , 3F
不想養成壞習慣可以多看 design pattern 裡面人家怎麼做
10/27 01:55, 3F

10/30 11:05, 6年前 , 4F
Clean Code 無暇的程式碼 一個method只做跟method名字
10/30 11:05, 4F

10/30 11:05, 6年前 , 5F
一樣的事
10/30 11:05, 5F
文章代碼(AID): #1RqRiqzQ (java)
文章代碼(AID): #1RqRiqzQ (java)