筆記軟件01 scala編程基礎(chǔ)_第1頁
筆記軟件01 scala編程基礎(chǔ)_第2頁
筆記軟件01 scala編程基礎(chǔ)_第3頁
筆記軟件01 scala編程基礎(chǔ)_第4頁
筆記軟件01 scala編程基礎(chǔ)_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Scala課程目 目標(biāo)1:(初級)熟練使用scala編寫Spark程 目標(biāo)2:(中級)動(dòng)手編寫一個(gè)簡易Spark通信框 目標(biāo)3:(高級)為閱讀Spark內(nèi)核源碼做準(zhǔn) Scala概 什么是 Scala編譯器安 安裝 安裝 Windows安裝Scala編譯 Linux安裝Scala編譯 Scala開發(fā)工具安 Scala基 4.1.變 循 數(shù) 映 元 集 序 構(gòu)造 對 apply方 繼 擴(kuò)展 樣例 Option類 偏函 1:(初級)scalaSparkScalaScala是一種多范式的編程語言,其設(shè)計(jì)的初衷是要集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。Scala運(yùn)行于Java平臺(Java虛擬機(jī)),并兼容現(xiàn)有的Java程序。優(yōu)雅:這是框架設(shè)計(jì)師第一個(gè)要考慮的問題,框架的用戶是應(yīng)用開發(fā)程序員,API是否優(yōu)速度快:ScalaJava多行,開發(fā)速度快;Scala是靜態(tài)編JRuby,Groovy比起來速度會快很多。Hadoop生態(tài)圈:Hadoop現(xiàn)在是大數(shù)據(jù)事實(shí)標(biāo)準(zhǔn),SparkHadoop,Hadoop生態(tài)。JVMJavaJavaAPI太丑,或APIScalaScalaJVMScalaWindowsScalaScala官網(wǎng) 但是目前大多數(shù)的框架都是用2.10.x編寫開發(fā)的,所以這里推薦2.10.x版本,scala-2.10.6.msi后點(diǎn)擊下一步就可以了LinuxScalaScala地址/scala/2.10.6/scala-2.10.6.tgz然后解壓Scala到tar-zxvfscala-2.10.6.tgz-CviexportScala如果使用Eclipse,直接到Scala官網(wǎng)即可。由于IDEA的Scala插件更優(yōu)秀,大多數(shù)Scala程序員都選擇IDEA,可以到 果有網(wǎng)絡(luò)可以選擇安裝Scala插件。這里我們使用離線安裝Scala插件:IDEASkipAllandSetIEDA的scala插件,地址/?idea_ceScalaConfigurePluginsInstallpluginfromdisk->ScalaOK->重IDEAScalapackagepackage*CreatedbyZXonobjectVariableDemodefmain(args:Array[String])vali=vars= valstr:String= }}ScalaJava7Byte、Char、Short、Int、Long、FloatDouble(無包裝類型)Boolean類型Scalapackagepackage*CreatedbyZXonobjectobjectConditionDemodefmain(args:Array[String]){valx=1valy=if(x>0)1else-valz=if(x>1)1elsevalm=if(x>2)valn=if(x>2)1elsevalk=if(x<0)elseif(x>=1)1else-}}packagepackage*CreatedbyZXonobjectBlockExpressionDemodefdefmain(args:Array[String]){valx=0valresult={if(x<0){-}elseif(x>=1){}else{}}}}scala中有forwhileforforfor(ipackagepackage*CreatedbyZXonobjectForDemodefmain(args:Array[String])for(i<-1tovalarr=Array("a","b","c")for(i<-arr)for(i<-1to3;j<-1to3ifi!=print((10*i+j)+"valv=for(i<-1to10)yieldi*}}Scala中的*Java&|^也一樣。只是有a+aba.方法packagepackage*CreatedbyZXonobjectMethodAndFunctionDemodefm1(f:(Int,Int)=>Int):Int={f(2,6)}valf1=(x:Int,y:Int)=>x+valf2=(m:Int,n:Int)=>m*defmain(args:Array[String])valr1=m1(f1)valr2=m1(f2)}}}packagepackageimport*CreatedbyZXonobjectArrayDemodefmain(args:Array[String])valarr1=newvalarr2=Array[Int](10)valarr3=Array("hadoop","storm", //如果想使用數(shù)組緩沖,需要導(dǎo)入importscala.collection.mutable.ArrayBuffervalab=ab+=ab+=(2,3,4,ab++=Array(6,ab++=ab.insert(0,-1,ab.remove(8,}}foruntil會生成腳標(biāo),0until100packagepackage*CreatedbyZXonobjectForArrayDemodefmain(args:Array[String])valarr=for(i<-for(i<-(0until}}yieldpackagepackage*CreatedbyZXonobjectArrayYieldDemodefmain(args:Array[String])valarr=Array(1,2,3,4,5,6,7,8,valres=for(e<-arrife%2==0)yielde*valr=arr.filter(_%2==0).map(_*}}ScalaScalaScalaMapimmutableMapMap中的內(nèi)容不可變;mutableMapMap中的內(nèi)容可變final那么就意味著該變量的不可變,該中的內(nèi)容是不是可變,取決于這個(gè)指向的集K/VzipScala的集合有三大類:序列Seq、集Set、映射Map,所有的集合都擴(kuò)展自Ible特初始化后就不能改變了(val修飾的變量進(jìn)行區(qū)別)importScala中列表要么為空(Nil表示空列表)headtail9List(5, ::注意:::952Nil952::packagepackageobjectImmutListDemodefmain(args:Array[String])vallst1=0lst1vallst2=0::lst1vallst3=lst1.::(0)vallst4=0+:lst1vallst5=//將一個(gè)元素添加到lst1vallst6=lst1:+vallst0=2個(gè)listvallst7=lst1++lst1lst0vallst8=lst1++:lst0lst1vallst9=}}可變的序列importpackagepackageimportobjectMutListDemoextendsvallst0=vallst1=newlst1+=lst0++=vallst2=lst0++vallst3=lst0:+}packagepackageimportobjectobjectImmutSetDemoextendsApp{valset1=newHashSet[Int]()valset2=set1+valset3=set1++Set(5,6,7)valset0=Set(1,3,4)++set1}packagepackageimportobjectMutSetDemoextendsvalset1=newset1+=set1++=set1-=5}packagepackageimportobjectobjectMutMapDemoextendsvalmap1=newmutable.HashMap[String,map1("spark")=map1+=(("hadoop",map1.put("storm",//從map中移除元素map1-="spark"}Scala的類與Java、C++類 valid=varage:Int=privatevarname:String="private[this]valpet= }classStudent(valname:String,valage:trythrownewIOException("io}catchcasee:NullPointerExceptionprintln(Exceptione)casee:IOException=>println(Exception:"+e)}finally}privatevargender=defthis(name:String,age:Int,gender:this(name,this.gender=gender}}*valvar,valvar*//在類名后面加privateclassQueenprivate(valname:String,prop:Array[String],privatevarage:Int=//prop被下面的方法使用后,prop就變成了不可變得對象私有字段,等同于private[this]val//如果沒有被方法使用該參數(shù)將不被保存為字段,僅僅是一個(gè)可以被主構(gòu)造器中的代 的普通參defdescription=name+"is"+age+"yearsoldwith"+}objectdefmain(args:Array[String])valqnewQueen("hatano"Array("蠟燭""皮鞭"}}Scalaobjectpackagepackage importimport*CreatedbyZXonobjectSingletonDemodefmain(args:Array[String])valsession=SessionFactory.getSession()}}object//該部分相當(dāng)于javavarcounts=valsessions=newArrayBuffer[Session]()while(counts>0){sessions+=newcounts-=}defgetSession():Session}}class}在Scala的類中,與類名相同的對象叫做伴生對象,類和伴生對象之間可以相互私有的packagepackage CreatedbyZXonclassDog{valid=1privatevarname= defprintName():Unit }}objectDogprivatevalCONSTANTdefmain(args:Array[String]){valp=newDog ="123"}}applyapply方法,當(dāng)遇到類名(1,...n)apply方packagepackage*CreatedbyZXonobjectApplyDemodefmain(args:Array[String])valarr1=Array(5)vararr2=new}}ScalamainAppmainpackagepackage*CreatedbyZXonobjectAppObjectDemoextendsprintln("Iloveyou}ScalaJavaextendsScalaoverrideobjinstanceofpackagepackage*CreatedbyZXonobjectClazzDemodefmain(args:Array[String])//valh=new}}traitdeffly():Unitprintln("Ican}deffight():}classAnimaldefrun():Intvalname:String}classclassHumanextendsAnimalwithFlyable{valname="abc"valt1,t2,(a,b,c)={}overridedeffight():String"fightwith棒子"}defrun():Int={}}Scala還提供了樣例類,對模式匹配進(jìn)行了優(yōu)化,可以快速進(jìn)行匹配packagepackageimportobjectCaseDemo01extendsvalarr=Array("YoshizawaAkiho","YuiHatano",valvalname=arr(Random.nextInt(arr.length))namematch{case"YoshizawaAkiho"=>println(" case"YuiHatano"=>println("波多老師...")case_=>println("真不知 }}packagepackageimportobjectCaseDemo01extends//valv=if(x>=5)1elseif(x<2)2.0valarr= o",1,2.0,valv=arr(Random.nextInt(4))vmatchcasex:Int=>println("Int"+casey:Doubleif(y>=0)=>println("Double"+y)casez:String=>println("String"+z)case_=>thrownewException("notmatch}}注意:casey:Doubleif(y0)case_packagepackageobjectCaseDemo03extendsvalarr=Array(1,3,arrarrmatchcaseArray(1,x,y)=>println(x+""+y)caseArray(0)=>println("only0")caseArray(0,_*)=>println("0...")case_=>println("somethingelse")}vallst=List(3,-lstmatchcase0::Nil=>println("onlycasex::y::Nil=>println(s"x:$xy:$y")case0::tail=>println("0...")case_=>println("something}valtup=(2,3,tupmatchcase(1,x,y)=>println(s"1,$x,$y")case(_,z,5)=>println(z)case_=>}}Scala中列表要么為空(Nil表示空列表)headtail9List(5, ::注意:::952Nil952::Scala中樣例類是一中特

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論