Java方法最佳设计实践

3
我知道在Java中,每当要执行多次代码块时,就会创建一个方法。
例如,下面的printPlusOne将被调用五次:
    class Count{

        public static void main(String[] args) {
            for(int i = 0; i < 5; i++){
                printPlusOne(i);
            }
        }

       public static void printPlusOne(int i){
            int sum  = i + 1;
            System.out.println(sum);
       }
    }

但如果我只想执行一块相关代码一次,我该怎么办? 我是否也应该为此创建一个方法? 还是应该像下面这样将代码留在主方法中。 一般来说,即使只调用一次,创建方法是否是一种良好的设计实践?还是这些是多余的,我可以将代码块留在主要方法中?

     class Count{

         public static void main(String[] args) {

             //The below will print only once at the beginning of the program.
             //Should I create a method for it even if it runs only once?

             System.out.println("This is the introduction.");
             System.out.println("The program will return a count");
             System.out.println("Have fun.")
         }
     }

12
代码被调用的次数并不重要。当您有一组可以封装在一个直观且描述性强的名称下的操作时,您会创建一个方法来进行操作。也就是说,如果您有一行或多行代码需要"做某事",那么您应该将它们放入以该事物命名的方法中。 - David
关于你的第一个例子的说明:我会把整个循环放在一个方法中,例如:printNums(int start, int end); 这样会更加灵活。同时,在决定将方法绑定到特定输出流时需要小心,因为这会让代码变得不够灵活。 - ChiefTwoPencils
@ChiefTwoPencils 谢谢。我只是用这个作为一个快速的例子。 - pseudorandom
我明白了。我觉得这对你的问题也可能有用。printPlusOne 方法使用了一个不必要的 sum,因为 i 是按值传递的,并且实际上只做了一件有用的事情(打印)。所以,将两者合并成 printNumsPlusOne(),它只需要执行 System.out.println(i + 1) ,在我看来更好地使用了该方法。 - ChiefTwoPencils
@ChiefTwoPencils 我试图创建一个有多行代码的方法,否则该方法将是无用的。这只是为了引出我的主要问题而编写的代码。 - pseudorandom
1
@pseudorandom 当一行代码的意图不明显时,需要使用只有一行代码的方法。虽然标准并不一定是长度,但较长的方法往往会在意图上冗长而含糊不清。 - xiaofeng.li
3个回答

4
这里不仅有“经验法则”来指导您。整个“clean code movement”(某种程度上基于Robert Martin的优秀必读著作“Clean Code”; 现在获取免费PDF文档)及其原则告诉我们:“方法越多,越好”。
更准确地说:
1. 有“单一职责原则” - 意味着编程中的任何“事物”(模块、类、方法)只应有“唯一职责”。因此,一个方法只做“一件事”,且只做一件事。 2. 有“单一抽象层原则”,基本上告诉您在方法中不能有超过一个if、一个loop或一个try-catch。
但需要避免误解:目标是创建“最大程度可读”的代码。您不应该根据原则创造许多方法。您应该创建您需要完成工作的方法;既不少也不多!
最后,关于“许多短方法比少量长方法更好”的一个重要方面是:这样的设置有助于“您的大脑”更快地理解内容。问题在于当学习任何写下来的东西时,您的大脑总是尝试找到上下文和“边界”。如果您编写具有明确、易于理解的边界的代码,则在以后返回并研究代码时,您会帮助大脑。但是,如果您将太多内容放入一个方法中,则大脑将开始将该方法的内容“切片”成较小的部分。换句话说:你浪费了大脑的CPU周期,迫使大脑“忽略”这一个大方法中隐藏着许多小方法的事实。
顺便说一下:不要担心运行时效率。JVM/JIT非常擅长优化小方法;它们越小,在运行时可能越容易进行内联。

1
你的“clean code movement”链接已经失效。 - gbeaven

2

我的经验法则是:一个方法应该只做一件事情,并且把它做好。即使它今天只被调用一次,六个月后可能会在其他地方被调用。不仅如此,正如@holtc所说的那样,这样做可以让你更容易理解你的代码在做什么。


1
创建方法可以使代码更易于阅读/维护,但如果它只会被调用一次,那就取决于你了,但我猜从技术上讲最好还是创建一个方法,以便更轻松地进行更改/更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接