自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

十二步學(xué)會(huì)Scala(2):Scala的循環(huán)和數(shù)組

開發(fā) 后端
本文是《十二步學(xué)會(huì)Scala》的第二篇,介紹了如何運(yùn)行Scala腳本,Scala的循環(huán)和判斷,以及很重要的數(shù)組的定義、賦值與讀取。

AlanWu在上一篇《十二步學(xué)會(huì)Scala(1)》中介紹了Scala的變量定義和方法定義,這一篇將進(jìn)行第五到第八步,介紹循環(huán)和數(shù)組。

原文地址:AlanWu的博客 | 51CTO編輯推薦:Scala編程語(yǔ)言專題

第五步:運(yùn)行腳本

Scala是一個(gè)動(dòng)態(tài)性很強(qiáng)的語(yǔ)言,所以它也像Ruby那樣,能夠?qū)懩_本運(yùn)行。

新建一個(gè)hello.scala的文本文件:

  1. println("Hello, world, from a script!"

打開命令行,并到達(dá)hello.scala所在的目錄:

  1. D:\>scala hello.scala  
  2. Hello, world, from a script!  
  3.  
  4. D:\>  

可以看到很簡(jiǎn)單,就運(yùn)行了這個(gè)腳本。

第六步: 循環(huán)用while, 判斷用if

Scala中使用while和java差不多。

寫個(gè)把輸入的參數(shù)字符逐個(gè)打印出來(lái)的小腳本,printargs.scala

  1. var i = 0 
  2. while (i < args.length) {  
  3. println(args(i))  
  4. i += 1 

這段腳本會(huì)把傳入的參數(shù)逐個(gè)打印出來(lái)。

while循環(huán)體外定義一個(gè)可變的變量i,在循環(huán)體內(nèi)每次加一,直到傳入的參數(shù)全部打印完畢。

cmd

  1. D:\>scala printargs.scala Scala is fun  
  2. Scala  
  3. is  
  4. fun  
  5.  
  6. D:\>  

注意,Scala中不能用i++或++i

if在***篇的max方法中演示過(guò)了,不再重復(fù)。

第七步:用foreach和for進(jìn)行迭代

上面介紹了用while做循環(huán),用過(guò)ruby或者喜歡java5新特性的人可能會(huì)說(shuō),hey,做個(gè)循環(huán)怎么這么丑?

ruby,java5有foreach,Scala當(dāng)然也有!

接著上面的需求,用foreach實(shí)現(xiàn)把傳入的參數(shù)打印出來(lái)。

建個(gè)文本文件,叫pa.scala,里面寫上

  1. args.foreach(arg => println(arg)) 

運(yùn)行pa.scala你會(huì)看到

cmd

  1. D:\>scala pa.scala Scala is easy  
  2. Scala  
  3. is  
  4. easy  
  5.  
  6. D:\>  

arg是迭代變量,不需要手工賦值,編譯器會(huì)把傳遞給它。同時(shí)編譯器會(huì)認(rèn)出arg的類型,所以這里不需要定義類型。

但我覺(jué)得如果類型不是一目了然的情況下,***是定義一下類型,可以使閱讀代碼的人很輕松。

把a(bǔ)rg定義上類型

pa.scala

  1. args.foreach((arg: String) => println(arg)) 

注意當(dāng)給變量定義類型的時(shí)候,必須要加括號(hào)!

這里傳給foreach的實(shí)際上就是一個(gè)匿名方法!

匿名方法的定義是這樣的:

匿名方法的定義 

方法參數(shù) => 方法體

我們這個(gè)傳入的匿名方法就是: (arg: String) => println(arg)

很懶的程序員會(huì)發(fā)現(xiàn),這里arg好像沒(méi)什么必要,唯一參數(shù)傳給唯一的方法體。在java這樣的想法可能是空幻想,但Scala幫你實(shí)現(xiàn)了!

我們可以省略成:

pa.scala

  1. args.foreach(println) 

就這么少!

Scala還有一個(gè)for迭代,可以做更多的事情,但這里只介紹一下它的簡(jiǎn)單用法。

在ruby中實(shí)現(xiàn)上面的打印參數(shù):

  1. for arg in ARGV # Remember, this is Ruby, not Scala  
  2. puts arg  
  3. end 

用Scala的for來(lái)實(shí)現(xiàn)

  1. for (arg <- args)  
  2. println(arg) 

感覺(jué)怎么樣?這里左箭頭<-可以讀成in。

在Scala,如果一句話是一行,可以省略分號(hào);如果多個(gè)語(yǔ)句放在一行,用分號(hào)隔開。

第八步: 數(shù)組

數(shù)組是定義數(shù)據(jù)類型很重要很基礎(chǔ)的容器。在Scala里如何使用數(shù)組呢?這次我們的參數(shù)由程序定義,并把他們打印出來(lái)。

建個(gè)文本文件,叫paramswithvalues.scala

  1. val greetStrings = new Array[String](3)  
  2.  
  3. greetStrings(0) = "Hello" 
  4. greetStrings(1) = ", " 
  5. greetStrings(2) = "world!\n" 
  6.  
  7. for (i <- 0 to 2)  
  8. print(greetStrings(i))  

這里出現(xiàn)了很多Scala的新式武器!

1. 定義數(shù)組類型

Scala代碼

  1. val greetStrings = new Array[String](3)   

val已經(jīng)介紹過(guò)了,表示greetStrings不能再被賦值。

這里Array[String]表示類型,可以讀成字符串的數(shù)組,它是一個(gè)類型,也就是類,所以可以用new去實(shí)例化。

括號(hào)3表示數(shù)組容量是3

2. 數(shù)組元素賦值

Scala代碼

  1. greetStrings(0) = "Hello"  

雖然greetStrings是不可更改的,但數(shù)字元素可以。

Scala用小括號(hào)代替java的中括號(hào),可能很多java工程師會(huì)說(shuō):呵,發(fā)明新輪子。

其實(shí)Scala是被冤枉的。

Scala里所以東西都是對(duì)象,數(shù)組也不例外。數(shù)組賦值其實(shí)也是一個(gè)方法完成的。

上面的代碼會(huì)被編譯器轉(zhuǎn)換成兩個(gè)參數(shù)的方法:

Scala代碼

  1. greetStrings.update(0"Hello")   

當(dāng)然你也直接這樣寫上面的賦值:

Scala代碼

  1. greetStrings.update(0"Hello")    
  2. greetStrings.update(1", ")    
  3. greetStrings.update(2"world!\n")   

3. 數(shù)組元素讀取

在for循環(huán)體里面有

Scala代碼

  1. print(greetStrings(i))   

為什么Scala不用中括號(hào)呢?是因?yàn)镾cala有一套通用規(guī)則,會(huì)把小括號(hào)轉(zhuǎn)換成apply。

所以編譯器會(huì)得到這樣的代碼:

Scala代碼

  1. print(greetStrings.apply(i))   

很魔術(shù)?其實(shí)只要知道Scala的一些通用規(guī)則,很多符號(hào)就變得非常簡(jiǎn)單易懂了。

如果不使用符號(hào),我們的代碼同樣可以完成:

Scala代碼

  1. val greetStrings = new Array[String](3)    
  2.     
  3. greetStrings.update(0"Hello")    
  4. greetStrings.update(1", ")    
  5. greetStrings.update(2"world!\n")    
  6.     
  7. for (i <- 0.to(2))    
  8.   print(greetStrings.apply(i))   

這里for循環(huán)用了0 to 2,很容易理解,就是從0到2,默認(rèn)步進(jìn)1.

當(dāng)方法參數(shù)只有一個(gè)的時(shí)候,可以不寫括號(hào)和點(diǎn),

所以***循環(huán)是這樣寫就夠了:

Scala代碼

  1. for (i <- 0 to 2)   

to是0的一個(gè)方法,

Scala代碼

  1. for (i <- 0.to(2))    

數(shù)組就基本介紹到這里。接下來(lái)一篇將介紹集合類。

【編輯推薦】

  1. 十二步學(xué)會(huì)Scala(1):從下載安裝到定義方法
  2. Scala講座:面向?qū)ο蠛秃瘮?shù)式的特點(diǎn)總結(jié)
  3. 萬(wàn)物皆對(duì)象:介紹Scala對(duì)象
  4. Scala的泛型:最強(qiáng)大的特性
  5. Scala的Trait:可以包含代碼的接口
