国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

scala小例子

Original 2017-01-11 13:51:18 626
abstract:用Java語言開發(fā)許久了,一直接觸指令式的語言開發(fā),同時也做的多了,也逐漸感覺到了靜態(tài)語言的一些弊病。Scala的出現(xiàn),可以使Java程序員平滑的過度,Scala語言也是運(yùn)行在JVM上的,可以與Java無縫交互;Scala是面向?qū)ο蟮?,可以通過提升接口的抽象級別來幫助管理復(fù)雜性。Scala是簡潔的,Scala程序員曾報告說,與Java比起來,它的代碼行數(shù)可以減少到Java的1/10,哈哈,是不是有

用Java語言開發(fā)許久了,一直接觸指令式的語言開發(fā),同時也做的多了,也逐漸感覺到了靜態(tài)語言的一些弊病。Scala的出現(xiàn),可以使Java程序員平滑的過度,Scala語言也是運(yùn)行在JVM上的,可以與Java無縫交互;Scala是面向?qū)ο蟮?,可以通過提升接口的抽象級別來幫助管理復(fù)雜性。Scala是簡潔的,Scala程序員曾報告說,與Java比起來,它的代碼行數(shù)可以減少到Java的1/10,哈哈,是不是有些夸張呢?個人覺得,如果能減少三分之一,就非常成功了;Scala是靜態(tài)的,它以Java的內(nèi)嵌類型系統(tǒng)為基礎(chǔ),允許使用泛型參數(shù)化類型,用交集組合型類型和抽象類型隱藏實現(xiàn)細(xì)節(jié),從而能夠設(shè)計出安全而又能靈活使用的接口。 

    我們先來安裝Scala的開發(fā)包,我的版本是scala-2.9.0.1.zip,安裝方式解壓就可以,環(huán)境變量和Jdk的沒什么區(qū)別,指向到bin目錄下就可以了,打開dos窗口,運(yùn)行scala,出現(xiàn)下面結(jié)結(jié)果就表示安裝成功了 

639cd917-83dc-3643-8bd7-e4aafca87330.jpg

好了,讓我們開始Scala之旅吧。 
    在Scala中,分號是可選的,你可以寫或者不寫;定義類和構(gòu)造函數(shù),Java中一般這么寫

public class MyTest {     
    private int id;          
    private int index;   
       
    public MyTest(int id, int index) {   
        this.id = id;   
        this.index = index;   
    }   
}
public class MyTest {private int id;private int index;public MyTest(int id, int index) {this.id = id;this.index = index;}}

而在Scala中,可以這么寫

class MyTest(id: Int, index: Int)  

class MyTest(id: Int, index: Int)


除了這些特性,尤其值得一提的是Scala是靜態(tài)類型的語言,它支持指令式的編程,但更推薦的使用函數(shù)式的編程。比如下面的代碼

object HelloWorld {     
  def main(args: Array[String]): Unit = {   
    var i = 0  
    while(i < args.length) {   
      println(args(i))   
      i += 1  
    }   
  }   
  
}  
object HelloWorld {  def main(args: Array[String]): Unit = {    var i = 0    while(i < args.length) {      println(args(i))      i += 1    }  }}


我可以使用scalac HelloWorld.scala使他生成class字節(jié)碼,也可以直接在JVM上執(zhí)行, 
scala HelloWorld.scala Hello World 
打印結(jié)果將是 Hello World 
大家不覺得這樣有一丁點(diǎn)兒復(fù)雜嗎,來看看Scala的函數(shù)式的編程是什么樣的

object HelloWorld {     
  def main(args: Array[String]): Unit = {   
    args.foreach(arg => print(arg + " "))   
  }   
  
}  
object HelloWorld {  def main(args: Array[String]): Unit = {    args.foreach(arg => print(arg + " "))  }}


arg就是你臨時定義的變量,Scala默認(rèn)為其開辟了臨時的String變量arg。 

體驗了最初的簡單函數(shù)式風(fēng)格,我們再看下Scala中如何使用數(shù)組,在Java中,使用一個最簡單數(shù)組是這樣的

public class ArrayTest {     
    public static void main(String[] args) {   
        String[] strs = new String[]{"Hello", "World", "!"};   
        for(String str : strs) {   
            System.out.println(str);   
        }   
    }   
}  
public class ArrayTest {public static void main(String[] args) {String[] strs = new String[]{"Hello", "World", "!"};for(String str : strs) {System.out.println(str);}}}


