精品熟女碰碰人人a久久,多姿,欧美欧美a v日韩中文字幕,日本福利片秋霞国产午夜,欧美成人禁片在线观看

Scala 基礎(chǔ)語(yǔ)法

scala 基礎(chǔ)語(yǔ)法

scala 與 java 的最大區(qū)別是:scala 語(yǔ)句末尾的分號(hào) ; 是可選的。

我們可以認(rèn)為 scala 程序是對(duì)象的集合,通過(guò)調(diào)用彼此的方法來(lái)實(shí)現(xiàn)消息傳遞。接下來(lái)我們來(lái)理解下,類,對(duì)象,方法,范例變量的概念:

  • 對(duì)象 - 對(duì)象有屬性和行為。例如:一只狗的狀屬性有:顏色,名字,行為有:叫、跑、吃等。對(duì)象是一個(gè)類的范例。
  • 類 - 類是對(duì)象的抽象,而對(duì)象是類的具體范例。
  • 方法 - 方法描述的基本的行為,一個(gè)類可以包含多個(gè)方法。
  • 字段 - 每個(gè)對(duì)象都有它唯一的范例變量集合,即字段。對(duì)象的屬性通過(guò)給字段賦值來(lái)創(chuàng)建。

 

1. 第一個(gè) scala 程序

交互式編程

交互式編程不需要?jiǎng)?chuàng)建腳本文件,可以通過(guò)以下命令調(diào)用:

$ scala
welcome to scala version 2.11.7 (java hotspot(tm) 64-bit server vm, java 1.8.0_31).
type in expressions to have them evaluated.
type :help for more information.

scala> 1 + 1
res0: int = 2

scala> println("hello world!")
hello world!

scala> 

 

2. 腳本形式

我們也可以通過(guò)創(chuàng)建一個(gè) helloworld.scala 的文件來(lái)執(zhí)行代碼,helloworld.scala 代碼如下所示:

object helloworld {
   /* 這是我的第一個(gè) scala 程序
    * 以下程序?qū)⑤敵?hello world!' 
    */
   def main(args: array[string]) {
      println("hello, world!") // 輸出 hello world
   }
}

接下來(lái)我們使用 scalac 命令編譯它:

$ scalac helloworld.scala 
$ ls
helloworld$.class????helloworld.scala
helloworld.class????

編譯后我們可以看到目錄下生成了 helloworld.class 文件,該文件可以在java virtual machine (jvm)上運(yùn)行。

編譯后,我們可以使用以下命令來(lái)執(zhí)行程序:

$ scala helloworld
hello, world!

 

3. 基本語(yǔ)法

scala 基本語(yǔ)法需要注意以下幾點(diǎn):

  • 區(qū)分大小寫 - ?scala是大小寫敏感的,這意味著標(biāo)識(shí)hello 和 hello在scala中會(huì)有不同的含義。
  • 類名 -?對(duì)于所有的類名的第一個(gè)字母要大寫。 如果需要使用幾個(gè)單詞來(lái)構(gòu)成一個(gè)類的名稱,每個(gè)單詞的第一個(gè)字母要大寫。 示例:class myfirstscalaclass
  • 方法名稱 - 所有的方法名稱的第一個(gè)字母用小寫。 如果若干單詞被用于構(gòu)成方法的名稱,則每個(gè)單詞的第一個(gè)字母應(yīng)大寫。 示例:def mymethodname()
  • 程序文件名 - 程序文件的名稱應(yīng)該與對(duì)象名稱完全匹配(新版本不需要了,但建議保留這種習(xí)慣)。 保存文件時(shí),應(yīng)該保存它使用的對(duì)象名稱(記住scala是區(qū)分大小寫),并追加".scala"為文件擴(kuò)展名。 (如果文件名和對(duì)象名稱不匹配,程序?qū)o(wú)法編譯)。 示例:?假設(shè)"helloworld"是對(duì)象的名稱。那么該文件應(yīng)保存為'helloworld.scala"
  • def main(args: array[string]) -?scala程序從main()方法開(kāi)始處理,這是每一個(gè)scala程序的強(qiáng)制程序入口部分。

 

4. 標(biāo)識(shí)符

scala 可以使用兩種形式的標(biāo)志符,字符數(shù)字和符號(hào)。

字符數(shù)字使用字母或是下劃線開(kāi)頭,后面可以接字母或是數(shù)字,符號(hào)"$"在 scala 中也看作為字母。然而以"$"開(kāi)頭的標(biāo)識(shí)符為保留的 scala 編譯器產(chǎn)生的標(biāo)志符使用,應(yīng)用程序應(yīng)該避免使用"$"開(kāi)始的標(biāo)識(shí)符,以免造成沖突。

