加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala 语言学习之语言基础(2)

发布时间:2020-12-16 09:45:39 所属栏目:安全 来源:网络整理
导读:注: --------scala?中的任何数据都是对象 ????? ?? --------Scala?可以对数据类型进行自动推导,所以定义变量时可省去数据类型 ==?数据类型 ? ? ? ? --? 数值类型 ???????????? --- Byte????????8位 ? ? ???? ???? --- Short????????16?位 --- Int?????????

注: --------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

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

? ? ?????????????demo(3+4,255);">????????????????计算过程:

????????????????????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 = <lazy>

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

????????????????? a

????????????????? String = "hello"


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

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

try{
????val?words?=?scala.io.Source.fromFile("d:demoa.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,4)

//?最大值
demoArray.max

//?最小值
demoArray.min
//?求和
demoArray.sum
//?定义一个变长数组
demoArrayBuffer?=?ArrayBuffer(5,3,7,9,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,?3)
val?tu2?=?new?Tuple2("hello",?"world")

访问元组中的元素

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

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

tu1.productIterator.foreach(println)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读