代码改变世界

Scala基础知识[一]

2016-10-26 13:44  牛仔裤的夏天  阅读(275)  评论(0编辑  收藏  举报
摘要:在Scala 是 Scalable Language 的简写,是一门多范式(multi-paradigm)的编程语言。设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。

1.Scala 特性

面向对象特性、函数式编程、静态类型、扩展性、并发性

2.Scala Web 框架

目前比较流行的 Scala 的 Web应用框架:Lift 框架、Play 框架

3.Scala 安装

Scala 语言可以运行在Window、Linux、Unix、 Mac OS X等系统上。
Scala是基于java之上,大量使用java的类库和变量,必须使用Scala之前必须先安装 Java
从Scala下载安装包后配置环境变量后cmd中输入scala可以看到scala版本信息。

4.Scala基础语法

区分大小写-
类名 - 对于所有的类名的第一个字母要大写
方法名称 - 所有的方法名称的第一个字母用小写
程序文件名 - 程序文件的名称应该与对象名称完全匹配
def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。
换行符 - Scala语句末尾的分号是可选的。如果一行里写多个语句那么分号是需要的。

5.Scala包

定义包:
Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:
第一种方法和 Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中。 比如:

package mytest
class HelloWorld

第二种方法有些类似 C#,如:

package mytest {
  class HelloWorld 
}

第二种方法,可以在一个文件中定义多个包。
引用:
Scala 使用 import 关键字引用包。

6.Scala变量

在Scala中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量。

val msg="hello world"

这个表达式定义了一个类型为string的msg字符串常量。这里并不需要定义其类型,Scala 可以根据赋值的内容推算出变量的类型。这在 Scala 语言中成为“ type inference ”。也可以明确指定变量的类型如:

val msg:String="hello"

在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。
所以,如果在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,否则将会报错:

var myVar = 10;
val myVal = "Hello, Scala!";

以上实例中,myVar 会被推断为 Int 类型,myVal 会被推断为 String 类型。

7.Scala 访问修饰符

Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。如果没有指定访问修饰符符,默认情况下,Scala对象的访问级别都是 public。
(1)私有(Private)成员
用private关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。

class Outer{
    class Inner{
    private def f(){println("f")}
    class InnerMost{
        f() // 正确
        }
    }
    (new Inner).f() //错误
}

(2)保护(Protected)成员

在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的类的子类中被访问。

package p{
class Super{
    protected def f() {println("f")}
    }
    class Sub extends Super{
        f()
    }
    class Other{
        (new Super).f() //错误
    }
}

(3)公共(Public)成员

Scala中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地方都可以被访问。

class Outer {
   class Inner {
      def f() { println("f") }
      class InnerMost {
         f() // 正确
      }
   }
   (new Inner).f() // 正确因为 f() 是 public
}

8.Scala 运算符

(1)算术运算符
+ 加号
- 减号
* 乘号
/ 除号
% 取余

(2)关系运算符
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
(3)逻辑运算符
&& 逻辑与
|| 逻辑或
! 逻辑非
(4)赋值运算符
= 简单的赋值运算,指定右边操作数赋值给左边的操作数。
+= 相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。
-= 相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。
*= 相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。
/= 相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。
%= 求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。
<<= 按位左移后再赋值 C <<= 2 相当于 C = C << 2
>>= 按位右移后再赋值 C >>= 2 相当于 C = C >> 2
&= 按位与运算后赋值 C &= 2 相当于 C = C & 2
^= 按位异或运算符后再赋值 C ^= 2 相当于 C = C ^ 2
|= 按位或运算后再赋值 C |= 2 相当于 C = C | 2

9.if...else语句

if(布尔表达式 1){
   // 如果布尔表达式 1 为 true 则执行该语句块
}else if(布尔表达式 2){
   // 如果布尔表达式 2 为 true 则执行该语句块
}else if(布尔表达式 3){
   // 如果布尔表达式 3 为 true 则执行该语句块
}else {
   // 如果以上条件都为 false 执行该语句块
}

10.循环

while:

while(condition)
{
   statement(s);
}

do...while:

do {
   statement(s);
} while( condition );

for:

for( var x <- Range ){
   statement(s);
}

break 语句:

Scala 语言中默认是没有 break 语句,但是在 Scala 2.8 版本后可以使用另外一种方式来实现 break 语句。

// 导入以下包
import scala.util.control._
// 创建 Breaks 对象
val loop = new Breaks;
// 在 breakable 中循环
loop.breakable{
    // 循环
    for(...){
       ....
       // 循环中断
       loop.break;
   }
}

11.函数

我们可以在任何地方定义函数,甚至可以在函数内定义函数(内嵌函数)。Scala 函数名可以有以下特殊字符:+, ++, ~, &,-, -- , \, /, : 等。
Scala 函数定义格式如下:

def functionName ([参数列表]) : [return type] = {
   function body
   return [expr]
}

如果函数没有返回值,可以返回为 Unit,这个类似于 Java 的 void, 实例如下:

object Hello{
   def printMe( ) : Unit = {
      println("Hello, Scala!")
   }
}

12.闭包