目录 start
目录 end
|2018-04-08| 码云 | CSDN | OSChina
特性
简洁的基础语法
object HelloWorld {
def main(args:Array[String]){
val hello = "Hello World!"
println(hello)
}
}
针对这个简单示例的语法特性
match表达式
var transFer = args(0) match{
case "one" => "1"
case "Two" => "2"
case _ => "Error: '"+args(0)+"' "
}
println(transFer)
def autoType(obj: Any) = obj match{
case s: String => s.length
case i: Int => 4
case _: => -1
}
case类
case class TemperatureAlarm(temp: Double)
这一行就定义个一个有效的case类,相比于Java简化了很多var alarm = TemperatureAlarm(99.9)
创建case实例不需要关键字 newactor
运行
scalac scala
就像javac java
先进行编译然后再运行字节码Scala 文件
解释运行包
package com.runoob
class HelloWorld
package com.runoob {
class HelloWorld
}
Scala数据类型
|数据类型|描述| |:---|:---| |Byte |8位有符号补码整数。数值区间为 -128 到 127| |Short |16位有符号补码整数。数值区间为 -32768 到 32767| |Int |32位有符号补码整数。数值区间为 -2147483648 到 2147483647| |Long |64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807| |Float |32位IEEE754单精度浮点数| |Double |64位IEEE754单精度浮点数| |Char |16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF| |String |字符序列| |Boolean |true或false| |Unit |表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。| |Null |null 或空引用| |Nothing |Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。| |Any |Any是所有其他类的超类| |AnyRef |AnyRef类是Scala里所有引用类(reference class)的基类|
定义变量
定义无类型 变量 var name
常量 val name
定义变量加上类型 var VariableName : DataType [= Initial Value]
常量同理
如果在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,否则将会报错。
var myVar = 10;
val myVal = "Hello, Scala!";
声明多个变量 val xmax, ymax = 100 // xmax, ymax都声明为100
Scala 访问修饰符基本和Java的一样,分别有:private,protected,public
函数
def functionName ([参数列表]) : [return type] ={}
def
关键字开始,紧接着是可选的参数列表,一个冒号":" 和方法的返回类型
,一个等于号"=",最后是方法的主体
。def len(obj: AnyRef) = {
obj.toString.length
}
+
这个方法。Scala不再把操作符当做一个独立概念Scala认为所有的东西都是对象,所以可以在任何东西上调用方法,即使是Java里的原始变量
def fact(base: Int) : Int = {
if(base < 0){
print("负数没有阶乘 :")
return base
}
if(base == 0){
return 1
}else{
return base * fact(base - 1)
}
}
import java.io.File
普通导入import java.net._
通配导入import scala.collection.{Map, Seq}
导入包下多个类import java.util.{Date => UDate}
导入类并取别名Scala采用函数式编程中的概念 列表推导式 来实现for循环
// 条件for循环
for (i <- 1 to 10; if i%2 ==0){
println(i)
}
// 多变量循环
for(x<- 1 to 16; y<- 1 to x){
println(" "*(x-y) + x.toString * y)
}
// 一次新建,多次使用
val xs = for(x <- 2 to 11) yield x
for(factx <- xs) println(factx)
(<函数参数列表>) => {...}
val doubler = (x: Int) => {2*x}
val adder = (n: Int) => {(x: Int) => x+n}
定义一个可以加任意数的函数
val plus2 = adder(2)
定义一个将入参 加2的函数何时以及如何开始使用Scala
可能不适合当前项目的迹象