Statistical Programming

JavaとScalaの違いその1

JavaとScalaの違いにフォーカスしながらScalaを学んでいきたいと思います。

 

かなりありますが、まずはobjectでしょうか。

下のプログラムをみたらすぐわかるのですが、Scalaではシングルトンオブジェクトを簡単に生成できるのです!!通常javaではシングルトンオブジェクトを作るにはまずclassを作成し、コンストラクタをprivateに設定することで外から呼び出せなくし〜などなどちょいと手間がかかりましたがScalaではclassではなくobjectとして定義するだけで簡単に作成することが出来ます。その他にも基本的なjavaとscalaの違いを、文章で説明してもイメージしづらいのでプログラム中で簡単にメモってみました。

 

 

object Test {

 

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

    //引数の中の順序が違いますねー。あと、voidの代わりに :Unit と表現します

    //関数名などの後に=が入っていますね…

    println("HelloScala!!") //セミコロンが要らない

    var big1=BigInt(100000) 

//大きなデータもこのように通常のプリミティブ型と同様に計算出来る

    var big2=BigInt(2000000)

    println(big1*big2)

    var list=List(1,2,3) 

/*Scalaでは配列がプリミティブなデータの扱いではなく基本的にコレクションという形で扱います。*/

    var li1=list(1)

 //添字は[]ではなく()を使う。

    println(li1)

    val concretenum=1 

//valは定数を扱う変数。

//javaではfinalが該当。関数型プログラミングで多用するらしい。

/*関数の引数はval型。故に引数の値を変更することはできない。

    関数型プログラムの世界ではこれにより関数の独立性を高めている*/

    println(add(1,3))

    def add(a:Int,b:Int):Int={

      //a+=b このように変数を変化させることはできない

      return a+b

    }

    //配列の宣言

    var strings:Array[String]=null

    var values:Array[Int]=null

    //配列の生成

    strings=new Array[String](10)

    values=new Array[Int](10)

    //配列の定義(宣言と生成)

    var strings2=new Array[String](10)

    var values2=new Array[Int](10)

    //配列の初期値を伴った定義(newは不要)

    var strings3=Array("a","b","c")

    var values3=Array(1,2,3)

    //インデックスの指定方法(丸括弧を使う)

    println(strings3(2))

    //演算子とオブジェクトの参照

    //++や--が使えず、代わりに+=1,-=1を使うこと。

    /*Javaでは==や!=の意味がオブジェクトの参照元の比較であったがそれが改められ、

    より直感的に文字列の比較などが可能*/

    //演算子の優先順位もまたJavaとは異なっている

    //Scalaの演算子は実はメソッド名。

    println(1+2+"="+(1).+(2))

    //実際にはこんな感じ。.のあとにある+はメソッド。また、自分で作成したメソッドもこういった記号を使うことが可能

     }

 

}