Scala学习笔记(四) - 变量,常量,函数及类的定义

来源:互联网 发布:看漫画学日语知乎 编辑:程序博客网 时间:2024/04/27 03:12

Scala的语言相对来说还是比较复杂的,所以我打算将Scala拆分成两部分来说,第一部分是传统的C类语言的结构,类,函数变量,控制语句,第二部分是Scala与其他C类语言不通的地方及特点,这样的好处是可以让大家迅速了解Scala的基本操作,但是坏处是大家可能忽视掉后面的函数式的思想,纠结啊

关于类,字段和方法的定义,其实基本上与Java相似,但是却也有着一些区别。

类:

Scala中的类依然是使用class关键字,定义一个类与Java,C#没什么太大的区别,例如:

[java] view plaincopy
  1. class Class1{  
  2.    // 一些东西  
  3. }  

与其他语言不同的是,Scala中,默认的访问符是 public,即如果你不明确的写明private或其他访问符,则类里的成员默认都是可以公开访问的。

同时Scala中没有static的类,但是他有一种类似的伴生对象,稍后会介绍。

字段:

字段/变量的定义Scala中使用 var/val 变量/不变量名称 : 类型的方式进行定义,例如:

[java] view plaincopy
  1. var index1 : Int = 1  
  2. val index2 : Int = 1  

其中var 与 val 的区别在于,var 是变量,以后的值还可以改变, val的值只能在声明的时候赋值,但是val不是常量,只能说是不变量或只读变量,与C#中的readonly的变量有点相似,例如:


[java] view plaincopy
  1. index1 = 2   // OK  
  2. index2 = 2   // Error 编译错误  

大家肯定会觉得这种 var/val 名称 : 类型的声明方式太过于繁琐了,嗯,Scala作者也想到了,所以你在声明字段的时候,可以使用编译器自动推断类型,即不用写 : 类型,例如:
[java] view plaincopy
  1. var index1 = 1  
  2. val index2 = 1  

当然,将函数的返回值赋值给字段时也是可以自动推断的。

其实根据函数式编程思想中,var变量是个不好的存在,Scala中推荐大家尽可能的采用val的不变量,主要原因是因为val的不可变有助于理清头绪,但是相对的会付出一部分的性能代价。

函数:

Scala中的函数定义与其他的C类语言也不太一样,例如:

[java] view plaincopy
  1. def max( x : Int, y : Int) : Int = {   
  2.     if(x > y)  
  3.     {   
  4.        return x  
  5.     }  
  6.     else   
  7.     {  
  8.        return y   
  9.     }  
  10. }  
其中def 是函数定义关键字 max 是函数名, x, y 是参数,参数类型是Int,并且是val即不可变的,最后的 : Int是返回值类型

嗯,写法很麻烦,看样子可以优化,首先是return ,Scala中,可以不写return,如果不写return 则自动将最后计算的结果作为返回值,如果没有返回值,则函数的返回类型为Unit,类似于Java和C#中 void。

[java] view plaincopy
  1. def max( x : Int, y : Int) : Int = {   
  2.     if(x > y) x else y  
  3. }  
接着,变量可以推断返回类型,所以函数也可以,嗯,我们可以简写成:
[java] view plaincopy
  1. def max( x : Int, y : Int) = {   
  2.     if(x > y) x else y  
  3. }  
好吧,现在函数只剩一行了,这种时候,我们连大括号都可以省略了 ╮(╯▽╰)╭

最后简化成:

[html] view plaincopy
  1. def max( x : Int, y : Int) =  if(x > y) x else y  
相对于第一个版本简洁了相当多吧,在除了最后一个版本的函数声明中,都可以把 = 号省略掉,加 = 是为了表示,函数与字段一样都是头等公民,函数是头等函数,这些东西后面会介绍。

=====解释器跨行代码=============================================

再解释器中,我们经常会写一些比较长的代码,然后这些代码跨行了,这种时候,我们可以使用 | 作为换行符继续编写代码,例如:

val msg = |

"Hello world" 

同样我们也可以使用两个 | 来撤销之前的代码,例如:

val oops = 

|

|

这种时候,将撤销对 oops的声明

0 0
原创粉丝点击