【Scala入門】Scala基礎文法:クラスとオブジェクト、変数と定数

[Scala 入門] Scala のダウンロードとインストール (Windows) および最初の scala プロジェクトを作成するためのアイデア - Programmer Soughtに移動してください。

目次

1.スカラ

2. Scala の基本文法

2.1 コメントと識別子の指定

2.2 変数と定数

【事例:変数の宣言と代入】

2.3 オブジェクト

[ケース: コンパニオン オブジェクト、val はオブジェクトを介して属性を変更します]

【事例:コンストラクタを書き換え、メソッドをオブジェクトに適用】


1.スカラ

  • Scala は JVM に基づいており、Java と完全に互換性があり、クロスプラットフォーム、優れた実行、便利なガベージ コレクションなどの特徴もあります。
  • Scala は純粋なオブジェクト指向言語です。
  • Scala は関数型プログラミング言語です。
  • Scala は、コレクション型のデータ処理を非常によくサポートしています

Spark の最下層は Scla で記述されており、Spark を深く学ぶには Scala を習得する必要があります。

2. Scala の基本文法

:

  • scala の各行の後にセミコロンの自動推論メカニズムがあり、「;」を明示的に記述する必要はありません。
  • scala では、クラス名の最初の文字を大文字にし、メソッドの最初の文字を小文字にすることをお勧めします。また、クラスとメソッドの命名は、hump 命名法に準拠することをお勧めします。

2.1 コメントと識別子の指定

(1) 注:

//  	1.单行注释

/* */ 	2. 多行注释

/** 	3. 文档注释
*
**/

