開發與維運

Scala語言入門一(初識)

一、Scala概述

Scala是一門多範式的編程語言,一種類似java的編程語言,設計初衷是實現可伸縮的語言、並集成面向對象編程和函數式編程的各種特性。Scala把Erlang風格的基於actor的併發帶進了JVM。開發者可以利用Scala的actor模型在JVM上設計具伸縮性的併發應用程序,它會自動獲得多核心處理器帶來的優勢,而不必依照複雜的Java線程模型來編寫程序。Scala 運行在Java虛擬機上,併兼容現有的Java程序。Scala 源代碼被編譯成Java字節碼,所以它可以運行於JVM之上,並可以調用現有的Java類庫

二、Scala的安裝

Scala下載地址

三、Scala使用入門

1、交互式

scala> 1+3
res0: Int = 4

scala> println("Hello World")
Hello World

2、代碼方式

object Test {
  def main(args: Array[String]): Unit = {
    println("Hello World")
  }
}

四、Scala入門

1、基本數據類型

數據類型 描述
Byte 8位有符號補碼整數。數值區間為 -128 到 127
Short 16位有符號補碼整數。數值區間為 -32768 到 32767
Int 32位有符號補碼整數。數值區間為 -2147483648 到 2147483647
Long 64位有符號補碼整數。數值區間為 -9223372036854775808 到 9223372036854775807
Float 32 位, IEEE 754 標準的單精度浮點數
Double 64 位 IEEE 754 標準的雙精度浮點數
Char 16位無符號Unicode字符, 區間值為 U+0000 到 U+FFFF
String 字符串
Boolean true或false
Unit 表示無值,和其他語言中void等同。用作不返回任何結果的方法的結果類型。Unit只有一個實例值,寫成()。
Null null 或空引用
Nothing Nothing類型在Scala的類層級的最底端;它是任何其他類型的子類型
Any Any是所有其他類的超類
AnyRef AnyRef類是Scala裡所有引用類(reference class)的基類

上表中列出的數據類型都是對象,也就是說scala沒有java中的原生類型。在scala是可以對數字等基礎類型調用方法的

2、變量

變量是一種使用方便的佔位符,用於引用計算機內存地址,變量創建後會佔用一定的內存空間。基於變量的數據類型,操作系統會進行內存分配並且決定什麼將被儲存在保留內存中。因此,通過給變量分配不同的數據類型,你可以在這些變量中存儲整數,小數或者字母

a、變量聲明

在 Scala 中,使用關鍵詞 "var" 聲明變量,使用關鍵詞 "val" 聲明常量

# 以上定義了變量 myVar,我們可以修改它
var myVar : String = "Foo"

# 定義了常量 myVal,它是不能修改的。如果程序嘗試修改常量 myVal 的值,程序將會在編譯時報錯
val myVal : String = "Foo"

b、變量類型聲明

變量的類型在變量名之後等號之前聲明。定義變量的類型的語法格式如下

var age: Int = [Initial  value]

val name: String = [Initial  value]

c、變量類型引用

在 Scala 中聲明變量和常量不一定要指明數據類型,在沒有指明數據類型的情況下,其數據類型是通過變量或常量的初始值推斷出來的。所以,如果在沒有指明數據類型的情況下聲明變量或常量必須要給出其初始值,
否則將會報錯

var myVar = 10;

val myVal = "Hello, Scala!";

d、Scala 多個變量聲明

val a,b = 100

3、訪問修飾符

Scala 訪問修飾符基本和Java的一樣,分別有:private,protected,public。如果沒有指定訪問修飾符,默認情況下,Scala 對象的訪問級別都是 public。Scala 中的 private 限定符,比 Java 更嚴格,在嵌套類情況下,外層類甚至不能訪問被嵌套類的私有成員

a、私有(private)

用 private 關鍵字修飾,帶有此標記的成員僅在包含了成員定義的類或對象內部可見,同樣的規則還適用內部類

class Outer{
    class Inner{

    private def f(){println("f")}

    class InnerMost{
        f() // 正確
        }
    }

    (new Inner).f() //錯誤
}

(new Inner).f( ) 訪問不合法是因為 f 在 Inner 中被聲明為 private,而訪問不在類 Inner 之內。但在 InnerMost 裡訪問 f 就沒有問題的,因為這個訪問包含在 Inner 類之內。Java中允許這兩種訪問,因為它允許外部類訪問內部類的私有成員

b、保護(protected)

在 scala 中,對保護(Protected)成員的訪問比 java 更嚴格一些。因為它只允許保護成員在定義了該成員的的類的子類中被訪問。而在java中,用protected關鍵字修飾的成員,除了定義了該成員的類的子類可以訪問,同一個包裡的其他類也可以進行訪問

package p{
class Super{
    protected def f() {println("f")}
    }
    class Sub extends Super{
        f()
    }
    class Other{
        (new Super).f() //錯誤
    }
}

c、公共(Public)

Scala中,如果沒有指定任何的修飾符,則默認為 public。這樣的成員在任何地方都可以被訪問

class Outer {
   class Inner {
      def f() { println("f") }
      class InnerMost {
         f() // 正確
      }
   }
   (new Inner).f() // 正確因為 f() 是 public
}

Leave a Reply

Your email address will not be published. Required fields are marked *