码迷,mamicode.com
首页 > 其他好文 > 详细

Scala学习 -- 基础语法

时间:2019-07-14 19:52:29      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:bsp   mat   学习   inf   是什么   result   default   括号   integer   

一、变量

  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学习 -- 基础语法

标签:bsp   mat   学习   inf   是什么   result   default   括号   integer   

原文地址:https://www.cnblogs.com/Lyh1997/p/11185229.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!