溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Scala基礎(chǔ)語(yǔ)法有哪些

發(fā)布時(shí)間:2021-12-08 14:49:56 來(lái)源:億速云 閱讀:127 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“Scala基礎(chǔ)語(yǔ)法有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“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)理解下,類(lèi),對(duì)象,方法,實(shí)例變量的概念:

  • 對(duì)象 - 對(duì)象有屬性和行為。例如:一只狗的狀屬性有:顏色,名字,行為有:叫、跑、吃等。對(duì)象是一個(gè)類(lèi)的實(shí)例。

  • 類(lèi) - 類(lèi)是對(duì)象的抽象,而對(duì)象是類(lèi)的具體實(shí)例。

  • 方法 - 方法描述的基本的行為,一個(gè)類(lèi)可以包含多個(gè)方法。

  • 字段 - 每個(gè)對(duì)象都有它唯一的實(shí)例變量集合,即字段。對(duì)象的屬性通過(guò)給字段賦值來(lái)創(chuàng)建。


第一個(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!

腳本形式

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

object HelloWorld {
  /* 這是我的第一個(gè) Scala 程序
   * 以下程序?qū)⑤敵?#39;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!

基本語(yǔ)法

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

  • 區(qū)分大小寫(xiě) -  Scala是大小寫(xiě)敏感的,這意味著標(biāo)識(shí)Hello 和 hello在Scala中會(huì)有不同的含義。

  • 類(lèi)名 - 對(duì)于所有的類(lèi)名的第一個(gè)字母要大寫(xiě)。
    如果需要使用幾個(gè)單詞來(lái)構(gòu)成一個(gè)類(lèi)的名稱,每個(gè)單詞的第一個(gè)字母要大寫(xiě)。

     示例:class MyFirstScalaClass

  • 方法名稱 - 所有的方法名稱的第一個(gè)字母用小寫(xiě)。
    如果若干單詞被用于構(gòu)成方法的名稱,則每個(gè)單詞的第一個(gè)字母應(yīng)大寫(xiě)。

     示例:def myMethodName()

  • 程序文件名 - 程序文件的名稱應(yīng)該與對(duì)象名稱完全匹配(新版本不需要了,但建議保留這種習(xí)慣)。
    保存文件時(shí),應(yīng)該保存它使用的對(duì)象名稱(記住Scala是區(qū)分大小寫(xiě)),并追加".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)制程序入口部分。


標(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 類(lèi)似的 camel 命名規(guī)則,首字符小寫(xiě),比如 toString。類(lèi)名的首字符還是使用大寫(xiě)。此外也應(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è)方法。

Scala 關(guān)鍵字

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

abstractcasecatchclass
defdoelseextends
falsefinalfinallyfor
forSomeifimplicitimport
lazymatchnewnull
objectoverridepackageprivate
protectedreturnsealedsuper
thisthrowtraittry
truetypevalvar
whilewithyield 
-:==>
<-<:<%>:
#@


Scala 注釋

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

object HelloWorld {
  /* 這是一個(gè) Scala 程序
   * 這是一行注釋
   * 這里演示了多行注釋
   */
  def main(args: Array[String]) {
     // 輸出 Hello World
     // 這是一個(gè)單行注釋
     println("Hello, world!")
  }
}

空行和空格

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


換行符

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

val s = "菜鳥(niǎo)教程"; println(s)

Scala 包

定義包

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

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

package com.runoob
class HelloWorld

第二種方法有些類(lèi)似 C#,如:

package com.runoob {
 class HelloWorld
}

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

引用

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._,這里也能解釋?zhuān)瑸槭裁匆詓cala開(kāi)頭的包,在使用時(shí)都是省去scala.的。

感謝各位的閱讀,以上就是“Scala基礎(chǔ)語(yǔ)法有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Scala基礎(chǔ)語(yǔ)法有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI