1.スカラ変数宣言、データタイプ、オペレータ、プロセス制御

免責事項:この記事はCC 4.0 BY-SAの著作権契約書に従って、ブロガーオリジナル記事です、複製、元のソースのリンクと、この文を添付してください。

1.変数宣言

VALおよびVAR:Scalaの変数が2種類に分け。
valの変数はに似ているJavaの決勝、一度再割り当てすることはできません初期化。
varが再割り当てすることができます。
変数宣言は、タイプを指定することができ、また(この時間は自動的にタイプを推測します)タイプを指定しない場合には

// val声明变量
val str01:String = "Hello World"
val str02 = "str02"
// str02 = "str00"  会编译错误

// var声明变量
var str03 = "str03"
str03 = "aaa"    // 不会编译错误

Scalaのプログラムは、通常、新しいスコープを導入し、中括弧、文の変数のスコープが付属しています。
スコープについて、スカラ座とJavaの違いで、Javaは組み込みのスコープの範囲外で同じ名前の変数の使用を許可していませんが、スコープ内に埋め込まれたScalaの変数がの範囲外と同じ名前をブロックします。変数は、変数がスコープ内に内蔵され、同じ名前の範囲の外に表示されません。

2.データ・タイプ

タイプの2.1基礎

Javaとより一貫性。

  • バイト:8ビットの2の補数の符号付き整数
  • ショート:16ビットの2の補数の符号付き整数
  • INT:32ビットの2の補数の符号付き整数
  • ロング:64ビットの2の補数の符号付き整数
  • シャア:16ビット符号なしのUnicode文字
  • フロート:32ビットIEEE 754単精度浮動小数点
  • ダブル:64ビットIEEE 754倍精度浮動小数点
  • ブール:真或はfalse
  • 文字列:シャアシーケンス
2.2リテラル
  • 整数リテラル
    のInt、整数リテラルロング、ショート、バイト、二つの形態がある10進と16進は、異なる初めは、異なるバンドを発現しました。ヘクスた:0xまたは0Xで、0〜9と小文字またはA〜Fの大文字を含んでいてもよいです
    整数リテラルlまたはLで終了している場合、それはそうでなければ、ロングタイプのint型です。
  • 浮動リテラル
    率組成物から始まる小数点数、オプションの小数点、およびその後の任意eまたはEによって。たとえば1.2345e2ため。
    F又はFを終了するフロートリテラルを支払っ、それはフロートタイプ、さもなければ二重です。二重またはD dを終了してもよいが、これはオプションです。
  • 文字リテラル
    任意のUnicode文字の単一引用符と中間部品の。ヴァルD =「\ u0041」:元の指定された文字を表示することに加えて、Unicode文字を表すことができ、特に\ Uプラス4進Unicodeコードに対応した数、例えばあります 。
  • 文字列リテラルの
    二重引用符組成物によって提供さ文字のパッケージ。
    あなたはエスケープシーケンスやラインを横切るように、文字列の多くを書きたくない場合は、ネイティブの文字列内のネイティブ文字列は、一重または二重改行を含む任意の文字を、含めることができ表すために3つの二重引用符で始まりと終わりするために、3つの二重引用符を使用することができます引用符や他の特殊文字。
var a = """ Welcome to here.
            I am very glad to see you."""
println(a)

打印结果:
Welcome to here.
               I am very glad to see you.
问题在于:字符串第二行前面的空格被包含进去,为了解决这个问题,可以每行开始加一个管道符|,然后对字符串调用stripMargin方法,如下。

var a = """Welcome to here.
               |I am very glad to see you.""".stripMargin
println(a)

打印结果:
Welcome to here.
I am very glad to see you.
2.3補間文字列
  • sの補間:プロセス変数
  • 生補間:ハンドルの特殊文字
  • F補間:組み込み式のパーセント記号%を開始するには、表現上の命令の後にprintfスタイルの命令を追加します
