多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > scala初學12步

scala初學12步

來源:程序員人生   發布時間:2015-06-01 08:57:43 閱讀次數:2568次
第1步:下載和安裝Scala
官網下載并接緊縮,像安裝ANT或MAVEN之類的那樣,把解壓后的bin路徑加到path里面去就能夠了。
在命令行模式下輸入Scala
cmd 寫道
C:Documents and Settings19002850>scala  
Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.6.0_13)  
.  
Type in expressions to have them evaluated.  
Type :help for more information.  
 
scala>  
 
如果你看到scala提示符,那末恭喜你,說明Scala安裝成功了。
第2步:學習使用Scala解釋器(interpreter)
Scala也算是解釋性語言,所以你可以直接與解釋器交互。
cmd 寫道
scala> 1 + 3 
res0: Int = 4 
 
scala>  
 
直接輸入 1 + 3 ,返回res0: Int = 4
res0表示變量名, Int表示類型, 4是值。
Scala的類型定義在冒號后面,和java放在前面不同,和UML類圖的屬性定義方式1樣。
Scala是強類型語言,必須要定義類型,但Scala編譯器足夠聰明,他能夠根據你的值幫你定義變量的類型。
這里res0是個變量名,所以你可以接下來再使用。
cmd 寫道
scala> res0 * 3 
res1: Int = 12 
 
scala>  
 
解釋器又給了1個變量res1。
Scala的所有變量都是對象,所有操作都是方法。
所以*也是方法,你可以這樣調用:
cmd 寫道
scala> res0.*(res1)  
res2: Int = 48 
 
scala>  
 
這個和java很不同,java的int不是對象。
是否是有點繞進去了,那末來個hello world宣布第2步結束。
cmd 寫道
scala> println("Hello World!")  
Hello World!  
 
scala>  
 
這個println是個方法,由于Scala有預定義導入1些類,所以可以直接使用。
由于Scala更新很快,每一個版本的Scala的解釋器可能都有1些不同,所以如果返回的變量名或有其他有1點不1樣,請不要太奇怪。
第3步: 定義變量
寫程序最入門就是定義變量和方法,前面的變量由Scala解釋器自動定義了,這1步自己定義變量。
Scala有兩種類型的變量,val 和var 。 val 變量的值只能初始化1次,再次賦值就產生毛病,var就和java的變量相同,可以隨時修改。
val 是函數式編程的風格,變量1旦賦值就不要再做修改,從程序上將有很多好處,但有時候做起來會比較繞。
cmd 寫道
scala> val msg = "Hello World!" 
msg: java.lang.String = Hello World!  
 
scala> msg = "Hello JavaEye" 
:5: error: reassignment to val  
msg = "Hello JavaEye" 
^  
 
scala>  
 
Scala是強類型語言,每一個變量都需要類型。但如果你賦給變量的有足夠明細的類型提示,那末編譯器會幫你把類型加上去。
把剛才的msg打印出來
cmd 寫道
scala> println(msg)  
Hello World!  
 
scala>  
 
再來看看var ,比較好理解。
cmd 寫道
scala> var greeting: String = "Hello World!" 
greeting: String = Hello World!  
 
scala> println(greeting)  
Hello World!  
 
scala> greeting = "Hello World!" 
greeting: String = Hello World!  
 
scala> println(greeting)  
Hello World!  
 
scala>  
 
記住,Scala有兩種變量標識,和java不1樣。
第4步: 定義1些方法
之前程序就是變量和方法組成吧,所以變量和方法是最基礎的東西。
我們定義1個取最大值的方法max
cmd 寫道
scala> def max(x: Int, y: Int): Int = if(x < y) y else x  
max: (Int,Int)Int  
 
定義變量用val和var,定義方法用def 。
這個max方法有方法參數,返回值類型,方法體。麻雀雖小,5臟俱全了。
Scala的變量表示是變量名: 類型 ,這1點和java乃至其他語言都很不同,和UML風格比較接近。
調用方法很簡單:
cmd 寫道
scala> max(3,8)  
res9: Int = 8 
 
Scala中方法也是1個類型,或說是1個值,成為First Class。
所以可以把max看成是個變量名,(Int,Int)Int是它的類型。他可以作為參數傳遞,也能夠賦值給其他變量。
cmd 寫道
scala> val m = max _  
m: (Int, Int) => Int =   
將max賦值給m, 請注意max后面帶的下劃線,不要忘記寫了。調用m
cmd 寫道
scala> m(1,3)  
res11: Int = 3 
 
scala>  
 
