在阅读一些 Java 代码中,发现有无数方法的返回值类型是 void:没有返回值。java
在当年流行的学院式语言 Pascal (也是我第一种实际使用的语言)中,特地区分了有无返回值的过程:有返回值的是 function (函数),无返回值的叫作 procedure (过程)。对于过程式的语言,procedure 意味着必须经过某种全局变量或者直接的 IO 过程来实现它的目标,固然是邪恶的了。这也是区别这两种语义的设计缘由。对于 Pascal 程序员,尽可能提升 function 的比例、下降 procedure 的数量,是一个设计的目标。程序员
但是到了 OO 时代,大量使用的成员变量让程序员们有了某种幻觉:既然能够经过成员变量来和外界沟通,对象的方法就能够光明正大地使用 void 返回值,使用 procedure 了。可是,纯粹的 function 比这样的方法有重大的优点:多线程
所以,即便使用 Java 这样的 OO 语言,尽可能提升 function 的数量,让程序中大多数代码都是 function 的一部分仍然是很是值得提倡的美德。函数
public class Greeter { private String sentence; public void hello(String name) { sentence = "Hello, " + name; } public void greeting(String name) { hello(name); System.out.println(sentence); } public void sendGreeting() { MailSystem.sendMessage(sentence); } }
简单得过度的一个 Hello, world 例子,但里面的 hello
方法仍然变得依赖具体的成员变量。若是改为这样:线程
public class Greeter { public String hello(String name) { return "Hello, " + name; } public void greeting(String name) { sentence = hello(name); System.out.println(sentence); } public void sendGreeting() { MailSystem.sendMessage(sentence); } }
这个 hello
方法就能够随意复制到其余地方去了。固然,你可能注意到如今这个方法能够标识为静态,你甚至不须要一个对象实例就可使用它。设计
public static String hello(String name)
如今开始就请欣赏你代码中增多的 static function,将 void 返回值的 procedure 视做代码中应尽力避免的坏味道吧!code