Scala 语言学习之语言基础(2)
admin
2023-07-28 05:00:09
0次

注: --------scala 中的任何数据都是对象

        --------Scala 可以对数据类型进行自动推导,所以定义变量时可省去数据类型

==> 数据类型

        --> 数值类型

            --- Byte        8位

            --- Short        16 位

            --- Int            32 位

            --- long            64位

        --> 字符和字符串类型

            --- Char        

            --- String

        --> Unit 类型   相当于 Java 的 void


        --> Nothing 类型    般表示运行过程中出现了 Exception 


==> 定义变量

        --> 格式: var | val   变量名:类型 = 内容

        --> var 定义值可变的变量

var a = "hello"        // var a:String = "hello"
var b = 12345            // var b: Int = 12345

        --> val 定义值不可变的常量

val a = "word"

==> 函数

        --> 格式: def  函数名(变量名:类型 | 变量名:=> 类型): 函数返回值类型  = {}

        --> 函数参数:

            --- call  by  value : def  demo(x:Int, y: Int): Int = x + x        对函数的实参求值

                 demo(3+4, 8)

                计算过程:

                    7 + (3+4)

                    7 + 7

                    14

            --- call  by  name : def  demo(x: => Int, y: => Int): Int = x + x    函数的实参每次在函数体内部被调用的时候都会求值

                 demo(3+4, 8)

                计算过程:

                    7 + 7

                    14

            --- 默认参数: def  func1(name: String = "Tom"): String = "Hello" + name

            --- 代名参数 :  

def func2(str: String="My name", name: String="Marry", age: Int=18): String = {
    str + " is " + name + ", I'm " + age + "啦!" 
}

func2(name="Tom")
func2()


            --- 可变参数 : 求多个数字的和

def sum(args: Int*) = {
    var result = 0
    for(arg <- args)
        result += arg
        result
}

sum(1, 2, 3)


==> 懒值(lazy): 如果一个变量是 lazy , 他的初始化会被推迟,直到第一次使用它的时候才会执行

        --> 正常的变量定义后会直接赋给变量,如:

                var  a =  "hello"

              定义变量后会返回: a : String = "hello"

        --> 使用 lazy 定义变量时,不会执行,只有在第一次执行的时候才会执行赋值操作,如:

               lazy  var  a =  "hello"

               定义变量后返回: a: String =

               只有使用变量时,才会进行赋值操作: 

                  a

                  String = "hello"


==> 异常:  异常的处理机制是什么?   向上处理

        -->采用 try{ …… }catch{ …… }finally{……} 捕获和处理异常

try{
    val words = scala.io.Source.fromFile("d:\\demo\\a.txt").mkString
}catch{
    case ex:java.io.FileNotFoundException => {
        println("File Not Found!!!")
    }
    case ex: IllegalArgumentException => {
        println("Illegal Argument Exception!!!")
    }  
    case _:Exception => {
        println("othe Exception")
    }  
}finally{
    println("finally block")
}

        --> 如果一个函数的返回类型是Nothing, 表示在函数执行过程中产生异常

def func1() = throw new IllegalArgumentException("Some Error Happened")


        --> if  else 语句,如果在一个分支中产生了异常,则另一个分支的返回值,将作为if  else 返回值的类型

val x = 10
if(x >= 0){
    scala.math.sqrt(x)
}else{
    throw new IllegalArgumentException("The value should be not")
}


==> 数组

        --> 定长数组:使用关键字 Array

val a = new Array[Int](10)
val str = new Array[String](5)
val demo_list = Array("Tom", "Marry", "Mike")


        --> 变长数组:使用关键字 ArrayBuffer

val list1 = ArrayBuffer[Int]()

// 向数组中插入元素
list1 += 1
list1 += 5

// 向数组中插入多个元素
list1 += (20, 55, 47)

// 去掉最后三个值
list1.trimEnd(3)

// 将 ArrayBuffer 转换为 Array
list1.toArray


        --> 遍历数组

// 创建数组
var names = Array("Tom","Marry","Linda")
// 使用 for 循环遍历
for(name <- names)
    println(name)

// 使用 foreach 遍历
names.foreach(println)

// 对数组进行转换,生成一个新的数组
val newnames = for{
    name <- names
    new = name.toUpperCase
}yeild(new)

        --> 数组常用操作

import scala.collection.mutable.ArrayBuffer

val demoArray = Array(6,8,4,,5,2,6,5,4)

// 最大值
demoArray.max

// 最小值
demoArray.min
// 求和
demoArray.sum
// 定义一个变长数组
demoArrayBuffer = ArrayBuffer(5,3,5,7,8,7,9,5,74)

// 降序排序
demoArrayBuffer.sortWith(_ > _)
// 升序排序
demoArrayBuffer.sortWith(_ < _)


==> 映射: 一个由 key, value 组成的集合

        --> 使用 -> 符号创建

val demoMap = Map("Tom" -> 11, "Marry" -> 44)


        --> 不可变 Map

val testMap = scala.collection.immutable.Map("Tom" -> 20, "Marry" -> 18)


        --> 可变 Map

val testMap = scala.collection.mutable.Map("Tom" -> 20, "Marry" -> 18)
val testMap1 = scala.collection.mutable.Map(("Tom", 20),("Marry", 18))


        --> 映射操作

// 获取映射中的值,如果不存在,会抛出 Exception
testMap("Tom")

// 可通过 Map.constains 事先判断数据是否存在,然后再取值
if(testMap.contains("Tom")){
    testMap("Tom")
}else{
    -1
}
// 简写
testMap.getOrElse("Tom", -1)

// 更新值
testMap("Tom") = 25

// 添加新元素
testMap += "lily" -> 18

// 移除元素
testMap -= "Tom"

// 迭代,使用 for,或者 foreach
for(m <- testMap)println(m)
testMap.foreach(println)


==> 元组: 不同类型的值的聚集

        --> 创建元组: val  名称+个数 = (元素,元素)

val tu1 = (1, 2, 3)
val tu2 = new Tuple2("hello", "world")

        --> 访问元组中的元素

tu1._1    //点后面跟的是第几个元素
1

        --> 遍历元组,使用foreach 遍历元组,注意,元组遍历前首先需要生成对应的迭代器,不能直接使用for 或者 foreach 进行遍历

tu1.productIterator.foreach(println)



相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...