<Zhuuu_ZZ>Scala(一)从入门到入土

Scala从入门到入土

  • 一 概述
  • 二 Scala关键字列表
  • 三 Scala数据类型
  • 四 字符串插值
  • 五 Scala条件控制
    • if语句
    • 循环控制

一 概述

  • 面向对象特性
    • 每个值都是对象
    • 对象的数据类型和行为由类(Class)和特征(Trait,类似interface)描述
    • 利用特征实现混入式多重继承
  • 函数式编程
    • 每个函数都是一个值
    • 支持高阶函数、柯里化(currying)、样例化(case class)及模式匹配
  • Scala是静态类型语言即先编译后执行,对比html动态类型语言
  • 扩展性:隐式类、字符串插值

二 Scala关键字列表

abatract case catch class
def do else extends
false final finally for
forSome if implicit import
lazy match new null
object override package private
protected return sealed super
this throw trait try
true type val var
while with yield (空格)
- : = =>
<- <: <% >:
# @

三 Scala数据类型

  • Scala与Java有着相同的原始数据类型
    <Zhuuu_ZZ>Scala(一)从入门到入土_第1张图片
  • Scala数据类型层次结构
    • Any:所有类型的超类(顶级类型)
    • AnyVal:表示值类型的超类
    • AnyRef:表示引用类型的超类,对应java.lang.Object
    • Unit:表示无值,类似Java中的void
    • Nothing:所有类型的子类
    • Null:表示null或空引用
      <Zhuuu_ZZ>Scala(一)从入门到入土_第2张图片
    • null是Null类型的唯一实例

四 字符串插值

  • s插值器:允许将变量引用、表达式直接插入字面字符中
val name="Tom"
println(s"Hello,$name")     //Hello,Tom
println(s"1+1=${1+1}")       //1+1=2
println(s"1+1="+(1+1))       // 1+1=2
  • f插值器
val height=1.9d
val name="Tom"
println(f"$name%s is $height%2.2f")    //Tom is 1.90
println(f"$name%s is $height%5.2f")    //Tom is  1.90
println(f"$name%s is $height%5.3f")    //Tom is 1.900
  • raw插值器
s"a\nb"                //将输出换行后结果a
                                        b
raw"a\nb"            //输出原始字符a\nb
  • 既输出换行符也输出原始字符
println(s"a\nb"+raw"\nc\nd")
object HelloWorld {
     
  def main(args: Array[String]): Unit = {
     
    var a:String="haha"
    var b:String=
    raw"""aaa bb \t
       aaa ccc \n ${a}
       asdf sdaf
      """
    println(b)
  }
}

//输出
aaa bb \t
       aaa ccc \n haha
       asdf sdaf
      

五 Scala条件控制

if语句

  • Scala任何表达式都有返回值
  • 代码块“{…}"也是表达式,返回值为最后一个表达式结果
object demo {
     
  def main(args: Array[String]): Unit = {
     
val i=11
    if (i>10){
     
      println("i值大于10")}
    else
      {
     println("i值小于等于10")}
    println("程序结束")
    val j=if(i==10) i+1 else i+2
    println(j)
    val x=10
    val y={
     
      println("代码块y")
      x+1
    }
    println(y)
    val y2={
     
      x+1;
      println("代码块y2")
    }
    println(y2)
  }
/*输出
i值大于10
程序结束
13
代码块y
11
代码块y2
()

循环控制

  • while和do while
object demo {
     
  def main(args: Array[String]): Unit = {
     
        var x=0
        while(x<100){
     
          println(x)
          x=x+1
        }
        do{
     
          println(x)
          x=x+2
        }while(x<100)
  • for循环
object demo2 {
     
  def main(args: Array[String]): Unit = {
     
  var num=10
    for(i<- 1 to num){
     //to 包含10
      println(i)
    }
    for(x<- 1 until 10){
      //until 不包含10
    println(x)
  }
    for(i<-num to 1 by -2){
     //by为跳步,每次减2
      println(i)
    }
    //打印99乘法表
    for(x<-1 until num){
     
      for(y<-1 to x){
     
        print(y+"*"+x+"="+(x*y)+"\t")
      }
      println()
   }
   // 打印三角形
    for(x<-1 until num){
     
      for(y<-num until x by -1){
     
        print(" "+"\t")
      }
      for(z<-1 to 2*x-1){
     
        print("*"+"\t")
      }
      println()
    }
    //打印空心三角形
    for(x<-1 until num){
     
      for(y<-num until x by -1){
     
        print(" ")
      }
      print("*")
      if(x==9) {
     
        for (j <- 1 to 16) {
     
print("*")
        }
      }
      for(z<-1 to 2*(x-1)-1){
     
        print(" ")
      }
     if(x==1){
     print(" ")}
     else if(x<9) {
     
       print("*")
     }
      println()
     }
  }
}

<Zhuuu_ZZ>Scala(一)从入门到入土_第3张图片

  • 中断
/*
scala使用break需要导入break包
且使用breakable消除抛出的异常
 */
import scala.util.control.Breaks

object demo3 {
     
  def main(args: Array[String]): Unit = {
     
//    import scala.util.control.Breaks._
//    var num=10
//    breakable{
     
//    for(i<-num to 1 by -1){
     
//      if(i<3) break
//      println(i)
//    }}
    import scala.util.control.Breaks
    var num=10
    var loop=new Breaks
    loop.breakable{
     
      for(x<-num to 1 by -1){
     
        if(x<3)loop.break
        println(x)
      }
    }
  }
}
  • for循环过滤及返回值
    • for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。也称for推导式
object demo2 {
     
  def main(args: Array[String]): Unit = {
     
    var i=100
    val resValue=for(x<-1 to i ;if x%2==0;if x%5==0)yield x;//for循环返回值,yield
    println(resValue)  //打印为Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
for(x<-resValue){
     
  println(x)
}
  • 打印加法表
object test1 {
     //打印加法表
  def main(args: Array[String]): Unit = {
     
    var num=6
    for(x<-0 to num ){
     
        println(x+"+"+(num-x)+"="+(x+num-x))
    }
  }
}

你可能感兴趣的:(Scala,scala)