(2) 識別子の命名規則:

  • C/C++/Java のように、アルファベットのアンダースコアの後に英数字のアンダースコアが続きます。
  • 演算子であり、(+-*/#! など) のみを含むものも有効な識別子です。このように使用すると、奇妙な利点はありますか?その答えは、Zentraedi と同じくらい柔軟な演算子のオーバーロードです。
  • 39 個の Scala キーワードの 1 つと同じ名前であっても、バッククォートで囲まれた任意の文字列。
var _abc:String = "hello"
val -+/%# = 10
val `if` = 10
println(_abc)
println(-+/%#)
println(`if`)

キーワード:

  • package import class obejct trait extends with type for
  • private protected abstract sealed final implicit lazy override
  • try catch finlly throw
  • if else match case do while for return yield
  • def var val
  • this super
  • new
  • true false null
  • Java にないキーワードには次のものがあります。object trait with implicit match yield def val var

弦:

  • タイプ:String
  • +繋がり
  • *文字列の乗算、文字列を複数回コピーする
  • printfフォーマットされた出力
  • 文字列補間:s"xxx${varname}"プレフィックスsテンプレート文字列、プレフィックスfフォーマット テンプレート文字列、$変数値の取得、%その後にフォーマット文字列。
  • Raw string:raw"rawstringcontents${var}"の後に続く書式設定文字列は考慮されません。
  • 複数行の文字列: """ """.
  • 出力:print printf println ...
    val name: String = "Pyrrha" + " " + "Nikos"  // +号拼接字符串
    val age = 17
    println((name + " ") * 3)  // 将一个字符串复制多次进行拼接
    printf("%s : dead in %d\n", name, age) // printf:前缀f格式化模板字符串,通过$获取变量值,%后跟格式化字符串
    print(s"$name : dead in ${age}") // 字符串插值:前缀s模板字符串,通过$获取变量值
    val power = 98.9072
    println(f" : power ${power}%.2f.") // 取小数后2位

2.2 変数と定数

Scala には 2 種類の変数があります。

  • キーワードvarで宣言された変数には変数値があります
  • キーワードvalで宣言された変数は定数とも呼ばれ、その値は不変です

 

:

  • 変数の値から変数の型を推測できる場合は、型宣言を省略できます。
  • 変数は明示的に初期化する必要があります。
  • 通常、デフォルトは val 型の変数です。

ケース:変数の宣言と代入

object HelloWorld {
  def main(args: Array[String]): Unit = {
    // 定义方法 main ==  def 方法名(参数名: 参数类型):返回值 ={}
    println("hello world")

    //1. 类型推导; 声明变量时, 类型可以忽略, 编译器会自动推导;
    var a1 = 10;
    var a2: Int = 10;
    var b3 = "areusb?";
    val c5 = false;

    //2. 强类型语言; 变量/常量的数据类型确定后, 就不能再修改
    var e3: Int = 250;
    e3 = "feswgf"; // 编译器不会对此句报错, 执行时才会报错 type mismatch

    //3. 声明变量时必须有初始值,否则报错;
    var e4: Int;

    //4. var可变, va不可变
    var f4 = 6;
    f4 = 9;
    val f5 = 100;
    f5 = 200; // 编译器当场报错;
  }
}

コンソールに結果を出力します。

2.3 オブジェクト

scala におけるオブジェクトは、java におけるツール クラスに相当するシングルトン オブジェクトであり、静的メソッドを定義するクラスと見なすことができます。

同じファイル内でオブジェクト object とクラス class の名前が同じである場合、このオブジェクトはこのクラスのコンパニオン オブジェクトであり、このクラスはこのオブジェクトのコンパニオン クラスです。プライベート変数は相互にアクセスできます。

[ケース: コンパニオン オブジェクト、val はオブジェクトを介して属性を変更します]

  • オブジェクトはパラメーターを渡すことができません。
  • scala の class クラスはデフォルトでパラメーターを渡すことができ、デフォルトのパラメーター受け渡しはデフォルトのコンストラクターです。コンストラクターを書き換えるときは、既定のコンストラクターを呼び出す必要があります。
  • class クラスの属性には、デフォルトで setter メソッドと getter メソッドがあります。
package test

class Student(name: String, var age: Int) {
  def printInfo(): Unit = {
    println(name + " " + age + " " + Student.school)
  }
}

// 引入 object 伴生对象/单例对象,所有的私有属性都可以互相访问
object Student {
  val school: String = "atguigu"

  def main(args: Array[String]): Unit = {
    val alice = new Student(name = "alice", age = 19)
    alice.age = 24
    alice.printInfo()
  }
}

コンソールに結果を出力します。 

事例:コンストラクタを書き換え、オブジェクトにメソッドを適用】

  • scala の class クラスはデフォルトでパラメーターを渡すことができ、デフォルトのパラメーター受け渡しはデフォルトのコンストラクターです。コンストラクターを書き換えるときは、既定のコンストラクターを呼び出す必要があります。
  • object を使うときは new を使わない; class を使うときは new が必要で、new のときはクラスで実行されないメソッド (construction を除く) を除いてすべてが実行される;

  • オブジェクトの apply メソッド: パラメータをオブジェクトに渡すことはできません. オブジェクトを作成するときに、パラメータが渡されると、オブジェクト内の対応する数のパラメータを持つ apply メソッドが自動的に検出されます。
package com.yt.test

class Person(xname: String, xage: Int) {
  val name = xname
  var age = xage
  var gender = 'M'
  println("----------- Person Class -----------") // new时,class中除了方法不执行(不包括构造),其他都执行

  def this(yname: String, yage: Int, ygender: Char) {
    this(yname, yage)  // 类中重写构造时,构造中第一行要调用默认的构造函数
    this.gender = ygender
  }

  def sayName() = {
    println("sayName:", ClassAndObj.name) // 调用object静态属性
  }
  println("************ Person Class ************")
}

object ClassAndObj {
  println("----------- ClassAndObj object -----------")
  val name = "wangwu" // object静态属性,相当于java的工具类

  def apply(s: String, age: Int) = {
    println("name is " + s + ",age" + age)
  }

  def main(args: Array[String]): Unit = {
    val p1 = new Person("zhangsan", 19)
    val p2 = new Person("zhangsan", 19, 'F')
    p1.age = 200
    println(p1.name, p1.age)
    p1.sayName()
    println(p2.name, p2.age, p2.gender)

    ClassAndObj("lisi", 500)
  }

}

コンソールに結果を出力します。 

おすすめ

転載: blog.csdn.net/qq_45956730/article/details/130316536