Scala学习 -- 基础语法

Posted lyh1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala学习 -- 基础语法相关的知识,希望对你有一定的参考价值。

一、变量

  1、三种变量修饰符

    val 定义 immutable variable(不修改 常量)

    var 定义 immutable variable(可修改 变量)

      lazy val (惰性赋值的常量):不直接算出结果,在系统第一次调用 lazy val 的时候计算结果

scala> val d = 12
d: Int = 12

scala> val e = 20
e: Int = 20

scala> lazy val f = d * e
f: Int = <lazy>

scala> f*12
res41: Int = 2880

scala> f
res42: Int = 240

    * 可以不显示指定变量的类型,因为Scala会自动进行类别指导    

scala> val y:Int = 20
y: Int = 20

scala> val x = "asd"
x: String = asd

  

  2、函数与代码块

    代码块(Block)

        代码块用于组织多个表达式,代码块自身也是个表达式,求得的值是最后一个表达式的值。

        代码块有两种写法:

          1、表达式都写在一行,表达式之间分号分割   

exp1; exp2

 

        2、表达式分行,表达式末尾不需要分毫

    exp1
    exp2    

    函数 

def functionName(param: paramType):returnType = 
    // function body: expressions

      示例代码如下:

object Hello 
  def helloDemo(name: String) = 
    s"Hello,$ name "
  

  def add(x:Int, y:Int): Int = 
    x+y
  

  def main(arg: Array[String]) = 
    println(helloDemo("Yu Hang"))
    println(s"X + Y Result is $add(12,34)")
  

                              技术图片

 

  3、if、for表达式

    在Scala里面,if和for并不是语句,而是一个表达式。 语句是可以单独执行的、能够产生实际效果的代码;而表达式则是包含在语句中,根据某种条件计算出一个值或得出某种结果,然后由语句去判断和处理的代码。

    (1)if表达式

        if(logical_exp) valA else valB

 

scala> if(true) 1 else 2
res44: Int = 1

scala> if(false) 3 else 4
res45: Int = 4

scala> val a = 1
a: Int = 1

scala> if(a == 1) a
res46: AnyVal = 1

scala> if(a!= 1) a
res47: AnyVal = ()

scala> if(a!=1) "not one" else a
res48: Any = 1

scala> if(a!=1) "not one"
res49: Any = ()

 

  if(a!=1) a 的时候返回值是(), 因为“a!=1”是false,且 if 表达式没有 else,所以返回值为 Scala里面空是 Unit,所以if表达式的返回值就是Unit的文字量,就是一个空括号

 

     (2)for comprehension

println("正常的for遍历:")
for( s <- l)    // generator
  println(s)

println("\\n带有 filter 的for遍历:")
for( 
  s <- l          // generator
  if(s.length>4)  // filter
) 
  println(s)

println("\\n带有 filter 的for遍历:")
val result_for = for
  s <- l              // generator
  s1 = s.toUpperCase()  // variable binding
  if(s1 != "")
 yield (s1)          // generator new collection
for( item <- result_for ) println(item)

 

    for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是  Map,被循环的是 List,返回的就是 List,以此类推。

  4、try与match表达式

      (1)try表达式

try 
catch 
finally 

      示例代码:

try 
  Integer.parseInt("dog")
 catch 
  case _ => 0
 finally 
  println("always be printed")

      case _ => 0, "_"是通配符,无论try中是什么异常都会被catch到,并返回0。finally 是try catch之后执行的,无论表达式是否异常,都会执行finally。

      (2)match与switch较为相似

 

exp match 
  case p1 => val1
  case p2 => val2
  ...
  case _ => valn  

 

      其中的 "case _" 就相当于switch中的 default。

val code = 3
  val result_match = code match 
    case 1 => println("one")
    case 2 => println("two")
    case 3 => println("three")
    case _ => println("other")

  

 

以上是关于Scala学习 -- 基础语法的主要内容,如果未能解决你的问题,请参考以下文章

Scala学习 -- 基础语法

scala学习01-scala基础语法

Scala学习之一 Scala基础语法

Scala基础语法学习

Scala基础语法学习

Scala学习——基础语法