[0.4]面向表达式编程之美

参考文献
《Scala in depth》 by Joshua D.Suereth
《Thinking in scala》 by Bruce Eckel & Dianne Marsh
场景
什么是面向表达式编程,面向表达式编程的优点
分析
  
  
  • 语句与表达式的概念与区别
为什么要纠结这个问题呢?答:为了更好地理解面向表达式编程。【Mr.Snail注:以下概念有点抽象,说了等于没说,但又不得不说 偷笑】可以从以下两方面考虑:
  1. 表达式返回一个值,而语句则没有返回值-存在是为了使用其副作用(side-effect)。
  2. 语句可以由表达式组成,表达式可以由语句组成;表达式可以用作语句,而语句不能用作表达式。
  • 优先使用面向表达式编程
面向表达式编程能使代码更精简,更优雅?请比较下文中实现同一功能的三个方法。不得不说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"
  }
}
总结
表达式有返回值,语句没有返回值
优先使用面向表达式编程,让代码更简洁,高效
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值