简洁的scala

     在之前的工作和学习中并没有接触过scala。粗粗接触,感觉至少在语法上scala让我很不适应。 然而,所有我看到过的关于scala的书和一些网络资料上说,scala诡异的语法(至少在我目前看来是诡异的)正是出于对代码简洁的考虑。

    简洁的scala

scala简洁吗?scala被认为有很高的代码密度,键入更少获得更多。

接下来以java和sacla的一些小例子对比着看scala是不是真的简洁吧:

java代码

public static void main(String[] args) {
		for(int i = 0 ;i <= 3;i++){
			System.out.println(i);
		}
	}

相同功能的scala代码

scala code

def main(agrs:Array[String]){
    for (i <- 1 to 3){
      println(i)
    }
  }


两个程序都是在主方法中写了一个for循环,打印了3个数,语法上和java是不是差别很大呢?


scala与java相比打印语句没有任何累赘的东西;分号一般是可选的,只有当需要避免一些语法上的歧义时才必须键入;变量没有必要指定类型,她通过类型推演来获得变量的真实类型;对于一些简单的代码可以不放到类中,这些都与java对比鲜明,有人说当使用java时,也许你想要的只是香蕉,但是你得到的是一个拿着香蕉的大猩猩。

scala的循环是轻量级的,只要说明变量i的取值范围即可。理解scala的for循环我们借助一下称为可以执行的伪代码的python代码:

for i in range(1,4):
    println i
上面这段python代码和之前的两段代码运行结果是一样的,可见scala中的”<-"与python中的"in"的作用是相同的,1 to 3和range(1,4)的作用是一样的都是用来当做生成器表达式,实际上scala中确实也有这样的写法。

为了"键入更少获得更多"上面的scala代码还悄悄做了一些事情,我们来看下面这段代码

<pre name="code" class="plain">scala code

def main(agrs:Array[String]){
    for (i <- 1.to(3)){
      println(i)
    }
  }


 原来形如1 to 3竟然是方法调用,只是scala将方法调用时的“.”和括号省略了。然而“.”和括号不是完全不需要的,只有当方法只有0或者1个参数时调用方法才可以省略。 

不仅如此,scala还做了更多,但是要讨论scala还做了哪些事之前,我们先学习下val和var的知识,在scala中var和val都可以用来定义变量,不同之处在于,使用val定义的变量时不可变得,这里所说的不变是指变量本身不变,而不是变量引用的实例。在scala中建议尽量使用val,这样可以保证不变性,要知道scala是用来处理并发的这点很重要。

知道var和val后可能想知道上面循环中的i是可变还是不可变的呢?答案是不可变得,每次循环都重新创建i并赋值,这保证了我们不会因为疏忽将i的值改变,这也说明scala在i处理成用val声明,然而这对于我们来说是透明的。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值