尚硅谷_韓順平_Scala核心編程_第02章_變量_第1頁(yè)
尚硅谷_韓順平_Scala核心編程_第02章_變量_第2頁(yè)
尚硅谷_韓順平_Scala核心編程_第02章_變量_第3頁(yè)
尚硅谷_韓順平_Scala核心編程_第02章_變量_第4頁(yè)
尚硅谷_韓順平_Scala核心編程_第02章_變量_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、尚硅谷研究院,Scala核心編程-變量講師:韓順平,為什么需要變量,一個(gè)程序就是一個(gè)世界,在scala中一切都是對(duì)象,變量是程序的基本組成單位,不論是使用哪種高級(jí)程序語(yǔ)言編寫程序,變量都是其程序的基本組成單位,比如: package com.atguigu.chapter02 object ScalaFunDemo01 def main(args: ArrayString): Unit = var a : Int = 1 /定義一個(gè)整型變量,取名a,并賦初值1 var b : Int = 3 /定義一個(gè)整型變量,取名b,并賦初值3 b = 89 /給變量b 賦 89 println(a= +

2、a) /輸出語(yǔ)句,把變量a的值輸出 println(b= + b) /把變量b的值輸出 ,變量的介紹,概念 變量相當(dāng)于內(nèi)存中一個(gè)數(shù)據(jù)存儲(chǔ)空間的表示,你可以把變量看做是一個(gè)房間的門 牌號(hào),通過(guò)門牌號(hào)我們可以找到房間,而通過(guò)變量名可以訪問(wèn)到變量(值)。 變量使用的基本步驟 聲明/定義變量 (scala要求變量聲明時(shí)初始化) 使用,變量基本使用,Scala變量使用案例入門 看演示并對(duì)代碼進(jìn)行說(shuō)明,Scala變量使用說(shuō)明,變量聲明基本語(yǔ)法 var | val 變量名 : 變量類型 = 變量值 注意事項(xiàng) 聲明變量時(shí),類型可以省略(編譯器自動(dòng)推導(dǎo),即類型推導(dǎo)) 類型確定后,就不能修改,說(shuō)明Scala 是強(qiáng)

3、數(shù)據(jù)類型語(yǔ)言. 在聲明/定義一個(gè)變量時(shí),可以使用var 或者 val 來(lái)修飾, var 修飾的變量可改變,val 修飾的變量不可改 案例. val修飾的變量在編譯后,等同于加上final, 通過(guò)反編譯看下底層代碼。,Scala變量使用說(shuō)明,注意事項(xiàng) var 修飾的對(duì)象引用可以改變,val 修飾的則不可改變,但對(duì)象的狀態(tài)(值)卻是可以改變的。(比如: 自定義對(duì)象、數(shù)組、集合等等) 分析val好處 變量聲明時(shí),需要初始值。,class Dog var age = 100 ,程序中 +號(hào)的使用,當(dāng)左右兩邊都是數(shù)值型時(shí),則做加法運(yùn)算 當(dāng)左右兩邊有一方為字符串,則做拼接運(yùn)算,數(shù)據(jù)類型,scala數(shù)據(jù)類型

