課件代碼1內(nèi)存計算scala編程_第1頁
課件代碼1內(nèi)存計算scala編程_第2頁
課件代碼1內(nèi)存計算scala編程_第3頁
課件代碼1內(nèi)存計算scala編程_第4頁
課件代碼1內(nèi)存計算scala編程_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、北京傳智播客教育 快學(xué)快學(xué)ScalaScala北京傳智播客教育 主要內(nèi)容l基礎(chǔ)l面向?qū)ο髄泛型l隱式轉(zhuǎn)換l高階函數(shù)lActor和Akka 主頁: Object-Oriented Meets FunctionalObject-Oriented Meets FunctionalScala基礎(chǔ) lScala是一門以Java虛擬機(jī)為目標(biāo)運(yùn)行環(huán)境并將面向?qū)ο蠛秃瘮?shù)式編程語言的最佳特性結(jié)合在一起的編程語言l使用Scala可編寫出更加精簡優(yōu)雅的程序lScala的并發(fā)非常強(qiáng)大lScala可以訪問任何Java類庫聲明變量lval:聲明不可變的變量lvar:聲明可變的變量l推薦使用vallval content:

2、 String = hello worldlval x, y = 100l變量聲明時可以不指定類型,編譯器可以自動推斷出來方法la 方法 b 等價于a.方法(b)lval a,b = 10la + b 等價于a.+(b)l1 to 10 等價于 1.to(10)if判斷val a = if (x 0) 1 else -1/混合類型val b = if (x 0) 1 else error/()表示“無有用值”val c = if (x 0) 1 else ()for循環(huán)for (i - 0 to 5) println(i)for (i - 0 until 10) println(i)for (

3、i - 1 to 3; j - 1 to 3 if i != j) println(10*i+j) + )for (i - 1 to 10 if i % 2 = 0) yield ifor (i - 1 to 10) yield i % 3函數(shù)def fun(x: Int) : Int = x+1/注意:參數(shù)類型必須聲明,返回值類型可以不聲明,函數(shù)是遞歸的必須聲明返回類型def fac(n: Int) : Int = if(n =0) 1 else n * fac(n-1)函數(shù)/函數(shù)默認(rèn)參數(shù)def fun(a: Int, b: Int = 100) = a + b/可變參數(shù)def sum(ar

4、gs: Int*) = var result = 0for (i x + 1/將匿名函數(shù)賦給變量val fun = (x: Int) = x + 1懶值/變量定義時即被取值val words = Source.fromFile(c:/words.txt).mkString/變量被首次使用時取值lazy val words = Source.fromFile(c:/words.txt).mkString/每一次調(diào)用該方法時都取值def words = Source.fromFile(c:/words.txt).mkString定長數(shù)組/3個整數(shù)的數(shù)據(jù),所有元素為0val arr1 = new A

5、rrayInt(3)val arr2 = Array(0, 0, 0)val arr3 = Array(hadoop, spark)/取值、賦值val str = arr3(1)arr3(1) = storm變長數(shù)組ArrayBuffer類似Java中的ArrayListval a = ArrayBufferInt() 或val a = new ArrayBufferInta +=1 /在尾端添加元素a +=(1,2,3) /追加多個元素a += ArrayBuffer(7,8,9) /追加集合變長數(shù)組a.trimEnd(2) /移除最好兩個元素a.insert(2, 6, 7) /在下標(biāo)2之

6、前插入6,7a.remove(2, 2) /從下標(biāo)2開始移除2個元素val b = a.toArray /轉(zhuǎn)變成定長數(shù)據(jù)組b.toBuffer /轉(zhuǎn)變成變長數(shù)據(jù)組遍歷數(shù)組和數(shù)組緩沖val arr = Array(1,2,3,4,5)/帶下標(biāo)的for循環(huán)for (i - (0 until (arr.length, 2).reverse) println(arr(i)/增強(qiáng)for循環(huán)for (i - arr) println(i)數(shù)組轉(zhuǎn)換轉(zhuǎn)換動作不會修改原始數(shù)組,而是產(chǎn)生一個全新的數(shù)組val arr = Array(1,2,3,4,5,6,7,8,9,10)for(e - arr) yield e

7、 /生成一個與arr一樣的for(e _)val d = arr.count(_2)映射val map = Map(a-1, b-2, c-3)或 val map = Map(a,1), (b,2), (c,3)/取值、賦值map(a)map.getOrElse(d, 0)map(b) = 22映射map += (e-8, f-9)map -= (f)/迭代for(k,v) - map)/交換k,vfor(k,v) JHashMap隱式導(dǎo)入:和Java程序一樣java.lang總是被默認(rèn)引入,scala也默認(rèn)引入模式匹配和樣例類Scala有一個非常強(qiáng)大的模式匹配機(jī)制,可以應(yīng)用到很多場合:如sw

8、itch、類型查詢,并可以結(jié)合樣例類完成高級功能繼承重新方法:重新一個非抽象的方法必須使用override修飾符o.isInstanceOfCl /java中的instanceofo.asInstacneOfCl /java中的 (Cl) oclassOfCl /java中的Cl.class樣例類樣例類是一種特殊的類,可用于模式匹配樣例對象是單例的,也可以用于模式匹配高階函數(shù)def fun(f: Double = Double) = f(100)fun(x : Double) = 2 * x)fun(sqrt _)高階函數(shù)val fun: Int = (Int, Int) = x = (x,

9、x*2)fun(100)val fun: (Int,Double) = (Double, Int) = (x,y) = (y, x)柯里化將原來接受兩個參數(shù)的函數(shù)編程接受一個參數(shù)的函數(shù)的過程。def fun(x: Int)(y: Int) = x * yfun(6)(7) fun(6) / (y: Int) = 6 * yfun(7) / 42泛型T : LowerBoundT % ViewBoundT : ContextBound+T-T視圖界定T % M關(guān)系意味著T可以被隱式轉(zhuǎn)換成MTT % ComparableT上下文界定T : M 要求必須存在一個類型為MT的隱式值隱式轉(zhuǎn)換和隱式參數(shù)隱式轉(zhuǎn)換和隱式參數(shù)是Scala中兩個功能強(qiáng)大的工具,利用隱式轉(zhuǎn)換可以豐富現(xiàn)有類的功能,從而寫出非常優(yōu)雅的程序。隱式轉(zhuǎn)換利用隱式轉(zhuǎn)換豐富類庫功能val contents = new File(c:/words.txt).read引入隱式轉(zhuǎn)換l位于源或目標(biāo)類型的伴生對象中的隱式函

溫馨提示

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

評論

0/150

提交評論