Least Power原则:如果存在多个解决方案,选择刚好能解决问题的那个。
“刚好”意味着不求面面俱到、不追求最大的灵活性,意味着它仅处理有限多的问题,更易直观分析,更易满足单一职责的设计原则,更易组合和重用。这条原则来自于编程语言选择的原则:如果存在多种语言,选择刚好能解决问题的那个。原因如上。
为什么这条原则适用于Scala编程语言?因为Scala中元编程(Meta-programming)往往能以更少量的代码提供更高的灵活性,“看起来”较之其他方案能更好的解决问题,但追求最好往往永无止境。
原则一、复杂是你的敌人。
很多开发者对Scala语言的抱怨是,Scala代码往往难以阅读和理解,编译速度也较慢。除却我们无法控制的编译速度,使代码易于阅读、减少复杂度是Scala开发者应该特别遵循的原则之一。
原则二、不要害怕重构。
对于如Python和Ruby等的动态类型语言,甚至Java或C等较弱静态类型语言,重构是一件很困难的事情。比如,在Python中重命名一个域或方法,你没有方法保障正确更新了所有调用,即使在Java中,由于类型转换和反射的使用,你可能轻易删除或修改了某个类,编译也顺利通过,但运行时还是抛出了ClassCastException或InvocationTargetException错误。Scala是一种强类型语言,编译器可以帮助你发现很多其它语言无法发现的错误,减少犯错的可能性。虽然仍然有一些.toString和==类似的问题会带来困扰,但你在重构Scala代码时会相对轻松很多。
原则三、不要过度设计。
如果你进需要一个函数或方法,那就把方法或函数传进来,不需要传入整个对象以便于后续使用对象的其它成员;如果你仅需要一个辅助方法,把它嵌套在你当前方法内部即可,不需要单独提出来以便于其它函数或方法使用。这样就可以不用关心方法提供者的其它实现,直观易读;如果需要提供者的其它方法,修改参数传入对象即可。Scala程序开发完成后往往会经历两三次,甚至三四次的重构。这听起来好像很没有效率。但是,每一次重构,代码的性能和可读性的都会有极大的提升。使代码对重构是友好的,比一开始就追求极致的设计会给我们带来更可观的收益。
参考资料:
Strategic Scala Style: Principle of Least Power, Haoyi Li, http://www.lihaoyi.com/post/StrategicScalaStylePrincipleofLeastPower.html;Scala: The Road Ahead, Martin Odersky, Scala Days NYC 2016, http://www.slideshare.net/Odersky/scala-days-nyc-2016