Scale编程基础(二)-- 基础语法

目录

4.Scala基础

4.1 声明变量

4.2 常用类型

4.3 条件表达式

4.4 块表达式

4.5 循环

4.6 调用方法和函数

4.7 定义方法和函数

4.7.1 定义方法

4.7.2 定义函数

4.7.3 方法和函数的区别

4.7.4 将方法转换成函数(神奇的下划线)


4.Scala基础

4.1 声明变量

package cn.itcast.scala

object VariableDemo {

    def main(args: Array[String]) {

        //使用val定义的变量值是不可变的,相当于java里用final修饰的变量
        val i = 1

        //使用var定义的变量是可变得,在Scala中鼓励使用val
        var s = "hello"

        //Scala编译器会自动推断变量的类型,必要的时候可以指定类型
        //变量名在前,类型在后
        val str: String = "itcast"

    }

}

4.2 常用类型

4.2.1 7种数值类型

Scala和Java一样,有7种数值类型Byte、Char、Short、Int、Long、Float、Double类型和1个Boolean类型。

4.2.2 关于Any、AnyVal、AnyRef的说明

Any在scala中,Any类是所有类的超类

Any有两个子类:AnyVal和AnyRef

AnyVal

  • AnyVal 所有值类型的基类, 它描述的是值,而不是代表一个对象。

  • 它包括 9个AnyVal 子类型:

    • scala.Double

    • scala.Float

    • scala.Long

    • scala.Int

    • scala.Char

    • scala.Short

    • scala.Byte

上面是数字类型。

还包括scala.Unit 和 scala.Boolean 是非数字类型。

Unit相当于java中void,表示没有返回值,它在scala中有一个实例对象-------> ()

AnyRef

  • 是所有引用类型的基类。除了值类型,所有类型都继承自AnyRef 。

4.3 条件表达式

Scala的条件表达式比较简洁,定义变量时加上if else判断条件。例如:

package cn.itcast.scala

object ConditionDemo {
  def main(args: Array[String]) {
    val x = 1
    //判断x的值,将结果赋给y
    val y = if (x > 0) 1 else -1
    //打印y的值
    println(y) //y:Int = 1
    

    //支持混合类型表达式
    val z = if (x > 1) 1 else "error"
    //打印z的值
    println(z) //Any = error

    //如果缺失else,相当于if (x > 2) 1 else ()
    val m = if (x > 2) 1
    println(m) //AnyVal = {}

    //在scala中每个表达式都有值,scala中有个Unit类,用作不返回任何结果的方法的结果类型,
    //相当于Java中的void,Unit只有一个实例值,写成()。
    val n = if (x > 2) 1 else ()
    println(n) //AnyVal = {}

    //if和else if
    val k = if (x < 0) 0
    else if (x >= 1) 1 else -1
    println(k) //k:Int = 1
  }
}

4.4 块表达式

定义变量时用 {} 包含一系列表达式,其中块的最后一个表达式的值就是块的值。

package cn.itcast.scala

object BlockExpressionDemo {
    def main(args: Array[String]) {
        val a = 10
        val b = 20
        //在scala中{}中包含一系列表达式,块中最后一个表达式的值就是块的值
        //下面就是一个块表达式
        val result = {
            val c=b-a
            val d=b-c
            d   //块中最后一个表达式的值
        }
        //result的值就是块表达式的结果
        println(result)
    }
}

4.5 循环

在scala中有for循环和while循环,用for循环比较多

for循环语法结构:for (i <- 表达式/数组/集合)

while循环语法结构:while (返回值类型是boolean)

package cn.itcast.scala
object ForDemo {
  def main(args: Array[String]) {
    //for(i <- 表达式),表达式1 to 10返回一个Range(区间)
    //每次循环将区间中的一个值赋给i
    for (i <- 1 to 10)
      println(i)

    //for(i <- 数组)
    val arr = Array("a", "b", "c")
    for (i <- arr)
      println(i)

    //高级for循环
    //每个生成器都可以带一个条件,注意:if前面没有分号
    for(i <- 1 to 3; j <- 1 to 3 if i != j)
      print((10 * i + j) + " ")
    println()

    //for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合
    //每次迭代生成集合中的一个值
    val v = for (i <- 1 to 10) yield i * 10
    println(v)
    
    //while循环和java一致
    while(a>0){
        println(a)
        a=a-1
    }

    //使用while打印list
    while(!list.isEmpty){
	println(list.head)
	list=list.tail
    }

  }

}

4.6 调用方法和函数

Scala中的+ - * / %等操作符的作用与Java一样,位操作符 & | ^ >> <<也一样。只是有一点特别的:这些操作符实际上是方法

例如 a + b 是如下方法调用的简写:

a.+(b)

a 方法 b可以写成 a.方法(b)

 

4.7 定义方法和函数

4.7.1 定义方法

方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型

 

4.7.2 定义函数

4.7.3 方法和函数的区别

在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递和操作,函数是一个对象,继承自FuctionN

函数对象有applycurriedtoStringtupled这些方法。而方法不具有这些特性。

如果想把方法转换成一个函数,可以用方法名跟上下划线的方式

 

案例:首先定义一个方法,再定义一个函数,然后将函数传递到方法里面

package cn.itcast.scala

object MethodAndFunctionDemo {
  //定义一个方法
  //方法m2参数要求是一个函数,函数的参数必须是两个Int类型
  //返回值类型也是Int类型
  def m1(f: (Int, Int) => Int) : Int = {
    f(2, 6)
  }

  //定义一个函数f1,参数是两个Int类型,返回值是一个Int类型
  val f1 = (x: Int, y: Int) => x + y
  //再定义一个函数f2
  val f2 = (m: Int, n: Int) => m * n

  //main方法
  def main(args: Array[String]) {

    //调用m1方法,并传入f1函数
    val r1 = m1(f1)
    println(r1)

    //调用m1方法,并传入f2函数
    val r2 = m1(f2)
    println(r2)
  }
}

 

4.7.4 将方法转换成函数(神奇的下划线)

将方法转换成函数,只需要在方法的后面加上一个下划线

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值