scala 的命名規(guī)則采用和 java 類似的 camel 命名規(guī)則,首字符小寫,比如 tostring。類名的首字符還是使用大寫。此外也應(yīng)該避免使用以下劃線結(jié)尾的標(biāo)志符以避免沖突。符號(hào)標(biāo)志符包含一個(gè)或多個(gè)符號(hào),如+,:,? 等,比如:

+ ++ ::: < ?> :->

scala 內(nèi)部實(shí)現(xiàn)時(shí)會(huì)使用轉(zhuǎn)義的標(biāo)志符,比如:-> 使用 $colon$minus$greater 來(lái)表示這個(gè)符號(hào)。因此如果你需要在 java 代碼中訪問(wèn):->方法,你需要使用 scala 的內(nèi)部名稱 $colon$minus$greater。

混合標(biāo)志符由字符數(shù)字標(biāo)志符后面跟著一個(gè)或多個(gè)符號(hào)組成,比如 unary_+ 為 scala 對(duì)+方法的內(nèi)部實(shí)現(xiàn)時(shí)的名稱。字面量標(biāo)志符為使用"定義的字符串,比如 `x` `yield`。

你可以在"之間使用任何有效的 scala 標(biāo)志符,scala 將它們解釋為一個(gè) scala 標(biāo)志符,一個(gè)典型的使用為 thread 的 yield 方法, 在 scala 中你不能使用 thread.yield()是因?yàn)?yield 為 scala 中的關(guān)鍵字, 你必須使用 thread.`yield`()來(lái)使用這個(gè)方法。

 

5. scala 關(guān)鍵字

下表列出了 scala 保留關(guān)鍵字,我們不能使用以下關(guān)鍵字作為變量:

abstract case catch class
def do else extends
false final finally for
forsome if implicit import
lazy match new null
object override package private
protected return sealed super
this throw trait try
true type val var
while with yield ?
- : = =>
<- <: <% >:
# @

 

6. scala 注釋

scala 類似 java 支持單行和多行注釋。多行注釋可以嵌套,但必須正確嵌套,一個(gè)注釋開(kāi)始符號(hào)對(duì)應(yīng)一個(gè)結(jié)束符號(hào)。注釋在 scala 編譯中會(huì)被忽略,范例如下:

object helloworld {
   /* 這是一個(gè) scala 程序
    * 這是一行注釋
    * 這里演示了多行注釋
    */
   def main(args: array[string]) {
      // 輸出 hello world
      // 這是一個(gè)單行注釋
      println("hello, world!") 
   }
}

 

7. 空行和空格

一行中只有空格或者帶有注釋,scala 會(huì)認(rèn)為其是空行,會(huì)忽略它。標(biāo)記可以被空格或者注釋來(lái)分割。

 

8. 換行符

scala是面向行的語(yǔ)言,語(yǔ)句可以用分號(hào)(;)結(jié)束或換行符。scala 程序里,語(yǔ)句末尾的分號(hào)通常是可選的。如果你愿意可以輸入一個(gè),但若一行里僅 有一個(gè)語(yǔ)句也可不寫。另一方面,如果一行里寫多個(gè)語(yǔ)句那么分號(hào)是需要的。例如

val s = "碩編程"; println(s)

 

9. scala 包

1) 定義包

scala 使用 package 關(guān)鍵字定義包,在scala將代碼定義到某個(gè)包中有兩種方式:

第一種方法和 java 一樣,在文件的頭定義包名,這種方法就后續(xù)所有代碼都放在該包中。 比如:

package com.yapf
class helloworld

第二種方法有些類似 c#,如:

package com.yapf {
  class helloworld 
}

第二種方法,可以在一個(gè)文件中定義多個(gè)包。

2) 引用

scala 使用 import 關(guān)鍵字引用包。

import java.awt.color  // 引入color
 
import java.awt._  // 引入包內(nèi)所有成員
 
def handler(evt: event.actionevent) { // java.awt.event.actionevent
  ...  // 因?yàn)橐肓薺ava.awt,所以可以省去前面的部分
}

import語(yǔ)句可以出現(xiàn)在任何地方,而不是只能在文件頂部。import的效果從開(kāi)始延伸到語(yǔ)句塊的結(jié)束。這可以大幅減少名稱沖突的可能性。

如果想要引入包中的幾個(gè)成員,可以使用selector(選取器):

import java.awt.{color, font}
 
// 重命名成員
import java.util.{hashmap => javahashmap}
 
// 隱藏成員
import java.util.{hashmap => _, _} // 引入了util包的所有成員,但是hashmap被隱藏了

注意:默認(rèn)情況下,scala 總會(huì)引入 java.lang._ 、 scala._ 和 predef._,這里也能解釋,為什么以scala開(kāi)頭的包,在使用時(shí)都是省去scala.的。

下一節(jié):scala 數(shù)據(jù)類型

scala 教程

相關(guān)文章