1. Scala基础

1. 变量和类型

变量类型声明:

var VariableName : DataType [=  Initial Value]

常量声明:

val VariableName : DataType [=  Initial Value]

DataType也可以不写,scala会进行类型的推断,但是此时必须给出初始值。

scala的基本类型:

序号 类型 说明
1 Byte 8位有符号值,范围从-128至127
2 Short 16位有符号值,范围从-32768至32767
3 Int 32位有符号值,范围从-2147483648至2147483647
4 Long 64位有符号值,范围从-9223372036854775808至9223372036854775807
5 Float 32位IEEE 754单精度浮点值
6 Double 64位IEEE 754双精度浮点值
7 Char 16位无符号Unicode字符。范围从U+0000到U+FFFF
8 String 一个Char类型序列
9 Boolean 文字值true或文字值false
10 Unit 对应于无值
11 Null null或空引用
12 Nothing 每种其他类型的亚型; 不包括无值
13 Any 任何类型的超类型; 任何对象的类型为Any
14 AnyRefs 任何引用类型的超类型

2. 运算符

和C语言基本一致

3. 条件判断和循环

  • if…else… 和C语言一致

  • while 循环和C语言一致

  • for 循环的用法比较特殊

    循环区间、循环集合、循环过滤、使用 yield

=======for 循环区间=======

1、单个区间
基本模型,使用Range表示一段范围
for( var x <- Range ){
    statement(s);
}
Range 可以用 a to b 或者 a until b 表示
a to b 的区间是[a, b] , a until b 的区间是 [a, b)

2、多个区间
Range的表示方式和1一致
for( a <- 1 to 3; b <- 1 to 3){
    println( "Value of a: " + a );
    println( "Value of b: " + b );
}

=======for 循环集合=======

List 变量是一个集合,for 循环会迭代所有集合的元素
for( var x <- List ){
   statement(s);
}

=======for 循环过滤=======

使用一个或多个 if 语句来过滤一些元素
for( var x <- List
      if condition1; if condition2...
   ){
   statement(s);
}

例子:
for( a <- numList
    if a != 3; if a < 8 ){
    println( "Value of a: " + a );
}

=======for 使用yield=======

for 循环的返回值作为一个变量存储
var retVal = for{ var x <- List
     if condition1; if condition2...
}yield x

大括号中用于保存变量和条件,retVal是变量,
循环中的yield会把当前的元素记下来,
保存在集合中,循环结束后将返回该集合

4. 方法与函数

Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
Scala 中的方法跟 Java 的类似,方法是组成类的一部分。
Scala 中的函数则是一个完整的对象,Scala 中的函数其实就是继承了 Trait 的类的对象。
Scala 中使用 val 语句可以定义函数,def 语句定义方法。

方法定义:

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

用方法的标准格式:
functionName( 参数列表 )
如果方法使用了实例的对象来调用,我们可以使用类似java的格式 (使用 . 号):

[instance.]functionName( 参数列表 )

高阶函数

Scala允许定义高阶函数。它是将其他函数作为参数或其结果是函数的函数。

最常见的一个例子是Scala集合类(collections)的高阶函数map

val salaries = Seq(20000, 70000, 40000)  
val doubleSalary = (x: Int) => x * 2  
val newSalaries = salaries.map(doubleSalary) 
// List(40000, 140000, 80000)

匿名函数

函数可以使用函数文字语法表达,即(x:Int)=> x + 1,例如:

var mul = (x: Int, y: Int) => x*y

定义不带参数的函数,如下所示:

var userDir = () => { System.getProperty("user.dir") }

泛型函数

带有类型的函数,有点像函数模板,例如:

def getMiddle[T](a: Array[T]) = a(a.length / 2)

5. Scala 闭包

闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。

var factor = 3  
val multiplier = (i:Int) => i * factor

函数变量 multiplier 成为一个"闭包",因为它引用到函数外面定义的变量
定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。

6. Scala 字符串

声明一个字符串,String 对象是不可变的

val greeting: String = "Hello,World!"

如果你需要创建一个可以修改的字符串,可以使用 String Builder 类

获取长度:
使用 length() 方法来获取字符串长度

var palindrome = "www.runoob.com";  
var len = palindrome.length();

字符串连接
String 类中使用 concat() 方法来连接两个字符串

str1 + str2  
string1.concat(string2)

创建格式化字符串
String 类中你可以使用 printf() 方法来格式化字符串并输出,
String format() 方法可以返回 String 对象而不是 PrintStream 对象。

String的方法:http://www.runoob.com/scala/scala-strings.html

7. Scala 数组

Scala 语言中提供的数组是用来存储固定大小的同类型元素, 声明数组的方法:

var z:Array[String] = new Array[String]3) 或 var z = new Array[String](3)

使用()的方式来访问数组的元素

z(0) = "Runoob"; z(1) = "Baidu"; z(2) = "Google"

多维数组

多维数组一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组。
矩阵与表格是我们常见的二维数组。使用Array类的静态方法ofDim来声明多维数组

var myMatrix = ofDim[Int](3,3)

Reference

[ Scala API ] : https://www.scala-lang.org/api/2.11.12/#scala.package

[ 易百 Scala 教程 ] : https://www.yiibai.com/scala/

猜你喜欢

转载自blog.csdn.net/zhangshuaiisme/article/details/87979434