?因?yàn)閟cala也是基于jvm上運(yùn)行的,所以能跑java,原則上就能跑scala 1、國(guó)際慣例,先來(lái)個(gè)hello world走走 package demo1 //object之下全為靜態(tài),scala沒(méi)有static這玩意 object HelloWorld { //def 函數(shù)定義 args參數(shù) 后面接冒號(hào)然后是參數(shù)類型java反著來(lái)的,如果是java,那么就是String args[] //最后main() 之后接 : 然后是這個(gè)函數(shù)反饋的類型 Unit代表沒(méi)有反饋類型 def main(args : Array[String]) : Unit = { //進(jìn)去之后,該怎么樣就怎么樣。。。。 //還有scala可以不用寫(xiě)分號(hào)哦,真是為國(guó)家省布料。。。。 println("hello world") } } ? ? ? 2.好,然后我們簡(jiǎn)單寫(xiě)幾個(gè)程序,標(biāo)識(shí)scala的基礎(chǔ)入門(mén)吧 ?文件操作 ? package demo1 import java.io.File import scala.io.Source object FileDemo2 { def widthOfLength(s : String) = s.length.toString.length def fileLines(file : File) = Source.fromFile(file).getLines().toList //靜態(tài)變量 val filesHere = new File("./src/demo1").listFiles() def grep(pattern : String) = //這里用()或者 {}都可以 for { //遍歷所有文件 file <- filesHere if file.getName.endsWith(".scala"); //遍歷這個(gè)文件的所有行 line <- fileLines(file) if line.trim.matches(pattern) } { println(file " : " line.trim) } def main(args: Array[String]): Unit = { if(args.length > 0) { val lines = Source.fromFile(args(0)).getLines().toList val longestLine = lines.reduceLeft((a, b) => if (a.length > b.length) a else b) val maxWidth = widthOfLength(longestLine) for(line <- lines) { val numSpace = maxWidth - widthOfLength(line) val padding = " " * numSpace println(padding line.length " | " line) } } else { Console.err.println("Please enter filename") } grep(".*main.*") } } 這個(gè)功能用java實(shí)現(xiàn),沒(méi)個(gè)幾百行估計(jì)搞不定。。。 光是文件輸入輸出的io操作代碼,什么File = new File 什么InputStream,什么ReaderBuffer一堆的估計(jì)就要寫(xiě)個(gè)十幾行 然后這里scala比較驚喜的是循環(huán),特別是for循環(huán),那是真的比較強(qiáng)大了 ? ?3.最后我們來(lái)看看for這個(gè)循環(huán)再scala中的應(yīng)用為啥那么強(qiáng)大吧,特別是yield的使用,真是很方便了,直接避免了我們java中再for循環(huán),或者while循環(huán)等等需要保存對(duì)象的時(shí)候的list.add操作,這里直接準(zhǔn)備好丟給你,就看你要不要 要的話加個(gè)yield,不要就不加,很方便 package demo2 class FileDemo2 { def makeRowSeq(row : Int) = for(col <- 1 to 10) yield { val prod = (row * col).toString val padding = " " * (4 - prod.length) padding prod } def makeRow(row : Int) = makeRowSeq(row).mkString def multiTable() = { val tableSeq = for(row <- 1 to 10) yield { makeRow(row) } tableSeq.mkString("\n") } } object FileDemo2 extends App { implicit def add(x : Int) = 2 * 2 for(season <- List("fall", "winter", "spring")) { println(season ": ") } var a = 'asdasda val a1 = "asdasda" println(a " ,nameis:" a.name s", value is:$a1 -> $a") println(2) val fileDemo2 = new FileDemo2 val listDemo2 = fileDemo2.multiTable() println(listDemo2) } ? ? ? ? ?好啦,今天的學(xué)習(xí)就到這了,目前來(lái)看scala很像java的簡(jiǎn)化版本,畢竟是后java出來(lái)的,有些簡(jiǎn)化很正常,目前還沒(méi)發(fā)現(xiàn)scala的獨(dú)到的地方 當(dāng)然除了它寫(xiě)代碼確實(shí)很簡(jiǎn)潔,java幾百行,這個(gè)用scala可能就十幾行,或者幾十行,代碼量至少縮小一倍吧 ? 后續(xù)學(xué)習(xí),我們接著來(lái)挖掘scala吧 ? 來(lái)源:http://www./content-4-234401.html |
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》