在Scala中,同樣是通過new來實例化對象,實例化過程中,可以用值和類型使對象參數(shù)化,使用值參數(shù)化實例可以通過把值傳遞給構(gòu)造器的圓括號來實現(xiàn),比如,Scala中數(shù)組是這么實現(xiàn)的,值得一提的是,在Scala中,數(shù)組是可變數(shù)據(jù)結(jié)構(gòu),這是和Java中有區(qū)別的地方

object ArrayTest {   
  
  def main(args: Array[String]): Unit = {   
    var greetString = new Array[String](3)   
    greetString(0) = "Hello"  
    greetString(1) = "World"  
    greetString(2) = "!"  
       
    for(i <- 0 to 2) {   
      println(greetString(i))   
    }   
  }   
  
}

object ArrayTest {

 def main(args: Array[String]): Unit = {
   var greetString = new Array[String](3)
   greetString(0) = "Hello"
   greetString(1) = "World"
   greetString(2) = "!"
   
   for(i <- 0 to 2) {
     println(greetString(i))
   }
 }

}



i <- 這個表達(dá)式是表示左邊的涵蓋在右邊范圍之內(nèi)。 
下面我們來看看List,在Java中,List是可變的結(jié)構(gòu)序列,而在Scala中,List是不可變的,在Scala中,List是不可變的數(shù)據(jù)結(jié)構(gòu),這么設(shè)計是為了函數(shù)式編程而設(shè)計的,奇特的是,Scala中并不需要通過new來創(chuàng)建List對象,比如下面一個例子,我創(chuàng)建了兩個集合,并且把它們循環(huán)打印出來。

def main(args: Array[String]): Unit = {    
    var list1 = List("aaa", "bbb", "ccc")   
    var list2 = List("ddd")   
    var list3 = list1 ::: list2   
    list3.foreach(list => print(list + " "))   
  }  
def main(args: Array[String]): Unit = {     var list1 = List("aaa", "bbb", "ccc")    var list2 = List("ddd")    var list3 = list1 ::: list2    list3.foreach(list => print(list + " "))  }


打出的結(jié)果就是 aaa bbb ccc ddd 

我們再來看看Set和Map,Scala致力于充分利用函數(shù)式和指令式兩方面的好處,所以它的集合庫區(qū)分為可變型和不可變型,都承接與Set,他們分別在Scala的不同包里。在Java中,我們稱為“實現(xiàn)”了接口,而在Scala中,我們稱為“擴(kuò)展”或“混入”,下面我分別用Scala中的HashSet和HashMap的不可變數(shù)據(jù)類型,來做例子

object SetTest {     
  def main(args: Array[String]): Unit = {   
    var set = HashSet("b", 3, "c")   
    set += "very"  
    set.foreach(value => print(value + " "))   
  }   
  
}  
object SetTest {  def main(args: Array[String]): Unit = {    var set = HashSet("b", 3, "c")    set += "very"    set.foreach(value => print(value + " "))  }}



這是Set的,下面是關(guān)于Map的

object MapTest {     
  def main(args: Array[String]): Unit = {    
    var map = HashMap(1 -> "a", 2 -> "b", 3 -> "c")   
    map += (4 -> "d")   
    map.foreach(value => print(value + " "))   
  }   
}  
object MapTest {  def main(args: Array[String]): Unit = {     var map = HashMap(1 -> "a", 2 -> "b", 3 -> "c")    map += (4 -> "d")    map.foreach(value => print(value + " "))  }}


Scala的程序,只要后綴名命名為.scala就可以了。同時Eclipse也內(nèi)置了對Scala的支持,安裝插件的網(wǎng)址是http://download.scala-ide.org/nightly-UPDATE-wip-experiment-2.9.0.final 
大家可以自行安裝,安裝完后就可以在Eclipse中運(yùn)行了,如下圖 
 

現(xiàn)在對函數(shù)式編程有個了最初體會了,呵呵,以后還會繼續(xù)探討關(guān)于Scala函數(shù)式編程帶來的一些好處,大家相互學(xué)習(xí),還請多多指教。


Release Notes

Popular Entries