一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

scala小例子

 gearss 2017-01-14

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

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


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

  1. public class MyTest {   
  2.   
  3.     private int id;   
  4.        
  5.     private int index;   
  6.        
  7.     public MyTest(int id, int index) {   
  8.         this.id = id;   
  9.         this.index = index;   
  10.     }   
  11. }  
public class MyTest {

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


而在Scala中,可以這么寫

  1. class MyTest(id: Int, index: Int)  
class MyTest(id: Int, index: Int)


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

  1. object HelloWorld {   
  2.   
  3.   def main(args: Array[String]): Unit = {   
  4.     var i = 0  
  5.     while(i < args.length) {   
  6.       println(args(i))   
  7.       i += 1  
  8.     }   
  9.   }   
  10.   
  11. }  
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ù)式的編程是什么樣的

  1. object HelloWorld {   
  2.   
  3.   def main(args: Array[String]): Unit = {   
  4.     args.foreach(arg => print(arg + " "))   
  5.   }   
  6.   
  7. }  
object HelloWorld {

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

}


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

體驗(yàn)了最初的簡(jiǎn)單函數(shù)式風(fēng)格,我們?cè)倏聪耂cala中如何使用數(shù)組,在Java中,使用一個(gè)最簡(jiǎn)單數(shù)組是這樣的

  1. public class ArrayTest {   
  2.   
  3.     public static void main(String[] args) {   
  4.         String[] strs = new String[]{"Hello", "World", "!"};   
  5.         for(String str : strs) {   
  6.             System.out.println(str);   
  7.         }   
  8.     }   
  9. }  
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í)例化對(duì)象,實(shí)例化過程中,可以用值和類型使對(duì)象參數(shù)化,使用值參數(shù)化實(shí)例可以通過把值傳遞給構(gòu)造器的圓括號(hào)來實(shí)現(xiàn),比如,Scala中數(shù)組是這么實(shí)現(xiàn)的,值得一提的是,在Scala中,數(shù)組是可變數(shù)據(jù)結(jié)構(gòu),這是和Java中有區(qū)別的地方

  1. object ArrayTest {   
  2.   
  3.   def main(args: Array[String]): Unit = {   
  4.     var greetString = new Array[String](3)   
  5.     greetString(0) = "Hello"  
  6.     greetString(1) = "World"  
  7.     greetString(2) = "!"  
  8.        
  9.     for(i <- 0 to 2) {   
  10.       println(greetString(i))   
  11.     }   
  12.   }   
  13.   
  14. }  
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 <- 這個(gè)表達(dá)式是表示左邊的涵蓋在右邊范圍之內(nèi)。
下面我們來看看List,在Java中,List是可變的結(jié)構(gòu)序列,而在Scala中,List是不可變的,在Scala中,List是不可變的數(shù)據(jù)結(jié)構(gòu),這么設(shè)計(jì)是為了函數(shù)式編程而設(shè)計(jì)的,奇特的是,Scala中并不需要通過new來創(chuàng)建List對(duì)象,比如下面一個(gè)例子,我創(chuàng)建了兩個(gè)集合,并且把它們循環(huán)打印出來。

  1. def main(args: Array[String]): Unit = {    
  2.     var list1 = List("aaa", "bbb", "ccc")   
  3.     var list2 = List("ddd")   
  4.     var list3 = list1 ::: list2   
  5.     list3.foreach(list => print(list + " "))   
  6.   }  
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

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

  1. object SetTest {   
  2.   
  3.   def main(args: Array[String]): Unit = {   
  4.     var set = HashSet("b", 3, "c")   
  5.     set += "very"  
  6.     set.foreach(value => print(value + " "))   
  7.   }   
  8.   
  9. }  
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的

Java代碼  

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就可以了。同時(shí)Eclipse也內(nèi)置了對(duì)Scala的支持,安裝插件的網(wǎng)址是http://download./nightly-update-wip-experiment-2.9.0.final
大家可以自行安裝,安裝完后就可以在Eclipse中運(yùn)行了,如下圖


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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    久久91精品国产亚洲| 欧美精品一区久久精品| 蜜桃av人妻精品一区二区三区| 91日韩在线视频观看| 日本高清中文精品在线不卡| 日本在线 一区 二区| 国产成人一区二区三区久久| 亚洲中文字幕在线观看黑人| 好吊日在线视频免费观看| 狠狠亚洲丁香综合久久| 在线免费国产一区二区三区| 国产又大又硬又粗又湿| 欧美一级片日韩一级片| 日韩欧美国产三级在线观看| 日韩精品视频香蕉视频| 亚洲精品福利入口在线| 99久久精品久久免费| 欧美三级精品在线观看| 日韩欧美一区二区亚洲| 人妻一区二区三区多毛女| 亚洲国产精品一区二区毛片| 日韩人妻免费视频一专区| 日本不卡在线视频你懂的| 亚洲欧美国产精品一区二区| 国产日韩精品激情在线观看| 国产女同精品一区二区| 99久热只有精品视频最新| 亚洲欧美日本国产不卡| 久久99精品日韩人妻| 在线观看国产午夜福利| 亚洲国产中文字幕在线观看| 日韩中文字幕欧美亚洲| 91福利免费一区二区三区| 亚洲精品蜜桃在线观看| 亚洲第一区欧美日韩在线| 国产精品不卡一区二区三区四区 | 中文字幕亚洲人妻在线视频| 亚洲中文字幕三区四区| 亚洲欧美国产网爆精品| 黄色激情视频中文字幕| 欧美老太太性生活大片|