責(zé)任編輯:yangsai 來(lái)源: JavaEye博客
相關(guān)推薦

2009-09-28 09:55:46

Scala快速入門

2009-08-13 10:35:05

Scala數(shù)組排序

2023-06-12 15:33:52

Scalafor循環(huán)語(yǔ)句

2010-09-14 15:34:41

Scala

2009-07-08 12:43:59

Scala ServlScala語(yǔ)言

2020-10-31 17:33:18

Scala語(yǔ)言函數(shù)

2009-11-16 17:04:46

Inside Scal

2009-08-21 16:17:25

ScalaTwitter API

2009-07-08 17:40:28

ScalaScala腳本

2009-07-21 14:03:00

Scalaif表達(dá)式while循環(huán)

2009-09-28 11:01:39

從Java走進(jìn)Scal

2009-06-16 17:54:38

Scala類語(yǔ)法語(yǔ)義

2009-12-09 09:15:47

從Java走進(jìn)ScalTwitter API

2009-07-09 00:25:00

Scala參數(shù)化

2009-02-04 17:32:03

ibmdwJavaScala

2009-07-21 16:58:31

Scala變量范圍

2009-07-22 07:42:00

Scala偏應(yīng)用函數(shù)

2009-09-09 10:50:55

Scala例子Scala與Java

2009-06-17 11:44:22

Scala控制結(jié)構(gòu)

2009-09-28 10:38:57

Scala教程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)