| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Scala Javaプログラマ向けチュートリアル」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Scala Javaプログラマ向けチュートリアル== [Scala] *http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html ==インポート== *Scala…」)
 
 
(同じ利用者による、間の2版が非表示)
1行目: 1行目:
==Scala Javaプログラマ向けチュートリアル==
+
==[[Scala Javaプログラマ向けチュートリアル]]==
[Scala]
+
[[Scala]] |
  
 
*http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html
 
*http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html
  
 
==インポート==
 
==インポート==
*Scalaの強みの一つは、Javaと簡単に相互運用できること
+
*[[Scala]]の強みの一つは、Javaと簡単に相互運用できること
*java.lang パッケージはデフォルトでインポートされ、その他も必要に応じてインポートできる
+
*java.lang パッケージはデフォルトでインポートされ、[[その他]]も必要に応じてインポートできる
*Scalaのimportは、Javaによく似ているが、もっと強力である。
+
*[[Scala]]のimportは、Javaによく似ているが、もっと強力である。
*_ を * の代わりに利用する(*はScalaの識別子のため)
+
*_ を * の代わりに利用する(*は[[Scala]]の識別子のため)
  
 
  import java.util.{Date,Locale}
 
  import java.util.{Date,Locale}
25行目: 25行目:
  
 
*メソッドの引数が、1つの場合 挿入記法(infix syntax)を利用できる
 
*メソッドの引数が、1つの場合 挿入記法(infix syntax)を利用できる
<blockquote>df format now</blockquote>
+
&lt;blockquote&gt;df format now&lt;/blockquote&gt;
 
*冗長にも書ける
 
*冗長にも書ける
<blockquote>df.format(now)</blockquote>
+
&lt;blockquote&gt;df.format(now)&lt;/blockquote&gt;
 
==すべてオブジェクト==
 
==すべてオブジェクト==
*Javaとことなり、数値や関数もオブジェクト
+
*[[Java]]とことなり、数値や関数もオブジェクト
 
===数値もオブジェクト===
 
===数値もオブジェクト===
 
*以下のような計算式を
 
*以下のような計算式を
  scala> val x = 2
+
  scala&gt; val x = 2
 
  x: Int = 2
 
  x: Int = 2
 
   
 
   
  scala> 1 + 2 * 3 / x
+
  scala&gt; 1 + 2 * 3 / x
 
  res1: Int = 4
 
  res1: Int = 4
 
*メソッドの呼び出しとしても書くことが出来る
 
*メソッドの呼び出しとしても書くことが出来る
  scala> (1).+(((2).*(3))./(x))
+
  scala&gt; (1).+(((2).*(3))./(x))
 
  res2: Int = 4
 
  res2: Int = 4
  
46行目: 46行目:
 
  (1).+(2)
 
  (1).+(2)
 
===関数もオブジェクト===
 
===関数もオブジェクト===
*Javaプログラマーにとって意外なのは、関数もオブジェクトだということだろう
+
*[[Java]]プログラマーにとって意外なのは、関数もオブジェクトだということだろう
 
*関数を引数として渡すことがでる
 
*関数を引数として渡すことがでる
 
*変数に格納することができる
 
