[转帖]Scala学习笔记(四) - 变量,常量,函数及类的定义_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3029 | 回复: 0   主题: [转帖]Scala学习笔记(四) - 变量,常量,函数及类的定义        下一篇 
jie.liang
注册用户
等级:少校
经验:1003
发帖:77
精华:0
注册:2013-10-11
状态:离线
发送短消息息给jie.liang 加好友    发送短消息息给jie.liang 发消息
发表于: IP:您无权察看 2013-10-22 9:11:05 | [全部帖] [楼主帖] 楼主

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

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

类:

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

[java]

  1. class Class1{  
  2.    // 一些东西   
  3. }  

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

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

字段:

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

[java]

  1. var index1 : Int = 1  
  2. val index2 : Int = 1  


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

[java]

  1. index1 = 2   // OK   
  2. index2 = 2   // Error 编译错误  


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

[java]

  1. var index1 = 1  
  2. val index2 = 1  



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

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

函数:

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

[java]

  1. def max( x : Int, y : Int) : Int = { 
  2.        if(x > y) 
  3.        { 
  4.              return x 
  5.        } 
  6.        else 
  7.        { 
  8.              return y 
  9.        } 


其中def 是函数定义关键字 max 是函数名, x, y 是参数,参数类型是Int,并且是val即不可变的,最后的 : Int是返回值类型

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

[java]

  1. def max( x : Int, y : Int) : Int = { 
  2.        if(x > y) x else y 


接着,变量可以推断返回类型,所以函数也可以,嗯,我们可以简写成:

[java]

  1. def max( x : Int, y : Int) = { 
  2.        if(x > y) x else y 


好吧,现在函数只剩一行了,这种时候,我们连大括号都可以省略了 ╮(╯▽╰)╭

最后简化成:

[html]

  1. def max( x : Int, y : Int) =  if(x > y) x else y  


相对于第一个版本简洁了相当多吧,在除了最后一个版本的函数声明中,都可以把 = 号省略掉,加 = 是为了表示,函数与字段一样都是头等公民,函数是头等函数,这些东西后面会介绍。

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

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

val msg = |
"Hello world"


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

val oops =
|
|


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




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论