[0.4]面向表达式编程之美
2016-04-04 11:12
471 查看
参考文献
为什么要纠结这个问题呢?答:为了更好地理解面向表达式编程。【Mr.Snail注:以下概念有点抽象,说了等于没说,但又不得不说
】可以从以下两方面考虑:表达式返回一个值,而语句则没有返回值-存在是为了使用其副作用(side-effect)。
语句可以由表达式组成,表达式可以由语句组成;表达式可以用作语句,而语句不能用作表达式。
优先使用面向表达式编程
总结
《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" } }
总结
表达式有返回值,语句没有返回值
优先使用面向表达式编程,让代码更简洁,高效
相关文章推荐
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- 总结整理 -- ruby系列
- 关于eclipse或Android studio中adb连接上不了手机的解决方法
- eclipse web开发插件安装
- python三目表达式
- C++实现IP地址类
- 引入ping++的server SDK,thinkphp报错:unexpected 符号“,”
- JAVA 对象引用,以及对象赋值
- Struts2的一点人生经验
- Java IO流基础
- Java基础笔记一
- C# mvc--EF中查询的本质
- struts2笔记03-ActionContext
- 【转】理解Java Integer的缓存策略
- Ten sort algorithms in interviews
- JAVA第四周作业--快速复制
- HDFS的JAVA客户端编写(JAVA代码实现对HDFS的操作)
- PHP 的标注输入输出
- SparkContext主构造函数代码提取
- 在Windows下编译mongo-c-driver 1.3.x