4、介紹 Scala 與 Java有著相同的數(shù)據(jù)類型,在Scala中數(shù)據(jù)類型都是對(duì)象,也就是說(shuō)scala沒(méi)有java中的原生類型 Scala數(shù)據(jù)類型分為兩大類 AnyVal(值類型) 和 AnyRef(引用類型), 注意:不管是AnyVal還是AnyRef 都是對(duì)象。案例演示 Int , Char 相對(duì)于java的類型系統(tǒng),scala要復(fù)雜些!也正是這復(fù)雜多變的類型系統(tǒng)才讓面向?qū)ο缶幊毯秃瘮?shù)式編程完美的融合在了一起,var num1 : Int = 10 println(num1 + num1) var char1 : Char = a println(char1的code= + char1.to

5、Int),數(shù)據(jù)類型,scala數(shù)據(jù)類型體系一覽 圖 小結(jié) xx yy,數(shù)據(jù)類型 scala數(shù)據(jù)類型列表,整數(shù)類型,基本介紹 Scala的整數(shù)類型就是用于存放整數(shù)值的,比如 12 , 30, 3456等等 整型的類型 案例演示:,整數(shù)類型,整型的使用細(xì)節(jié) Scala各整數(shù)類型有固定的表數(shù)范圍和字段長(zhǎng)度,不受具體OS的影響,以保證Scala程序的可移植性。 Scala的整型 常量/字面量 默認(rèn)為 Int 型,聲明Long型 常量/字面量 須后加l或L 反編譯看 Scala程序中變量常聲明為Int型,除非不足以表示大數(shù),才使用Long,var c = 11 / c 就是Int類型 println(c

6、= + c) var d = 12l / d 就是 Long 類型 或者 var d = 12L println(d= + d) var e = 9223372036854775807 / 正確嗎? 如何解決,浮點(diǎn)類型,基本介紹 Scala的浮點(diǎn)類型可以表示一個(gè)小數(shù),比如 123.4f,7.8 ,0.12等等 浮點(diǎn)型的分類,浮點(diǎn)類型,浮點(diǎn)型使用細(xì)節(jié) 與整數(shù)類型類似,Scala 浮點(diǎn)類型也有固定的表數(shù)范圍和字段長(zhǎng)度,不受具體OS的影響。 Scala的浮點(diǎn)型常量默認(rèn)為Double型,聲明Float型常量,須后加f或F。 浮點(diǎn)型常量有兩種表示形式 十進(jìn)制數(shù)形式:如:5.12 512.0f .512

7、(必須有小數(shù)點(diǎn)) 科學(xué)計(jì)數(shù)法形式:如:5.12e2 = 5.12乘以10的2次方 5.12E-2 = 5.12除以10的2次方 4) 通常情況下,應(yīng)該使用Double型,因?yàn)樗菷loat型更精確(小數(shù)點(diǎn)后大致7位) /測(cè)試數(shù)據(jù) :2.2345678912f , 2.2345678912,var f1 : Float = 1.1 / double-float 錯(cuò)誤var f2 = 1.2 / ok 類型推斷var f3 : Double = 1.3 / okvar f4 : Float = 1.4f / okvar f5 : Double = 1.5f / float-double , ok,

8、字符類型(Char),基本介紹 字符類型可以表示單個(gè)字符,字符類型是Char, 16位無(wú)符號(hào)Unicode字符(2個(gè)字節(jié)), 區(qū)間值為 U+0000 到 U+FFFF 案例演示:,字符類型(Char),字符類型使用細(xì)節(jié) 1) 字符常量是用單引號(hào)( )括起來(lái)的單個(gè)字符。例如:var c1 = a var c2 = 中 var c3 = 9 2) Scala 也允許使用轉(zhuǎn)義字符來(lái)將其后的字符轉(zhuǎn)變?yōu)樘厥庾址统A?。例如:var c3 = n / n表示換行符 3)可以直接給Char賦一個(gè)整數(shù),然后輸出時(shí),會(huì)按照對(duì)應(yīng)的unicode 字符輸出 u0061 97 4) Char類型是可以進(jìn)行運(yùn)算的,相當(dāng)

9、于一個(gè)整數(shù),因?yàn)樗紝?duì)應(yīng)有Unicode碼.,問(wèn)題: var c2 : Char = a + 1 正確嗎? 修改: var c2 : Int = a + 1 ok,字符類型(Char),字符類型本質(zhì)探討 字符型 存儲(chǔ)到 計(jì)算機(jī)中,需要將字符對(duì)應(yīng)的碼值(整數(shù))找出來(lái)存儲(chǔ):字符碼值二進(jìn)制存儲(chǔ)讀?。憾M(jìn)制碼值 字符讀取 字符和碼值的對(duì)應(yīng)關(guān)系是通過(guò)字符編碼表決定的(是規(guī)定好), 這一點(diǎn)和Java一樣。,布爾類型:Boolean,基本介紹 布爾類型也叫Boolean類型,Booolean類型數(shù)據(jù)只允許取值true和false boolean類型占1個(gè)字節(jié)。 boolean 類型適于邏輯運(yùn)算,一般用于程序

