スカラ - 宣言変数、文字列データ型と操作、条件式、サイクル、休憩して続行

宣言変数

Javaの変数の定義

INTの = 0 ;  

Scalaで変数varまたはValを定義するために使用することができる、構文は以下の通りであります:

ヴァル/ VARの 変数識別子変数タイプ =  初期値

間で

  1. ヴァル-defined変数は、再割り当てすることはできません
  2. varが変数が再割り当てすることができ-defined
  3. 背中に書かれたScalaの定義変数型変数名
  4. Scalaの最後の文はセミコロンを追加する必要はありません。

変数の定義

例:人の名前を保持する変数を定義する「トム」

参照コード

scala> val name:String = "tom"
name: String = tom

VALおよびVAR変数

ジムは、その動作結果を観察された変数名を再割り当てするには

参照コード

scala> name = "Jim"
<console>:12: error: reassignment to val
      name = "Jim"

使用するvar再定義名「トム」を開催し、ジムに再割り当てしようとすると、その動作結果を観察するための変数

参照コード

scala> var name:String = "tom"
name: String = tom
​
scala> name = "Jim"
name: String = Jim

変数の型推論を定義します

Java以外Scalaの簡潔な構文は、変数を定義するために、より簡潔な方法を使用することができます。

人の名前「タム」を保持する変数を定義するために、より簡潔な構文を使用します。

参照コード

scala> val name = "tom"
name: String = tom

Scalaは自動的に、よりコンパクトに符号化するように、自動的に変数の変数値に基づいて型を推測することができます。

不活性割り当て

ビッグデータの開発企業では、時には非常に複雑なSQL文を記述し、SQL文は、行の行数百または数千もを有することができます。SQL文がJVMに直接ロードされ、メモリのオーバーヘッドがたくさんあるでしょう。どのように解決するには?

ある場合は多くの変数は、データを保存したが、すぐJVMメモリにロードする必要はありません。あなたは使用することができ、不活性割り当てを、効率を向上させることができます。

構文:

怠惰 ヴァル  変数名 =  の式

参照コード

scala> lazy val sql = """insert overwrite table adm.itcast_adm_personas
    |     select
    |     a.user_id,
....
    |     left join gdm.itcast_gdm_user_buy_category c on a.user_id=c.user_id
    |     left join gdm.itcast_gdm_user_visit d on a.user_id=d.user_id;"""
sql: String = <lazy>

 

Scalaの定義の文字列は、将来的には、必要に応じて定義するための最も便利な方法を選択することができ、さまざまな方法を提供しています。

  1. 二重引用符を使用します
  2. 補間式
  3. トリプル引用符を使用します

二重引用符を使用します

文法

ヴァル/ VARの 変数名 =  「文字列」

参照コード

val name="hadoop6"
scala> println(name + name.length)
hadoop6

補間式

補間式は、文字列の連結の多くを回避することができます。

文法

ヴァル/ VARの 変数名 =  S "$ {変数/表現}文字列"

Sは、文字列の定義の前に追加されます

文字列で、$ {}は変数を参照するために使用され得るか、または発現が書き込ま

複数の変数が格納されている:「zhangsan」、30は、「男性」、文字列の定義は、情報が保存されます。

プリントアウト:名前= zhangsan、年齢= 30、性別=男性

 

参照コード

scala> val name = "zhangsan"
name: String = zhangsan
​
scala> val age = 30
age: Int = 30
​
scala> val sex = "male"
sex: String = male
​
scala> val info = s"name=${name}, age=${age}, sex=${sex}"
info: String = name=zhangsan, age=30, sex=male
​
scala> println(info)
name=zhangsan, age=30, sex=male

トリプル引用符を使用します

テキストの大部分は、文字列を定義するためのトリプル引用符で、保存する必要があります。例:SQL文の大部分を保存します。すべての3つの中間文字列は値として文字列を引用しています。

文法

ヴァル/ VARの 変数名 =  「」「文字
列2」「」

参照コード

val sql = """select
    | *
    | from
    |     t_user
    | where
    |     name = "zhangsan""""
​
println(sql)

 

データ型と演算子

Javaのようなオペレータの過半数のScalaの種類

データの種類

基になる型

タイプ説明

バイト

8ビットの符号付き整数

ショート

16ビット符号付き整数

int型

32ビット符号付き整数

長いです

64ビット符号付き整数

シャア

16符号なしのUnicode文字

ストリング

Char型配列(文字列)

浮く

32ビットの単精度浮動小数点

ダブル

64組の浮動小数点精度

ブーリアン

trueまたはfalse

スカラ座のJava型との違いに注意してください。

  1. すべてのタイプでScalaは使用大文字を先頭に
  2. プラスチック使用のInt の代わりに、整数
  3. Scalaの定義された変数は、書き込み入力できないので、Scalaの推論自動的コンパイラ

演算子

カテゴリ

演算子

算術演算子

+、 - 、*、/

関係演算子

>、<、==、!=、> =、<=

論理演算子

&&、|| ,!

  1. ノースカラ座、+、 - 演算子
  2. Scalaで== ,! =比較直接使用することができるJavaとは異なり、それらはequalsと一貫性を表します。EQを使用して2つのオブジェクトを比較し、基準値、

そこ文字列「ABC」であり、次いで第2の文字列値を作成します。最初の文字列の連結の後に空の文字列。

