Scala基础语法

Scala 是一种有趣的语言。它一方面吸取继承了多种语言中的优秀特性,一方面又没有抛弃 Java 这个强大的平台,它运行在 Java 虚拟机 (Java Virtual Machine) 之上,轻松实现和丰富的 Java 类库互联互通。它既支持面向对象的编程方式,又支持函数式编程。程序员

1,定义变量

 val x = 0 
  var y = 1 
  
  y = 2 
  // 给常量赋值会出现编译错误
  // x = 3 

  // 显式指定变量类型
  val x1: Int = 0 
  var y1: Int = 0

仔细观察上述代码,咱们会有两个发现:编程

      定义变量时没有指定变量类型。这是否意味着 Scala 是和 Python 同样的动态类型语言呢?偏偏相反,Scala 是严格意义上的静态类型语言,因为其采用了先进的类型推断(Type Inference)技术,程序员不须要在写程序时显式指定类型,编译器会根据上下文推断出类型信息。好比变量 x被赋值为 0,0 是一个整型,因此 x的类型被推断出为整型。固然,Scala 语言也容许显示指定类型,如变量 x1y1的定义。通常状况下,咱们应尽可能使用 Scala 提供的类型推断系统使代码看上去更加简洁。函数式编程

      另外一个发现是程序语句结尾没有分号,这也是 Scala 中约定俗成的编程习惯。大多数状况下分号都是可省的,若是你须要将两条语句写在同一行,则须要用分号分开它们。函数

2,定义函数

       函数的定义也很是简单,使用关键字 def, 后跟函数名和参数列表,若是不是递归函数能够选择省略函数返回类型。Scala 还支持定义匿名函数,匿名函数由参数列表,箭头链接符和函数体组成。函数在 Scala 中属于一级对象,它能够做为参数传递给其余函数,能够做为另外一个函数的返回值,或者赋给一个变量。在下面的示例代码中,定义的匿名函数被赋给变量 cube。匿名函数使用起来很是方便,好比 List对象中的一些方法须要传入一个简单的函数做为参数,咱们固然能够定义一个函数,而后再传给 List对象中的方法,但使用匿名函数,程序看上去更加简洁。spa

// 定义函数
  def square(x: Int): Int = 
    x * x                      
  // 若是不是递归函数,函数返回类型可省略
  def sum_of_square(x: Int, y: Int) = 
    square(x) + square(y)  

  sum_of_square(2, 3)   
  
  // 定义匿名函数
  val cube = (x: Int) => x * x *x 
  cube(3) 

  // 使用匿名函数,返回列表中的正数
  List(-2, -1, 0, 1, 2, 3).filter(x => x > 0)

      让咱们再来和 Java 中对应的函数定义语法比较一下。首先,函数体没有像 Java 那样放在 {}里。Scala 中的一条语句实际上是一个表达式,函数的执行过程就是对函数体内的表达式的求值过程,最后一条表达式的值就是函数的返回值。若是函数体只包含一条表达式,则能够省略 {}。其次,没有显示的 return语句,最后一条表达式的值会自动返回给函数的调用者。scala

      和 Java 不一样,在 Scala 中,函数内部还能够定义其余函数。好比上面的程序中,若是用户只对 sum_of_square 函数感兴趣,则咱们能够将 square 函数定义为内部函数,实现细节的隐藏。code

def sum_of_square(x: Int, y: Int): Int = { 
    def square(x: Int) = 
      x * x 
    square(x) + square(y) 
  }

3,控制语句

      复杂一点的程序离不开流程控制语句,Scala 提供了用于条件判断的 if else和表示循环的 while。和 Java 中对应的条件判断语句不一样,Scala 中的 if else是一个表达式,根据条件的不一样返回相应分支上的值。好比下面例子中求绝对值的程序,因为 Scala 中的 if else是一个表达式,因此不用像 Java 那样显式使用 return返回相应的值。对象

3.1  使用 if else 表达式

def abs(n: Int): Int = 
 if (n > 0) n else -n

和 Java 同样,Scala 提供了用于循环的 while 语句,在下面的例子中,咱们将借助 while 循环为整数列表求和。继承

3.2  使用 while 为列表求和

 def sum(xs: List[Int]) = { 
    var total = 0 
    var index = 0 
    while (index < xs.size) { 
      total += xs(index) 
      index += 1 
    } 
    total 
  }

3.3  使用for循环

for(i <- 1 to 10)
 {     
     println("i is " + i); 
 } 
 for(i <- 1 until 10)
  { 
      println("i is " + i); 
  }

  Scala语言中的for循环有两个关键字tountiluntilto的不一样之处在于它不包括最后一个元素。上面代码中的第一个循环会循环打印1到10包括10,而第二个循环打印1到9,不包含10。另外,scala在for循环中对循环变量i的赋值用了“<-”符号递归

4,注意

  • 区分大小写 -  Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不一样的含义。

  • 类名 - 对于全部的类名的第一个字母要大写。

    若是须要使用几个单词来构成一个类的名称,每一个单词的第一个字母要大写。

    示例:class MyFirstScalaClass

  • 方法名称 - 全部的方法名称的第一个字母用小写。

    若是若干单词被用于构成方法的名称,则每一个单词的第一个字母应大写。

    示例:def myMethodName()

  • 程序文件名 - 程序文件的名称应该与对象名称彻底匹配。

    保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加“.scala”为文件扩展名。 (若是文件名和对象名称不匹配,程序将没法编译)。

    示例: 假设“HelloWorld”是对象的名称。那么该文件应保存为'HelloWorld.scala“

  • def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每个Scala程序的强制程序入口部分。

相关文章
相关标签/搜索