10、流程控制后面詳解: if條件控制語(yǔ)句; while循環(huán)控制語(yǔ)句; do-while循環(huán)控制語(yǔ)句; for循環(huán)控制語(yǔ)句 案例演示:,Unit類型、Null類型和Nothing類型,基本說(shuō)明,Unit類型、Null類型和Nothing類型,使用細(xì)節(jié)和注意事項(xiàng) Null類只有一個(gè)實(shí)例對(duì)象,null,類似于Java中的null引用。null可以賦值給任意引用類型(AnyRef),但是不能賦值給值類型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short) Unit類型用來(lái)標(biāo)識(shí)過(guò)程,也就是沒(méi)有明確返回值的函數(shù)。由此可見(jiàn),Unit類

11、似于Java里的void。Unit只有一個(gè)實(shí)例,(),這個(gè)實(shí)例也沒(méi)有實(shí)質(zhì)的意義 Nothing,可以作為沒(méi)有正常返回值的方法的返回類型,非常直觀的告訴你這個(gè)方法不會(huì)正常返回,而且由于Nothing是其他任意類型的子類,他還能跟要求返回值的方法兼容。,值類型轉(zhuǎn)換,值類型隱式轉(zhuǎn)換 介紹 當(dāng)Scala程序在進(jìn)行賦值或者運(yùn)算時(shí),精度小的類型自動(dòng)轉(zhuǎn)換為精度大的數(shù)據(jù)類型,這個(gè)就是自動(dòng)類型轉(zhuǎn)換(隱式轉(zhuǎn)換)。 數(shù)據(jù)類型按精度(容量)大小排序?yàn)?值類型轉(zhuǎn)換,值類型隱式轉(zhuǎn)換 案例演示 演示一下基本數(shù)據(jù)類型轉(zhuǎn)換的基本情況。 自動(dòng)類型轉(zhuǎn)換細(xì)節(jié)說(shuō)明 有多種類型的數(shù)據(jù)混合運(yùn)算時(shí),系統(tǒng)首先自動(dòng)將所有數(shù)據(jù)轉(zhuǎn)換成容量最大的那種

12、數(shù)據(jù)類型,然后再進(jìn)行計(jì)算。 5.6 + 10 = double 當(dāng)我們把精度(容量)大 的數(shù)據(jù)類型賦值給精度(容量)小 的數(shù)據(jù)類型時(shí),就會(huì)報(bào)錯(cuò),反之就會(huì)進(jìn)行自動(dòng)類型轉(zhuǎn)換。 (byte, short) 和 char之間不會(huì)相互自動(dòng)轉(zhuǎn)換。 byte,short,char 他們?nèi)呖梢杂?jì)算,在計(jì)算時(shí)首先轉(zhuǎn)換為int類型。 自動(dòng)提升原則: 表達(dá)式結(jié)果的類型自動(dòng)提升為 操作數(shù)中最大的類型,值類型轉(zhuǎn)換,高級(jí)隱式轉(zhuǎn)換和隱式函數(shù) scala還提供了非常強(qiáng)大的隱式轉(zhuǎn)換機(jī)制(隱式函數(shù),隱式類等等),我們放在高級(jí)部分專門用一個(gè)章節(jié)來(lái)講解,值類型轉(zhuǎn)換,強(qiáng)制類型轉(zhuǎn)換 介紹 自動(dòng)類型轉(zhuǎn)換的逆過(guò)程,將容量大的數(shù)據(jù)類型轉(zhuǎn)換為

13、容量小的數(shù)據(jù)類型。使用時(shí)要加上強(qiáng)制轉(zhuǎn)函數(shù),但可能造成精度降低或溢出,格外要注意。 案例演示 java : int num = (int)2.5 scala : var num : Int = 2.7.toInt /對(duì)象,值類型轉(zhuǎn)換,強(qiáng)制類型轉(zhuǎn)換 強(qiáng)制類型轉(zhuǎn)換細(xì)節(jié)說(shuō)明 當(dāng)進(jìn)行數(shù)據(jù)的 從 大小,就需要使用到強(qiáng)制轉(zhuǎn)換 強(qiáng)轉(zhuǎn)符號(hào)只針對(duì)于最近的操作數(shù)有效,往往會(huì)使用小括號(hào)提升優(yōu)先級(jí) Char類型可以保存 Int的常量值,但不能保存Int的變量值,需要強(qiáng)轉(zhuǎn) Byte和Short類型在進(jìn)行運(yùn)算時(shí),當(dāng)做Int類型處理。,val num1: Int = 10 * 3.5.toInt + 6 * 1.5.toIn