在初學的時候就講這個好像有點急進了,不太容易理解,不過沒關系,先了解1下總比看到后稀里糊涂好。
第5步:運行腳本
Scala是1個動態性很強的語言,所以它也像Ruby那樣,能夠寫腳本運行。
新建1個hello.scala的文本文件:
println("Hello, world, from a script!"
打開命令行,并到達hello.scala所在的目錄:
D:>scala hello.scala  
Hello, world, from a script!  
 
D:>  
可以看到很簡單,就運行了這個腳本。
第6步: 循環用while, 判斷用if
Scala中使用while和java差不多。
寫個把輸入的參數字符逐一打印出來的小腳本,printargs.scala
var i = 0 
while (i < args.length) {  
println(args(i))  
i += 1 

這段腳本會把傳入的參數逐一打印出來。
while循環體外定義1個可變的變量i,在循環體內每次加1,直到傳入的參數全部打印終了。
cmd
D:>scala printargs.scala Scala is fun  
Scala  
is  
fun  
 
D:>  
注意,Scala中不能用i++或++i
if在第1篇的max方法中演示過了,不再重復。
第7步:用foreach和for進行迭代
上面介紹了用while做循環,用過ruby或喜歡java5新特性的人可能會說,hey,做個循環怎樣這么丑?
ruby,java5有foreach,Scala固然也有!
接著上面的需求,用foreach實現把傳入的參數打印出來。
建個文本文件,叫pa.scala,里面寫上
args.foreach(arg => println(arg)) 
運行pa.scala你會看到
cmd
D:>scala pa.scala Scala is easy  
Scala  
is  
easy  
 
D:>  
arg是迭代變量,不需要手工賦值,編譯器會把傳遞給它。同時編譯器會認出arg的類型,所以這里不需要定義類型。
但我覺得如果類型不是1目了然的情況下,最好是定義1下類型,可使瀏覽代碼的人很輕松。
把arg定義上類型
pa.scala
args.foreach((arg: String) => println(arg)) 
注意當給變量定義類型的時候,必須要加括號!
這里傳給foreach的實際上就是1個匿名方法!
匿名方法的定義是這樣的:
 
方法參數 => 方法體
我們這個傳入的匿名方法就是: (arg: String) => println(arg)
很懶的程序員會發現,這里arg好像沒甚么必要,唯1參數傳給唯1的方法體。在java這樣的想法多是虛幻想,但Scala幫你實現了!
我們可以省略成:
pa.scala
args.foreach(println) 
就這么少!
Scala還有1個for迭代,可以做更多的事情,但這里只介紹1下它的簡單用法。
在ruby中實現上面的打印參數:
for arg in ARGV # Remember, this is Ruby, not Scala  
puts arg  
end 
用Scala的for來實現
for (arg <- args)  
println(arg) 
感覺怎樣樣?這里左箭頭<-可以讀成in。
在Scala,如果1句話是1行,可以省略分號;如果多個語句放在1行,用分號隔開。
第8步: 數組
數組是定義數據類型很重要很基礎的容器。在Scala里如何使用數組呢?這次我們的參數由程序定義,并把他們打印出來。
建個文本文件,叫paramswithvalues.scala
val greetStrings = new Array[String](3)  
 
greetStrings(0) = "Hello" 
greetStrings(1) = ", " 
greetStrings(2) = "world! " 
 
for (i <- 0 to 2)  
print(greetStrings(i))  
這里出現了很多Scala的新式武器!
1. 定義數組類型
Scala代碼
val greetStrings = new Array[String](3)   
val已介紹過了,表示greetStrings不能再被賦值。
這里Array[String]表示類型,可以讀成字符串的數組,它是1個類型,也就是類,所以可以用new去實例化。
括號3表示數組容量是3
2. 數組元素賦值
Scala代碼
greetStrings(0) = "Hello"  
雖然greetStrings是不可更改的,但數字元素可以。
Scala用小括號代替java的中括號,可能很多java工程師會說:呵,發明新輪子。
其實Scala是被冤枉的。
Scala里所以東西都是對象,數組也不例外。數組賦值其實也是1個方法完成的。
上面的代碼會被編譯器轉換成兩個參數的方法:
Scala代碼
greetStrings.update(0"Hello")   
固然你也直接這樣寫上面的賦值:
Scala代碼
greetStrings.update(0"Hello")    
greetStrings.update(1", ")    
greetStrings.update(2"world! ")   
3. 數組元素讀取
在for循環體里面有
Scala代碼
print(greetStrings(i))   
為何Scala不用中括號呢?是由于Scala有1套通用規則,會把小括號轉換成apply。
所以編譯器會得到這樣的代碼:
Scala代碼
print(greetStrings.apply(i))   
很魔術?其實只要知道Scala的1些通用規則,很多符號就變得非常簡單易懂了。
如果不使用符號,我們的代碼一樣可以完成:
Scala代碼
val greetStrings = new Array[String](3)    
    
greetStrings.update(0"Hello")    
greetStrings.update(1", ")    
greetStrings.update(2"world! ")    
    
for (i <- 0.to(2))    
  print(greetStrings.apply(i))   
這里for循環用了0 to 2,很容易理解,就是從0到2,默許步進1.
當方法參數只有1個的時候,可以不寫括號和點,
所以第1循環是這樣寫就夠了:
Scala代碼
for (i <- 0 to 2)   
to是0的1個方法,
Scala代碼
for (i <- 0.to(2))    
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 黄色网址免费在线 | 麻豆va一区二区三区久久浪 | 国产亚洲一区二区在线观看 | 中文字幕乱码视频 | 精品欧美一区二区三区四区 | 456亚洲人成影视在线观看 | 日韩 国产 欧美视频一区二区三区 | 福利视频一区 | 国产精品入口麻豆免费 | 亚洲国产综合视频 | 国产精品久久1024 | 亚洲欧美视频在线 | 欧美激情视频一区二区三区 | 日本校园春色 | 国产精品免费视频一区一 | 日韩精品国产一区 | 亚洲天堂国产精品 | 日韩免费福利视频 | 国产欧美精品国产国产专区 | 国产成人精品一区二区三区 | 欧美videosfree性喷潮 | 野外xxxxfreexxxx自己 | 今天免费中文字幕视频 | 免费观看无遮挡www的小视频 | 大香交伊人 | 天天天天鲁天天拍一拍 | 7777精品久久久大香线蕉 | 日本在线一区 | 亚洲欧美成人 | 亚洲国产精品a一区二区三区 | 免费黄色福利 | 国产视频一二三区 | 日本高清专区一区二无线 | 一区二区三区在线看 | 日本成人在线免费 | 在线免费观看中文字幕 | 97理伦 | 最近新中文字幕大全高清视频 | 一级毛片一 | 国产精品久久久久久一区二区三区 | 日本欧美一区二区三区视频 |