[问题] 应该要有多少方法(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