Scala极速入门
2015-05-22 19:33
183 查看
定义
Scala语言是一种面向对象语言,同时又结合了命令式(imperative)和函数式(functional)编程风格。官网描述:Object-Oriented Meets Functional(面向对象遇到函数式编程)。
安装
下载地址http://www.scala-lang.org/download/
当前版本2.11.4
设置环境变量
?
如果是修改的profile,执行source /etc/profile,使环境变量立即生效。
检测安装是否成功命令 scala -version,如果出现以下内容,证明安装成功。
?
Scala解释器
直接输入scala,就进入scala解释器
?
先来两个例子,熟悉以下scala解释器
?
结果被命名为res0,Int指结果类型,3指计算结果
?
输出hello scala
变量
Scala中的变量有两种var和val(val类似于Java中final,值不可改变)
scala> var hello = "hello world"
hello: String = hello world
scala可以根据赋值内容推算出变量类型。Scala中的数据类型都是对象。
函数
Scala是面向对象语言同时也是函数式编程语言,因此函数在Scala语言中的地位同对象、变量一样。使用scala函数注意一下几点:
1) 函数参数写在类型之前,中间用逗号隔开;
?
2) 函数都有返回结果,无需使用return,函数内最后一个表达式作为返回结果返回。helloScala函数的返回类型为Unit,表示该函数不返回任何有意义的值(相当于Java中的void)。
3) 函数参数可以给定默认值。
?
4) 函数的参数都是val类型,执行过程中不能被改变。(函数式编程的特点,只计算结果,不改变参数)
5) 定义方法还有如下方式
def add = (x : Int, y : Int) => x + y
打印结果print(add(1, 2));
def add2(x : Int)(y : Int) = x + y
打印结果print(add2(1)(2))
循环
在了解循环之前,我们先要知道Scala不支持i++和++i,需要使用i+=1来实现加一。
while循环
?
for循环
?
for参数里面同样支持if判断,比如输出1——10中的偶数
?
foreach
?
因为参数只有一个,表达式也只有一个,可以简写为
?
Array与List
创建数组有两种方式
?
或者
?
注意与Java不同的是:数组的第零个元素是greetStrings(0),不是greetStrings[0]。
Array长度不可变,但是它的值可变。
List长度与值都不可变。
?
这里有两个操作 ::: 连接两个List
:: 右操作符,将一个新元素放到List的最前端。
类与对象
1. 定义类
?
缺省访问级别是public,一个源文件中可以有多个class,都是public的。
2. 主构造器
?
1)主构造器直接跟在类名后面,主构造器的参数最后会被编译成字段。
2)主构造器执行的时候,会执行类中所有的语句。
3)如果主构造器参数声明时候不加val或者var,就相当于private
3. 从构造器
?
1)从构造器定义在类内部,方法名为this
2)从构造器必须先调用已经存在的构造器
4. 继承:继承而来的字段不需要加var或者val
?
注意:重写父类的字段或方法要在前面加上override关键字
5. 抽象类(abstract class)与特质(trait)
1)抽象方法不需要加关键字,只有声明,没有具体实现。
2)可以声明抽象字段,也就是没有初始值。
3)子类重写父类的抽象方法或者抽象字段,不需要加override
trait特质可以理解为可以有具体实现方法的接口,类可以通过with关键字混入(mix-in)特质,同时它的对象也可以混入特质。
Scala程序的执行入口是提供main方法的独立单例对象。同样也可以给一个单例对象混入App特质,去继承App特质中的main方法.
6. apply方法
1)对象的apply方法
?
上面例子中一个调用apply方法,生成一个新的对象。(绝大多数apply方法都是这样去用)
apply方法就是Scala提供的一个语法糖,对象的apply方法在scala里面非常常用
例如:
?
以下是Array对象的apply方法源码
?
2)类的apply方法
?
7.单例
用object替换class,其它的跟定义类类似。
当单例对象与类共享同一个名字时,该对象称作类的伴生对象。
与Java对比
如果用作服务器端开发,Scala的简洁、灵活性是Java无法比拟的;如果是企业级应用开发、Web开发,Java的强大是Scala无法匹敌的。我们不用一种语言的优势去抨击另一种语言的短板,所以不要说Java与Scala孰优孰劣,更不要说谁将要取代谁,二者本来就是互补关系。
总结
scala语言的知识点有太多太多,在一篇博客中不可能做到一一列举。本文只是列举了常用的的几点,希望对正在学习scala的人有所帮助。
Scala语言是一种面向对象语言,同时又结合了命令式(imperative)和函数式(functional)编程风格。官网描述:Object-Oriented Meets Functional(面向对象遇到函数式编程)。
安装
下载地址http://www.scala-lang.org/download/
当前版本2.11.4
设置环境变量
?
检测安装是否成功命令 scala -version,如果出现以下内容,证明安装成功。
?
直接输入scala,就进入scala解释器
?
?
?
变量
Scala中的变量有两种var和val(val类似于Java中final,值不可改变)
scala> var hello = "hello world"
hello: String = hello world
scala可以根据赋值内容推算出变量类型。Scala中的数据类型都是对象。
函数
Scala是面向对象语言同时也是函数式编程语言,因此函数在Scala语言中的地位同对象、变量一样。使用scala函数注意一下几点:
1) 函数参数写在类型之前,中间用逗号隔开;
?
3) 函数参数可以给定默认值。
?
5) 定义方法还有如下方式
def add = (x : Int, y : Int) => x + y
打印结果print(add(1, 2));
def add2(x : Int)(y : Int) = x + y
打印结果print(add2(1)(2))
循环
在了解循环之前,我们先要知道Scala不支持i++和++i,需要使用i+=1来实现加一。
while循环
?
?
?
?
?
创建数组有两种方式
?
?
Array长度不可变,但是它的值可变。
List长度与值都不可变。
?
:: 右操作符,将一个新元素放到List的最前端。
类与对象
1. 定义类
?
2. 主构造器
?
2)主构造器执行的时候,会执行类中所有的语句。
3)如果主构造器参数声明时候不加val或者var,就相当于private
3. 从构造器
?
2)从构造器必须先调用已经存在的构造器
4. 继承:继承而来的字段不需要加var或者val
?
5. 抽象类(abstract class)与特质(trait)
1)抽象方法不需要加关键字,只有声明,没有具体实现。
2)可以声明抽象字段,也就是没有初始值。
3)子类重写父类的抽象方法或者抽象字段,不需要加override
trait特质可以理解为可以有具体实现方法的接口,类可以通过with关键字混入(mix-in)特质,同时它的对象也可以混入特质。
Scala程序的执行入口是提供main方法的独立单例对象。同样也可以给一个单例对象混入App特质,去继承App特质中的main方法.
6. apply方法
1)对象的apply方法
?
apply方法就是Scala提供的一个语法糖,对象的apply方法在scala里面非常常用
例如:
?
?
?
用object替换class,其它的跟定义类类似。
当单例对象与类共享同一个名字时,该对象称作类的伴生对象。
与Java对比
如果用作服务器端开发,Scala的简洁、灵活性是Java无法比拟的;如果是企业级应用开发、Web开发,Java的强大是Scala无法匹敌的。我们不用一种语言的优势去抨击另一种语言的短板,所以不要说Java与Scala孰优孰劣,更不要说谁将要取代谁,二者本来就是互补关系。
总结
scala语言的知识点有太多太多,在一篇博客中不可能做到一一列举。本文只是列举了常用的的几点,希望对正在学习scala的人有所帮助。
相关文章推荐
- Scala极速入门
- Scala极速入门
- Scala极速入门
- Scala极速入门
- Scala入门之高级类型:this.type
- Nginx基本功能极速入门
- scala入门-05继承类(extends)的使用
- Scala入门
- scala入门-10 隐式转换、隐式参数、隐式类
- Scala入门到精通——第五节 函数与闭包
- 云星数据---Scala实战系列(精品版)】:Scala入门教程037-Scala实战源码-Scala match语句02 条件守卫
- 100行代码入门Scala
- Scala入门到精通——第十节 Scala类层次结构、Traits初步
- Scala入门之函数进阶
- 云星数据---Scala实战系列(精品版)】:Scala入门教程040-Scala实战源码-Scala Case Class 02
- Nginx的一些基本功能极速入门
- Scala入门指南
- scala学习之协变逆变入门(一)
- Scala 入门——Eclipse开发环境搭建
- 新手极速入门反汇编(一)-必须了解的概念