次いで、基準値は、それらが等しいかどうかを確認するために、これら2つの文字列が等しい比較します。

参照コード

val str1 = "abc"
val str2 = str1 + ""
str1 == str2
str1.eq(str2)

Scalaの型階層

タイプ

説明

どれか

すべてのタイプの親クラスのは、2つのサブクラスがあるとAnyVal AnyRef

AnyVal

すべての数値型の親の

AnyRef

すべてのオブジェクトタイプ(参照型)親

単位

これは、ユニットがAnyValのサブクラスである、空を表しています。それは、ボイドでJavaに似ていますが、Scalaのより多くのJavaよりも、オブジェクト指向します

ヌル

ヌルは、それがすべての参照タイプのサブクラスであることを意味AnyRefのサブクラスです。nullは任意のオブジェクトタイプに割り当てることができます

何も

すべてのタイプのサブクラス  何もすべてのクラスのサブクラスであるため、直接、メソッドが例外をスローした場合、戻り値の型は何もありません、タイプのインスタンスを作成することはできません、それはどのようなタイプに割り当てることができます

何も

def main(args: Array[String]): Unit = {

    val c = m3(1,0)

}



def m3(x:Int, y:Int):Int = {

    if(y == 0) throw new Exception("这是一个异常")

    x / y

}

問題

問題がある場合は、次のコードは?

val b:Int = null

Scalaは、エラーを説明します:

ヌル・タイプは、タイプintは説明変換しないヌルタイプint型は、のサブクラスではありません

 

条件式

つまり、条件式if式。Scalaの条件式の構文とJavaと同じ。

値の場合には戻ってきました

参照コード

scala> val sex = "male"
sex: String = male
​
scala> val result = if(sex == "male") 1 else 0
result: Int = 1

Javaは、同じではありません

  1. Scalaで、条件式もの値を返します
  2. 三重発現せずScalaで、代替式は、式のトリプレット場合に使用することができます

ブロック式

  1. {}を使用してScalaは、ブロック式を表します
  2. 式の場合と、ブロックはまた、式の値であります
  3. 値は、最後の式の値であり、

問題

次のコードは、変数の値が何であるのだろうか?

scala> val a = {
    | println("1 + 1")
    | 1 + 1
    | }

 

循環

Scalaでのためにしている間に使用することができますが、一般的にあるため、より簡潔な表現の構文のために、発現のための推奨

発現について

文法

以下のための式(I < - 発現/アレイ/セット){

    //表現

}

シンプルサイクル

デジタル表現を印刷するための使用1-10

参照コード1

scala> val nums = 1.to(10)                                                             
nums: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> for(i <- nums) println(i)    

                                                                                                                    

リファレンスコード2

//メソッド呼び出し中置

scala> for(i <- 1 to 10) println(i)

ネストされたループ

表現のための使用、次の文字を印刷

*****

*****

*****

参照コード

for(i <- 1 to 3; j <- 1 to 5) {print("*");if(j == 5) println("")}

ガード

表現のための裁判官は文章ならば、それは警備員呼び出された場合、裁判官を追加することができます。私たちは、より簡潔な表現のためのガードメイクを使用することができます。

文法

( -発現/アレイ/セットI <ための表現であれば){

    //表現

}

表現のための使用は3で割り切れる1〜10の番号を印刷することができます

参照コード

// 3で割り切れるデジタルを印刷することができ、ガードを追加

for(i <- 1 to 10 if i % 3 == 0) println(i)

導出のための

ループのために、発現量は、セットを構築するために使用することができ、我々は、歩留まりの発現のために使用しますと呼ばれる派生

10、20 ... 100のセットを生成します

参照コード

//導出のために:表現のためにそのための発現構築物のセットは意志、降伏し始め

val v = for(i <- 1 to 10) yield i * 10

whileループ

JavaでScalaのループとが一致している間

デジタル印刷1-10

参照コード

scala> var i = 1

i: Int = 1



scala> while(i <= 10) {

     | println(i)

     | i = i+1

     | }

 

壊れ和続けます

  1. Scalaは、何のブレークがない/キーワードを続けます
  2. あなたがブレークを使用する必要がある場合/続け、我々は使用する必要があるブレーククラスをパッケージ化scala.util.control breable破る方法を

休憩を達成

使い方

  1. ブレークインポートパッケージのインポートscala.util.control.Breaks._
  2. 使用の破壊可能なラップのための式
  3. ループを終了するのに必要な表現のために、ブレーク()メソッドの呼び出しを追加

表現1-100のためのデジタル印刷の使用、数50式のために出口に到達する場合

参照コード

// 导入scala.util.control包下的Break
import scala.util.control.Breaks._

breakable{

    for(i <- 1 to 100) {

        if(i >= 50) break()

        else println(i)

    }

}

達成するために続行

使い方

  1. ブレークの実装は似ていますが、少し異なって続行します。
  2. } {破断可能達成し続ける体のための発現がアップ備えます

10による数の割り切れるが、印刷されない場合は、トラバースに使用表現のために、デジタル1-100を印刷

// 导入scala.util.control包下的Break    
import scala.util.control.Breaks._
for(i <- 1 to 100 ) {
   breakable{
       if(i % 10 == 0) break()
       else println(i)
  }
}

 

94元記事公開 ウォンの賞賛184 ビューに14万+を

おすすめ

転載: blog.csdn.net/weixin_44036154/article/details/105206247