あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

Scala

List の使い方(続き2)

リストの長さを得る。 scala> List(4, 5, 6, 7).length res0: Int = 4 リストの末尾要素、リスト末尾以外の要素のリストを得るメソッド scala> val foo = List(4, 5, 6, 7) foo: List[Int] = List(4, 5, 6, 7) scala> foo.last res1: Int = 7 scala> foo.ini…

List の使い方(続き1)

空のリスト 空のリスト作成でいろいろ試してみる。 scala> val list = List.empty list: List[Nothing] = List() scala> val list2 = List() list2: List[Nothing] = List() scala> val list3: List[String] = Nil list3: List[String] = List() scala> val …

List の使い方(最初は作り方)

Scala の List はイミュータブル(変更不可能)なシーケンス List の空リストは () 又は Nil List の作成は、ファクトリメソッド( List(要素, ..) の形式 ) か :: を使う。 List に対して新しい要素を追加した List を作成する時は :: を使う。 List のファク…

可変長引数(続き)

可変長引数を受け取る関数定義の引数の型は Seq になっているので、List や Array を渡せそうだが そのまま渡すとエラーになる。 scala> def puts(s: String*) = s.foreach(print) puts: (s: String*)Unit scala> val list = List("bar1 ", "bar2 ", "bar3 "…

シングルトンオブジェクト(続き)

上のソースのコンパイル後に生成される class ファイルは Foo.class 以外に Foo$.class が生成されていた。 Foo$.class には final class Foo$ extends scala.AnyRef with scala.ScalaObject という final class が自動生成されていた。 コップ本(初版ですが…

可変長引数

Scalaにも可変長引数があった。 メソッド定義の引数の型の後に * をつける。 object Foo { def main(argv: Array[String]) { put("aa","bb", "cc", "dd") put("AA", "BB") put() } def put(s: String*) { s.foreach(print); println } } コンパイル後の clas…

シングルトンオブジェクト

Scala ではすべてがオブジェクトのため Javaの static フィールド、クラスの定数、クラスメソッドはないがシングルトンオブジェクトの宣言 object をサポートしている。 object のメンバは、ちょうどjava のクラスの static フィールドメンバと同じような扱…

関数の型 の記述

関数の型は、(関数やメソッドの定義で)引数の型や戻り値の型に指定する。 (引数の型, …) => 戻り値の型引数の型を丸括弧で囲って、=> の次に戻り値の型を書く。 (Int, Long) => String(Int) => String引数が1個だけの場合は丸括弧を省略可能 Int => String引…

の関数

Scala の関数は、関数定義として呼び出せる。(Javaのメソッドや C の関数と同様) 名前のない関数として関数リテラルを記述できる。 関数リテラルを値として代入できる。(実行時のオブジェクト(FunctionNのインスタンス)) 関数オブジェクトはFunctionNトレイ…

Tuple を使う

本格的に仕事で Scala を使用することはないのですが、Java のプログラム内で scala の Tuple を使ったりしています。 値を保持するだけのために新規クラスなんかを作成する必要が なくなり結構、便利です。 import scala.Tuple3; .. private Tuple3<String,Integer,Boolean> getData</string,integer,boolean>…