(二)Scala从入门到项目实战(Flink、Spark、Kafka)——Scala入门及基本语法

目录

Scala入门

HelloWorld

创建一个scala工程

创建一个包

创建HelloWorld.scala

编写代码

数据类型

AnyVal类型之间的转换

变量和常量的声明

分支和循环

if…else…

to、until、Range

for循环

while和do…while


Scala入门

官网:https://www.scala-lang.org/

课程版本:2.13.1

HelloWorld

创建一个scala工程

创建一个包

创建HelloWorld.scala

 

 

 

编写代码

object HelloWorld {

  def main(args: Array[String]): Unit = {//入口函数

    println("HelloWorld")

  }

}

 

数据类型

像java分为基本数据类型和引用类型一样,scala也将数据分为两种类型,分别是值类型和引用类型。不同的是值类型(相当于java中的基本数据类型)有9个,并且都以对象形式存在,可以调用方法。

 

Any是所有类型的超类型,也称为顶级类型。它定义了一些通用的方法如equals、hashCode和toString。Any有两个直接子类:AnyVal和AnyRef。

AnyVal代表值类型。有9个预定义的非空的值类型分别是:Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。Unit是不带任何意义的值类型,它仅有一个实例可以像这样声明:()。所有的函数必须有返回值,所以Unit经常用在没有返回值时的返回值类型的声明(相当于void)。

AnyRef代表引用类型。所有非值类型都被定义为引用类型。在Scala中,每个用户自定义的类型都是AnyRef的子类型。如果Scala被应用在Java的运行环境中,AnyRef相当于java.lang.Object。

 

 

 

AnyVal类型之间的转换

 

各个类型所占字节长度与java相同。

但是这里数据类型的转换只能单向,比如将Int类型赋值给Long类型,如果逆向转换不能通过编译,比如将Long类型赋值给Int类型。可以转换的方向见上图。

Scala也支持数据类型的强制转换(解决逆向转换需求)例如:

    val a:Long = 12345556

    val b:Int = a.toInt

 

变量和常量的声明

Scala中常量用val来定义,表示不可变的量。

用var来定义变量,表示可变,在scala中推荐更多的使用val(有利于回收)。

 

分支和循环

if…else…

Scala中的if…else…与java中没有不同

    var age = 10

    if(age>=18){

      println("成年人")

    }else if(age<=10){

      println("儿童")

    }else{

      println("少年")

    }

他可以简写为:

    var age = 10

    if (age >= 18) println("成年人") else if (age <= 10) println("儿童") else println("少年")

 

 

to、until、Range

to:表示左闭右闭的一个范围,eg:1 to 10 => [1,10]

until: 表示左闭右开的一个范围,eg:1 to 10 => [1,9]

Range:从源码来看,to和until底层都是有Range类实现的。

 

 

for循环

    for(i <- 1 to 10){

      println(i)

    }

其中to为.to()函数的运算符形式

    var a = 1 to (10,2) //第二个参数为步长(每隔几个选定一次) 1,3,5,7,9

    var b = 1 until 10 //to 为包含结尾  until 不包含结尾

    println(a)

    println(b)

 

for循环练习

多层不同变量循环可以定义在一起,中间用分号隔开

九九乘法表:
       

     for(i<-1 until 10){

      for(j<-1 until 10){

        if(i>=j){

          print(s"$j * $i = "+i*j+"\t")

          if(i==j){

            println()

          }

        }

      }

    }

等价于

    for (i <- 1 until 10; j <- 1 until 10) {

      if (i >= j) {

        print(s"$j * $i = " + i * j + "\t")

        if (i == j) {

          println()

        }

      }

    }

 

除了上边说的循环条件可以定义在for之后的()里,还可以定义判断条件,用分号隔开,也可以省略

比如:打印出1到100之间大于50的偶数

    for (i <- 1 to 100; if (i > 50); if (i % 2 == 0)) {

      println(i)

    }    

 

同时for循环也可以得到一个返回值,这里需要通过yield关键字实现

比如:

    var vector = for (i <- 1 to 100 if (i > 50) if (i % 2 == 0)) yield i

    println(vector)

 

 

while和do…while

这个部分也与java相同,我们通过两个简单案例来看一下

    var i = 0

    while(i<10){

      println(i)

      i+=1//scala中没有++ --

    }



    var j = 0

    do{

      println(j)

      j+=1

    }while(j<10)

回顾上一节

学习下一节

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值