scala要点总结1:基本语法

系列开篇:

Scala要点总结系列博客,主要目的是对scala语言的要点和独特的语法进行快速的梳理,过程中避免涉及深入的理论,点到为止。

系列博客分为5篇,分别为:基本语法,数组集合常用操作,函数式编程,面向对象,模式匹配。

适合有Java语言基础的同学对scala语言进行快速的掌握,因为部分通用的语法,例如操作符等就没有提到,或者作为简易手册进行日常的快速翻查。

更加深入的内容可以阅读书籍[1]。

一. 数据类型

 

二. 变量

1. 可变变量 variable

var v1 : String = “hello”

或者让scala自己类型推断

var v2 = “hello

2. 不可变变量 value

不可变指的是引用不可变,不是引用的值不可变

val v1 =“String”

 

三. 访问修饰符

包,类或对象的成员可以使用私有(private)和受保护(protected)的访问修饰符进行标注,默认情况下是 public。

private修饰的成员只能在本类,或者伴生对象中访问,即使是父类也无法访问,而Java则可以。

protected修饰的只能在本类和子类中访问,同一个包下的也不行。

Private后面可以显式的控制访问权限,

代码示例:

package outer {
  package inner {

    class TestClass {
      private[outer] var o = "o"
      private[inner] var i = "i"
      private[this] var th = "th"

      def m1(t: TestClass) {
        println(t.o)
        println(t.i)
        println(t.th) // error
        println(this.th) // success
      }
    }

    // 伴生对象
    object TestClass {
      def m2(): Unit = {
        val t = new TestClass
        println(t.o)
        println(t.i)
        println(t.th) // error
      }
    }

  }

}

 

四. 循环和break

val list1 = List.range(0, 10)
val list2 = List.range(0, 10)

val br = new Breaks

br.breakable {
  for (x <- list1 if x % 2 == 0; if x < 5; // 小于5的偶数
       y <- list2 if y % 2 != 0; if y >= 5) { // 大于等于5的奇数
    if (x + y > 10)
      br.break

    println("a:" + x + ", b:" + y)
  }
}

值得注意的是,Java中的break只能跳出当前的循环,而scala中的break功能更加类似Java中的goto语法,可以轻松的跳出多层循环。

 

五. 方法和函数

1. 方法

def hello(name : String = "friend"): Unit = {
    println("hello " + name)
}
// hello: (name: String)Unit

2. 函数和转换

val func = (name : String) => "hello"+name
// func: String => String = $$Lambda$1197/1479813516@7c070e78

方法属于类的一部分,而函数是一个完整的对象。方法可以没有方法列表,但是函数必须有,即使是空的参数列表。更加详细的区别可以查看文章[2]

大部分场景下,不需要关注两者的区别,当将方法作为参数传入其他高阶的方法时,scala也会自动的将方法转化为函数,也可以自己显式的转换,method _。注意下划线和转换的方法名之间有个空格。

 

参考文献

[1]: Programming in Scala, Third Editio - Martin Odersky
[2]: scala方法和函数的区别 http://www.runoob.com/w3cnote/scala-different-function-method.html

猜你喜欢

转载自blog.csdn.net/zhanht/article/details/89041183
今日推荐