*変数に格納することができる
53行目: 53行目:
  
 
  object Timer {
 
  object Timer {
     def oncePerSecond(callback: () => Unit) {
+
     def oncePerSecond(callback: () =&gt; Unit) {
 
       while(true) {
 
       while(true) {
 
         callback(); Thread sleep 1000
 
         callback(); Thread sleep 1000
70行目: 70行目:
 
*一度しか使わないのに名前を持っていた
 
*一度しか使わないのに名前を持っていた
 
*これらは不要に思われる
 
*これらは不要に思われる
*Scalaでは、無名関数を利用することが出来る
+
*[[Scala]]では、無名関数を利用することが出来る
*=> は関数の引数リストとボディを分ける
+
*=&gt; は関数の引数リストとボディを分ける
*この例では、=>の左側の括弧に引数リストは無い
+
*この例では、=&gt;の左側の括弧に引数リストは無い
 
  object Timer {
 
  object Timer {
     def oncePerSecond(callback: () => Unit) {
+
     def oncePerSecond(callback: () =&gt; Unit) {
 
       while(true) {
 
       while(true) {
 
         callback(); Thread sleep 1000
 
         callback(); Thread sleep 1000
81行目: 81行目:
 
     def main(args: Array[String]) {
 
     def main(args: Array[String]) {
 
       oncePerSecond(
 
       oncePerSecond(
           () => println("time flies like an arrow..."))
+
           () =&gt; println("time flies like an arrow..."))
 
     }
 
     }
 
  }
 
  }
 
==クラス==
 
==クラス==
*Scalaでは、クラスはJavaに近い文法で宣言する
+
*[[Scala]]では、クラスはJavaに近い文法で宣言する
 
*一つ重要な違いは、クラスはパラメータを持つことが出来る
 
*一つ重要な違いは、クラスはパラメータを持つことが出来る
 
*以下は、複素数を定義する例
 
*以下は、複素数を定義する例

2020年2月16日 (日) 04:31時点における最新版

Scala Javaプログラマ向けチュートリアル

Scala |

インポート

  • Scalaの強みの一つは、Javaと簡単に相互運用できること
  • java.lang パッケージはデフォルトでインポートされ、その他も必要に応じてインポートできる
  • Scalaのimportは、Javaによく似ているが、もっと強力である。
  • _ を * の代わりに利用する(*はScalaの識別子のため)
import java.util.{Date,Locale}
import java.text.DateFormat
import java.text.DateFormat._

object JpDate {
  def main(args: Array[String]) {
    val now = new Date
    val df = getDateInstance(LONG, Locale.JAPAN)
    println(df format now)
  }
}
2013/12/18
  • メソッドの引数が、1つの場合 挿入記法(infix syntax)を利用できる

<blockquote>df format now</blockquote>

  • 冗長にも書ける

<blockquote>df.format(now)</blockquote>

すべてオブジェクト

  • Javaとことなり、数値や関数もオブジェクト

数値もオブジェクト

  • 以下のような計算式を
scala> val x = 2
x: Int = 2

scala> 1 + 2 * 3 / x
res1: Int = 4
  • メソッドの呼び出しとしても書くことが出来る
scala> (1).+(((2).*(3))./(x))
res2: Int = 4
  • 次のように書くと 1. が Doubleとみなされてしまう
1.+(2)
  • 次のように記述する
(1).+(2)

関数もオブジェクト

  • Javaプログラマーにとって意外なのは、関数もオブジェクトだということだろう
  • 関数を引数として渡すことがでる
  • 変数に格納することができる
  • 他の関数に戻り値として渡すことができる
  • 関数を値として扱えることが、関数プログラミングの興味深いパラダイムの土台となっている
object Timer {
    def oncePerSecond(callback: () => Unit) {
      while(true) {
        callback(); Thread sleep 1000
      }
    }
    def timeFlies() {
      println("time flies like an arrow...")
    }
    def main(args: Array[String]) {
      oncePerSecond(timeFlies)
    }
}

無名関数

  • 上記の例を少し変えたもの
  • timeFiles関数は、oncePerSecond に渡されるためだけに定義されていた
  • 一度しか使わないのに名前を持っていた
  • これらは不要に思われる
  • Scalaでは、無名関数を利用することが出来る
  • => は関数の引数リストとボディを分ける
  • この例では、=>の左側の括弧に引数リストは無い
object Timer {
    def oncePerSecond(callback: () => Unit) {
      while(true) {
        callback(); Thread sleep 1000
      }
    }
    def main(args: Array[String]) {
      oncePerSecond(
          () => println("time flies like an arrow..."))
    }
}

クラス

  • Scalaでは、クラスはJavaに近い文法で宣言する
  • 一つ重要な違いは、クラスはパラメータを持つことが出来る
  • 以下は、複素数を定義する例
class Complex(real: Double, imaginary: Double) {
    def re() = real;
    def im() = imaginary
}
  • 複素数クラスは、2つの引数をとり、インスタンス作成時に引数に値が与えられる必要がある