参考文献
《Scala in depth》 by Joshua D.Suereth《Thinking in scala》 by Bruce Eckel & Dianne Marsh场景
什么是面向表达式编程,面向表达式编程的优点分析
- 语句与表达式的概念与区别
为什么要纠结这个问题呢?答:为了更好地理解面向表达式编程。【Mr.Snail注:以下概念有点抽象,说了等于没说,但又不得不说 】可以从以下两方面考虑:
- 表达式返回一个值,而语句则没有返回值-存在是为了使用其副作用(side-effect)。
- 语句可以由表达式组成,表达式可以由语句组成;表达式可以用作语句,而语句不能用作表达式。
- 优先使用面向表达式编程
面向表达式编程能使代码更精简,更优雅?请比较下文中实现同一功能的三个方法。不得不说scala就像一篇散文啊,读起来贼爽,而模式匹配与面向表达式的完美结合又使这篇散文有了诗歌的简洁之美!/** * function: 面向表达式编程的简洁之美 * 结果: * NetWork Exception! * File Not Found" * Unknown Exception */ object Assignment_Oriented_Programming { def main(args: Array[String]): Unit = { println(createErrorMessage(1)) println(createErrorMessageNicer(2)) println(createErrorMessageBest(3)) } /** * 具有浓厚 java Style的代码 */ def createErrorMessage(errorCode:Int):String= { var result:String = "" //定义了一个变量 var 存储result errorCode match { case 1 => result = "NetWork Exception !" //每一个case中都给 result赋值 case 2 => result = "File Not Found Exception !" case _ => result = "Unknown Exception !" } return result // 最后通过关键字 return 申明方法返回结果 } /** * 使用面向表达式的模式匹配加以优化 */ def createErrorMessageNicer(errorCode:Int):String= { val result = errorCode match { //定义一个常量 result,整个match语句构成一个表达式-返回具体的异常信息 case 1 => "NetWork Exception" case 2 => "File Not Found" case _ => "Unknown Exception" } return result } /** * 最佳实践:地道 scala Style 的 代码 */ def createErrorMessageBest(errorCode:Int):String= errorCode match { case 1 => "NetWork Exception" case 2 => "File Not Found" case _ => "Unknown Exception" } }
总结
表达式有返回值,语句没有返回值
优先使用面向表达式编程,让代码更简洁,高效