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

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
ページの作成:「==Scala Javaプログラマ向けチュートリアル== [Scala] *http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html ==インポート== *Scala…」
==Scala Javaプログラマ向けチュートリアル==
[Scala]

*http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html

==インポート==
*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つの引数をとり、インスタンス作成時に引数に値が与えられる必要がある

案内メニュー