Scala 编程基础

1 表达式


表达式是可计算的语句。

1 + 1
"ss" + "gg"

常量

使用val为表达式的结果命名。

val x = 1 + 1

引用常量不需要重计算表达式。
常量不能被重赋值。
常量类型可以被推导出,也可以显式指定类型。

# 显式指定常量类型
val x:Int = 1 +  1

变量

变量与常量相似,只不过变量可以被重赋值。
使用var定义变量。
var与val一样,也可以显式指定类型。

var t:Int = 1 + 2
t = 12
println(t)

2 块


可以使用块将表达式结合。
块中最后一个表达式的结果也是整个块的结果。

println({
    var x = 1 + 4
    x + 666
})

3 函数


函数是带参数的表达式。
可以使用匿名函数,也可以为函数命名。
函数可以有多个参数,可以没有参数。

# 匿名函数
(x: Int) => x + 1

# 命名函数
var ff = (x:Int, y:Int)=>x + y
println(ff(12, 24))

# 无参函数
val cc = ()=> 1
println(cc())

4 方法


方法使用def关键字定义,def之后是方法名、参数列表、返回值类型与方法体。
方法可以有单个参数列表,也可以有多个参数列表,也可以没有参数列表。
方法可以有也可以有多行表达式。最后一行是方法的返回值,虽然Scala也有return关键字,但是很少使用。

# 方法定义
def add(x: Int, y: Int): Int = x + y

# 方法定义(多个参数列表)
def mu(x: Int, y: Int)(multiplier:Int): Int = (x+y)*multiplier
println(mu(1,2)(3))

# 方法定义(没有参数列表)
def name:String = System.getProperty("user.name")
println(name)

# 方法定义(多行表达式)
def getS(input: Double): String = {
    val s = input * input
    s.toString
}

5 类


使用class关键字定义类,class之后是类名与构造器参数。

# 定义类
class Greeter(pre:String, suf: String) {
    def greet(name:String): Unit = {
        println(pre + name + suf)
    }
}

方法返回类型Unit类似于Java与C中的void。
每个Scala表达式必须包含值,Unit类型存在一个单例值,written()。此值不携带任何信息。

可以使用new关键字创建类实例

# 创建类实例
val getter = new Greeter("Hello, ","!" )
getter.greet("Scala developer")

6 样例类


Scala具有一个特殊类型的类称之为"样例"类。默认情况下,样例类是不可改变的并且通过值进行比较。可以使用case class关键字定义样例类。

# 定义样例类
case class Point(x: Int, y:Int)

# 实例化样例类(不需要new关键字)
val po = Point(1, 2)
val an = Point(1, 2)
var ye = Point(2, 2)

# 样例类通过值进行比较
println(po == an)
println(ye == an)

7 对象


对象是自身定义的单个实例,可以看作是自身类的单例。
可以使用object关键字定义对象。
可以使用对象的名称访问对象。

# 对象定义
object IdFactory {
    private var counter = 0
    def create(): Int = {
        counter += 1
        counter
    }
}

# 访问对象
val newId:Int = IdFactory.create()
println(newId)

8 特质


特质是包含某些字段与方法的类型。多个特质可以组合在一起。
使用trait关键字定义特质。
对类使用extend关键字,可以扩展特质,并且使用override关键字可以重写特质中的方法实现。
类可以扩展多个特质。

# 定义特质
trait Gre {
    def greet(name: String):Unit
}

# 定义特质(方法具有默认实现)
trait Gre {
    def greet(name: String):Unit =
        println("Hello, " + name + "!")
}

# 扩展特质
class De extends Gre

# 扩展特质(重写方法)
class Cus (pre:String, post: String) extends Gre{
    override def greet(name: String): Unit = {
        println(pre + name + post)
    }
}

9 主方法


主方法是程序的进入点。JVM要求主方法被命名为main,并且具有一个字符串数组参数。

object Main {
    def main(args: Array[String]):Unit =
        println("Hello, Scala Developer!")
}

翻译源:Scale Tour

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/83338573
今日推荐