scala基础学习

scala部署好以后我们来进行基础学习

val与var

scala> val name:String = "17"
name: String = 17

scala> name = "dashu"
<console>:12: error: reassignment to val
name = "dashu"
^

scala>

报错分析:

 re  重新

assign  分配

ment  名词后缀

意思是val定义的不能重新赋值

scala> var money:Int = 10000
money: Int = 10000

scala> money = 20000
money: Int = 20000

scala>

分析:用var重新赋值就不会报错

总结:在scala要定义一个名称肯定要的东西肯定用val或者var,只有这两种

 简写:

scala> val name = "big tree"
name: String = big tree

scala> var money = 10000
money: Int = 10000

说明:名字后边的数据类型在=后边有值的情况下可以省略,也就是说scala里的数据类型是可以推到的

数据类型:

Byte Char

short

常用:Int Long Float Double Boolean

数据类型的应用

数据太长,Int类型装不下,需要用long类型,在数值以后加一个l就可以判别是long类型了

场景一

scala> val money = 10020202020202020
<console>:1: error: integer number too large
val money = 10020202020202020
^

scala> val money = 10020202020202020l
money: Long = 10020202020202020

scala>

场景二

scala> val b:Float = 1.2
<console>:11: error: type mismatch;   ##提示类型不匹配
found : Double(1.2)    ##找到的是double类型
required: Float          ##需要的是float类型
val b:Float = 1.2       
^

解决,在数值后边加一个f(大小写都可以),即可判定是float类型

scala> val b:Float = 1.2f
b: Float = 1.2

scala>

场景3

scala> val a = 10.asInstanceOf[Double]
a: Double = 10.0

asInstanceOf  把10整数转为10.0double类型

scala> val b = 10.isInstanceOf[Int]
b: Boolean = true

scala> val b = 10.isInstanceOf[Float]
b: Boolean = false

scala>

isInstanceOf   判断数据类型

函数

函数图解

eg:

package FunctionApp   ##包名

object FunctionApp {
  def main(args: Array[String]): Unit = {  //定义的主类
    println(sum(2,5))//函数的调用
    sayhello    //函数的调用
    sayworld("zz")  //函数的调用
  }
//===========================以下是定义函数===========================================
  def sum(x: Int, y: Int): Int = {//定义了一个求和函数,要传入两个参数
    x + y
  }
   def sayhello():Unit ={  //定义了一个函数,不需要传入任何参数
   println("若泽数据欢迎您...")
   }

  def sayworld(name:String):Unit ={//定义了一个函数需要输入一个字符串类型的参数,也就是在输入参数的时候需要加上""
    println("若泽数据欢迎您..."+name)
  }

}

执行结果:

7
若泽数据欢迎您...
若泽数据欢迎您...zz

循环表达式

to的用法

scala> val z = 1 to 10
z: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

分析:

1.左闭右闭[1,10]

2.Range.Inclusive 底层调用,这个Inclusive就相当于左闭右闭

3.因为考虑到底层调用的是Range,那我没若果直接用Range,会怎么呢?如下所示

scala> Range(1,10)
res2: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

Range底层调用的是Range,但是后边没有Inclusive,结果是1-9,也就是左闭右开

scala> 1 until 10
res1: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

分析:until和range是一样的

步长

scala> Range(10,1,-1)
res4: scala.collection.immutable.Range = Range(10, 9, 8, 7, 6, 5, 4, 3, 2)

scala> Range(1,10,3)
res1: scala.collection.immutable.Range = Range(1, 4, 7)

Range的第3个参数就是步长

scala> Range(1,10,0)
java.lang.IllegalArgumentException: step cannot be 0.
at scala.collection.immutable.Range.<init>(Range.scala:86)
at scala.collection.immutable.Range$.apply(Range.scala:439)
... 32 elided

当步长为0时会报错,说不能为零,那这句报错的来源是什么呢?

我们去查看一下Rang.scala,从下边的图片中可以看出,报错内容来自于红色框内的。条件是,当步长等于0时报错。

原文地址:https://www.cnblogs.com/xuziyu/p/10806751.html