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

一 概述

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

二 Scala关键字列表

abatractcasecatchclass
defdoelseextends
falsefinalfinallyfor
forSomeifimplicitimport
lazymatchnewnull
objectoverridepackageprivate
protectedreturnsealedsuper
thisthrowtraittry
truetypevalvar
whilewithyield(空格)
-:==>
<-<:<%>:
#@

三 Scala数据类型

  • Scala与Java有着相同的原始数据类型
    在这里插入图片描述
  • Scala数据类型层次结构
    • Any:所有类型的超类(顶级类型)
    • AnyVal:表示值类型的超类
    • AnyRef:表示引用类型的超类,对应java.lang.Object
    • Unit:表示无值,类似Java中的void
    • Nothing:所有类型的子类
    • Null:表示null或空引用
      在这里插入图片描述
    • 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()
     }
  }
}

在这里插入图片描述

  • 中断
/*
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))
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值