<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Scala從零起步:運算符

          共 2063字,需瀏覽 5分鐘

           ·

          2021-01-26 12:44


          導讀

          繼續(xù)Scala從零起步系列,在前文分享變量和標識符的基礎(chǔ)上,本文介紹Scala中的運算符。簡單地說,Scala中的運算符和其他編程語言中的運算符并無太大區(qū)別,更多都是相同或者相近的,但是出于系列文章的內(nèi)容完整性,仍然單開此文對其予以介紹。


          如同多數(shù)編程語言中的那樣,Scala中的運算符可概括為:

          • 數(shù)學運算符

          • 關(guān)系運算符

          • 邏輯運算符

          • 位運算符

          • 特殊運算符


          01 數(shù)學運算符

          數(shù)學運算符是最為常規(guī)和常用的運算符,主要包括四則運算以及模余共5類運算,運算符表達方式也與其他編程語言保持一致:分別采取+、-、*、/、%來表示。唯一值得一提的是除法運算中,如果分子分母均為整數(shù),則結(jié)果仍然保留整數(shù),只有當分子和分母中有小數(shù)參與時才得到通常意義下的商。

          scala> 5 / 2val res0: Int = 2
          scala> 1.0 * 5 / 2val res1: Double = 2.5


          02 關(guān)系運算符

          也如同其他編程語言中的關(guān)系運算符那樣,Scala中的關(guān)系運算符主要包括6類:>、>=、<、<=、==、!=。其中大于和小于類的4個運算符屬于常規(guī)運算符,除了可用于比較數(shù)值類大小外,也可用于比較字符串大小。同時需要注意==和!=兩個運算符,判斷兩個對象是否相等的底層邏輯有些許區(qū)別:當調(diào)用運算符的對象為null時,底層調(diào)用eq方法,否則調(diào)用equals方法。這里eq方法和equals方法的區(qū)別在于前者判斷引用是否相等,而后者僅判斷字面值是否相等。

          scala>?"AB"?>?"AA"??//?>也適用于字符串比較val res2: Boolean = true
          scala> val s = "string"val s: String = string
          scala> s == s+"" // s非空,所以調(diào)用equals方法,判斷值相等val res3: Boolean = true
          scala>?s.equals(s+"")??// 判斷值相等val res4: Boolean = true
          scala>?s.eq(s+"")??//判斷引用相等,由于此時s+""對應(yīng)新的地址,所以不等val res5: Boolean = false


          03 邏輯運算符

          Scala中的邏輯運算符基本保持了C和Java中的風格,即分別用&&、||以及!表達與或非。其中與或非具有短路特性,即已經(jīng)可以判斷出最終結(jié)果時則不再判斷后續(xù)表達式。

          scala> val i = 0val i: Int = 0
          scala> if(i!=0 && 3/i>1) "a" else "b" // 避免除數(shù)為0引發(fā)異常val res6: String = b


          04 位運算符

          位運算符是整數(shù)特有的運算操作符,Scala中主要包括6類7個運算符:分別是按位與、按位或、按位異或、按位取反以及左移位符和右移位符,其中前5類運算符依次用&、|、^、~、<<表示,而右移位符因其特殊性,又細分為>>和>>>兩種右移位符,其中前者是保留符號右移,而后者則是無符號右移位,即右移之后順序填充0,所以可能將負數(shù)通過右移變?yōu)檎龜?shù)。

          scala> -1 << 1val?res7:?Int?=?-2
          scala> -1 >> 1val res8: Int = -1
          scala> -1 >>> 1val?res9:?Int?=?2147483647


          05 特殊運算符

          前面4類運算符大多較為中規(guī)中矩,與其他編程語言中的相應(yīng)運算符差別不大,自然也比較好理解。下面介紹Scala中的幾個特殊運算符(嚴格來講也可不稱之為運算符,或許叫做方法更為嚴謹),非常具有Scala特色:

          • :,即英文冒號(一般讀作cons,代表連接的意思),適用于數(shù)組Array和列表List的連接操作。在Scala中,但凡以:結(jié)尾的運算符,那么都是右操作數(shù)的運算符,即應(yīng):右側(cè)的操作數(shù)為基準進行相應(yīng)計算。較為常見的包括4個:即:+、+:、::、:::,其相應(yīng)含義如下:

          scala> val list = List(1, 2)val list: List[Int] = List(1, 2)
          scala>?list?:+?3??//?在列表右端連接新的元素val res10: List[Int] = List(1, 2, 3)
          scala>?3?+:?list?// 在列表左端連接新的元素val res11: List[Int] = List(3, 1, 2)
          scala> 3 :: list // 在列表左端連接新的元素val res12: List[Int] = List(3, 1, 2)
          scala>?list?:::?List(3)??//?兩個列表元素進行拼接val res13: List[Int] = List(1, 2, 3)


          • ->:字典映射運算符,即用于構(gòu)造字典key-value的映射關(guān)系。更進一步地,由于Scala中的字典元素本質(zhì)上是一個二元組,所以由->連接的兩個值也會被解釋器理解為tuple2

          scala> val map = Map("a"->1, "b"->2)val map: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
          scala> 1->2val res14: (Int, Int) = (1,2)


          • <-:迭代賦值運算符,類似于Python中in的作用,一般用于將<-右側(cè)的可迭代對象逐元素賦予左側(cè)的變量,從而完成循環(huán)遍歷,配合for使用尤為好用

          scala> for(i <- List.range(1, 5)) println(i)1234


          • =>,定義函數(shù)映射。主要用在定義函數(shù)過程中,銜接參數(shù)列表與函數(shù)體之間的符號,表示映射關(guān)系。理論上不屬于運算符,但仍在此處加以提及。


          最后,附一張Scala運算符優(yōu)先級:

          相關(guān)閱讀:

          瀏覽 81
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男女成人视频 | 天天操天天肏 | 好色91av天天 | 9.1人成人免费视频网站 | 黄色免费网页 |