14、t / 36val num2: Int = (10 * 3.5 + 6 * 1.5).toInt / 44println(num1 + + num2),值類型轉(zhuǎn)換-課堂練習(xí)題,判斷是否能夠通過(guò)編譯,并說(shuō)明原因 1)var s : Short = 5 / ok s = s-2 / error Int - Short 2) var b : Byte = 3 / ok b = b + 4 / error Int -Byte b = (b+4).toByte / ok ,使用強(qiáng)制轉(zhuǎn)換 3)var c : Char = a /ok var i : Int = 5 /ok var d : Float =

15、.314F /ok var result : Double = c+i+d /ok Float-Double 4) var b : Byte = 5 / ok var s : Short = 3 /ok var t : Short = s + b / error Int-Short var t2 = s + b / ok, 使用類型推導(dǎo),值類型和String類型的轉(zhuǎn)換,介紹 在程序開(kāi)發(fā)中,我們經(jīng)常需要將基本數(shù)據(jù)類型轉(zhuǎn)成String 類型。 或者將String類型轉(zhuǎn)成基本數(shù)據(jù)類型。 基本類型轉(zhuǎn)String類型 語(yǔ)法: 將基本類型的值+ 即可 案例演示: String類型轉(zhuǎn)基本數(shù)據(jù)類型 語(yǔ)法:通過(guò)

16、基本類型的String的 toXxx方法即可 案例演示: MFC,12 s1.toInt s1.toFloat s1.toDouble s1.toByte s1.toLong s1.toShort,值類型和String類型的轉(zhuǎn)換,注意事項(xiàng) 在將String 類型轉(zhuǎn)成 基本數(shù)據(jù)類型時(shí),要確保String類型能夠轉(zhuǎn)成有效的數(shù)據(jù),比如 我們可以把 123 , 轉(zhuǎn)成一個(gè)整數(shù),但是不能把 hello 轉(zhuǎn)成一個(gè)整數(shù) 思考就是要把 12.5 轉(zhuǎn)成 Int /?,標(biāo)識(shí)符的命名規(guī)范,標(biāo)識(shí)符概念 Scala 對(duì)各種變量、方法、函數(shù)等命名時(shí)使用的字符序列稱為標(biāo)識(shí)符 凡是自己可以起名字的地方都叫標(biāo)識(shí)符 標(biāo)識(shí)符的命名規(guī)

17、則(記住) Scala中的標(biāo)識(shí)符聲明,基本和Java是一致的,但是細(xì)節(jié)上會(huì)有所變化。 首字符為字母,后續(xù)字符任意字母和數(shù)字,美元符號(hào),可后接下劃線_ 數(shù)字不可以開(kāi)頭。 首字符為操作符(比如+ - * / ),后續(xù)字符也需跟操作符 ,至少一個(gè)(反編譯) 操作符(比如+-*/)不能在標(biāo)識(shí)符中間和最后. 用反引號(hào).包括的任意字符串,即使是關(guān)鍵字(39個(gè))也可以 true,標(biāo)識(shí)符的命名規(guī)范,標(biāo)識(shí)符舉例說(shuō)明 hello / ok hello12 / ok 1hello / error h-b / error x h / error h_4 / ok _ab / ok Int / ok, 在scala中,Int 不是關(guān)鍵字,而是預(yù)定義標(biāo)識(shí)符,可以用,但是不推薦 Float / ok _ / 不可以,因?yàn)樵趕cala中,_ 有很多其他的作用,因此不能使用 Abc / ok +*- / ok +a / error,標(biāo)識(shí)符的命名規(guī)范,標(biāo)識(shí)符命名注意事項(xiàng) 包名:盡量采取有意義的包名,簡(jiǎn)短,有意義 變量名、函數(shù)名 、方法名 采用駝峰法。,Scala關(guān)鍵字,關(guān)鍵字介紹 Scala有39個(gè)關(guān)鍵字

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論