美文网首页Scala
Scala基础(2)- 值,变量,函数

Scala基础(2)- 值,变量,函数

作者: 彤庆 | 来源:发表于2015-03-03 04:48 被阅读657次

声明值和变量

值(value)声明以后不能修改其内容

val result = 3 + 4 * 5

result = 0 // error 

变量(variable)声明以后可以修改其内容。

var counter = 0
counter = 1 // ok

很C++,Java不同,Scala鼓励尽量使用val,避免副作用的发生。另外,可以看到我们没有像Java一样给result或者counter声明类型。Scala可以通过赋值推测出其类型。当然如果需要,也可以显示标明类型。

var message: String = null

函数

简单的函数定义如下

def max(x: Int, y: Int): Int = {
           if (x > y) x
           else y }

和大多数语言不同,Scala把类型(如Int)放在了参数名后面。个人理解,这样做的原因是很多时候,返回类型是可以省略的。相比较而言,参数名更为重要,所以放在前面。这也符合写程序的思考习惯。另外,函数没有return,默认执行的最后一行就是return,这一点也印证了“表达式即值”的思想,也是REPL中每执行一行,就有个result的原因。

如果函数不带参数,你可以不写括号。

scala> def three() = 1 + 2
three: ()Int
scala> three()
res2: Int = 3
scala> three
res3: Int = 3

这一点也适用于类的方法。这个设计不是随意为之,在谈类和对象时再仔细讲。现在只看看下面一个例子, Scala版本的快速排序(比Java版本简洁很多)

def sort(xs: Array[Int]): Array[Int] = {
    if (xs.length <= 1) xs
    else {
        val pivot = xs(xs.length / 2)
        Array.concat(
            sort(xs filter (pivot >)),
            xs filter (pivot ==),
            sort(xs filter (pivot <))
        )
    }
}

我们还没有介绍filter,不过可以想象xs filter (pivot >) 部分从xs中就是得到大于pivot的数列。想象xs filter someting就相当于xs.filter(something)。同理,x > y就是x.>(y)。而pivot >就相当于pivot.>()。一个缺省参数简化编程表达的应用。

函数的参数

参数可以是可变长的。

 scala> def echo(args: String*) =
                 for (arg <- args) println(arg)
        echo: (args: String*)Unit

参数可以给与名字

def speed(distance: Float, time: Float): Float = distance / time 

使用参数名调用,可以不考虑参数顺序

 speed(time = 10, distance = 100)

参数可以有默认值。这个例子默认打印到Console

 def printTime(out: java.io.PrintStream = Console.out) =
          out.println("time = "+ System.currentTimeMillis())

相关文章

  • Scala基础(2)- 值,变量,函数

    声明值和变量 值(value)声明以后不能修改其内容 变量(variable)声明以后可以修改其内容。 很C++,...

  • Scala函数式编程(三) scala集合和函数

    前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍...

  • scala学习笔记

    scala学习笔记 第2章 变量和数据类型 基本数据 scala的核心数据为四种 :字面量、值、变量、类型 值使...

  • Scala学习

    第一周 Scala基础 值与变量的声明 常用类型简介 函数与方法的定义与使用 条件表达式 循环及高级for循环使用...

  • Scala 学习笔记

    一、Scala 基础 变量 定义方法和函数 定义方法: 定义函数: 3. apply 方法 通常我们会在类的伴生对...

  • Scala 入门

    1 函数式编程思想 1.1 介绍 1.2 scala函数式编程思想 2 环境搭建 3 实战 4 变量 函数 函数定...

  • scala基础语法

    1.变量 val:常量 & var:变量 val定义之后值不可变 var定义后值可变 2.数据类型: Scala中...

  • Scala笔记

    Scala基础 学习twitter的scala教程的笔记 函数 函数定义,scala语法中可以使用多种方式定义函数...

  • Scala函数式编程(四)函数式的数据结构 下

    前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Sc...

  • Scala函数式编程(五) 函数式的错误处理

    前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Sc...

网友评论

    本文标题:Scala基础(2)- 值,变量,函数

    本文链接:https://www.haomeiwen.com/subject/nhrmxttx.html