val name = "Jason"
println(s"Hello, $name")      // Hello, Jason
println(s"The answer is ${6*7}")    // The answer is 42

println(raw"Hello\\\\World")    // Hello\\\\World

println(f"${Math.PI}%.5f")    // 3.14159

3.オペレータ

3.1伝統的に、オペレータはスカラで理解

Scalaは、伝統的な意味では、実際に作業をしません。同様に+、 - 、*、/ように文字がメソッド名として使用してもよいです。例えば、1 + 2は、実際にオブジェクトメソッド、すなわち、1 +(2)、パラメータ1と2のInt +を呼び出すと呼ばれる、複数のInt +メソッドをオーバーロードは、異なるパラメータを受信することがありますタイプ。
、/の間の使用の整数結果の整数部のみを保持し、丸められないであろう。

  • 算術演算子:+ - * /%
  • 関係、および論理演算子:> <> = <=!
  • 論理演算子:&&または&、||または|。&&と||短絡され、左側の右サイドで評価されることはありません、ケースの発現の判定結果でした。
  • ビット処理演算子:&| ^〜>>(右、最上位ビット(符号ビットの左側の値)が満たされている)>>>(符号なし右シフトは、オートフィル0)<<(シフトは左、オートフィル0)
  • 平等のためのオブジェクト:!== =
    println(1==1.0) //true、Scalaの異なるJavaの==から、Scalaは長い内容が一致しているとしてとしてtrueを返します
演算子3.2スカラ

オペレータScalaの表現方法は、オペレーターのような他の言語の外見に限定されるものではなく、任意の方法は、オペレータ表記法で使用することができます。たとえばのindexOf Stringクラスはメソッドを持っているので、あなたが使用することができます

val str = "Hello World"
println(str indexOf 'e')        // 1
println(str indexOf ('o',5))    // 7
3.3接頭辞、中置、後置演算子

いくつかの例としては、先に引用し中置演算子です。接頭表記法名は、オブジェクトメソッド呼び出しの前に配置する必要がある、接尾反対の
接頭オペレータが実際実際、例えば、メソッド「unary_」プラスオペレーターと呼ばれる-2.0(2.0).unary_-。,! - -と接頭演算子は、+であるとしてのみ使用することができます

// 前缀
val a = (2.0).unary_-
// 后缀
val b = "Hello World" toLowerCase()
println(a)    // -2.0
println(b)    // hello world

4.制御構造

スカラ座など、ごく少数内蔵の制御構造、:もし、しばらく、やる...しばらく 、ため、試して、一致して関数を呼び出します。
すべての制御構造は、結果として、いくつかの値を返すスカラ。

4.1の場合

結果は、特定の場合には返すことができます

4.2 DO /中...しばらく

やる、しばらく...単位の値手段 - 前記(への復帰中)

4.3のための
  • 発現のためのフィルタを追加することができ、括弧内の式は、IF句である、複数のフィルタを追加してもよいです。
val filesHere = new File("D:\\MyProject").listFiles
// 单个过滤器
for(file <- filesHere if !file.getName.endsWith(".scala"))
  println(file)
// 多个过滤器 
for(file <- filesHere
    if file.isFile
    if !file.getName.endsWith(".scala"))
  println(file)
  • ネストした繰り返し
val fileHere = new File(".").listFiles()
def fileLines(file: File) = scala.io.Source.fromFile(file).getLines().toList
def grep(pattern: String) =
  for (
    file <- fileHere
    if file.getName.endsWith(".scala");
    line <- fileLines(file);
    trimLine = line.trim
    if trimLine.matches(pattern)
  ) println(file + ":" + trimLine)
grep(".*gcd.*")
  • キーワードによってyieldリターンリストの
    形式:for 子句 yield 代码体
val res = for (i <- 0 to 3) yield {
  i * i
}
println(res.mkString(","))   // 0,1,4,9
リリース8元の記事 ウォンの賞賛0 ビュー114

おすすめ

転載: blog.csdn.net/qq_42994084/article/details/102886227