Scala

「Scalaがもたらす言語の進化」というタイトルで発表してきた

Scala勉強会第9回 in 渋谷で発表してきました。 まだScalaでがりがりコード書けないので、外の言語からみたScalaの話をしました。 Scala lang evolutionView more presentations from faithandbrave.

Scala 3.0のうわさ

このあいだ id:kmizushima さんに、Scala 3.0(メジャーアップデート時)に予定されてる機能って何かあるのか聞いて、その後忘れてさっき思い出したのでメモ代わりに書いときます。 何やら、メソッドのパラメータリストをタプルとして扱えるようにする機構が予…

ScalaでBoost.Interfaces的なこと。

Structual Subtypingで、継承関係がないdrawというメソッドを持っているクラスをなんでも入れられるリスト。 class Rectangle { def draw = println("Rectangle") } class Circle { def draw = println("Circle") } object Main { def main(args: Array[Stri…

spawnとfuture

scala.concurrent.ops以下に、Concurrentな便利メソッドがいくつか定義されています。 ここではその代表的な例としてspawnとfutureを紹介します。 まず、spawn。 これは戻り値のいらない処理をバックグラウンドで動かすのに使います。 import scala.concurre…

Either

ScalaにもEitherあったんだな、と。 object Main { def foo(x : Int) : Either[String, Int] = x match { case 0 => Left("invalid arguments!") case _ => Right(x) } def result(a : Either[String, Int]) : Unit = a match { case Left(msg) => println("…

Scalaの自動リソース管理

ScalaではLoan Patternというので、スコープを抜けた際の自動リソース解放を行うのが一般的(?)だったようですが、現在scala-armというのが開発中のようですね。http://github.com/jsuereth/scala-arm/wiki/basic-usageリソース管理はパターンとしてユーザー…

ActorでConcurrentなコレクション(仮)

まだ途中のコード。 これは、真面目にやるならcaseクラスを外で定義せずにAtomicMapクラス内部で自己完結するようにしないと、ジェネリックに書けない(書けたとしても実行時エラーがひどいことになりそう)んじゃないかと思うので、あとで考える。 あと、Stop…

Actor使い始め

まず文字列によるメッセージ送信。 import scala.actors.Actor import scala.actors.Actor._ class X extends Actor { def act() = { react { case "test" => println("received test") case _ => println("received unknown message") } } } object Main ex…

Parser CombinatorsでIPv4のパース

パーサーを指定回数適用するrepNと、最後の"."をoptionalにするだけでわりと簡単に書けました。 import scala.util.parsing.combinator.syntactical._ object Main extends StandardTokenParsers { lexical.delimiters ++= List(".") def parse : Parser[Lis…

Scala標準のパーサーライブラリ

ScalaのParser Combinatorsで遊んでます。 Boost.Spirit.Qiのときにもやった"(123)"というカッコに囲まれた値を取り出す処理を書きます。 import scala.util.parsing.combinator.syntactical._ object Main extends StandardTokenParsers { lexical.delimite…

やたらと高性能な Scala の for 文

うなの日記 - for文を使った配列の操作 1.全ての要素に対して処理を行う(foreach) val ls = List(0, 1, 2) for (i <- ls) println(i) 0 1 2 2.条件抽出(filter) val ls = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) for (i <- ls if i % 2 == 0) println(i) 0 2 4 …

Any

全てのクラスのスーパークラスは Anyobject はシングルトンオブジェクトのためのキーワード

パターンマッチングでインスタンスを分解

パターンマッチングとかよくわかっていませんが、 Scala 勉強会でおもしろかったネタをメモ Pair を _1 と _2 に分解 object Main { def main(args : Array[String]): Unit = { var p = new Pair(3, 4) val Pair(x, y) = p // p を x と y に分解する printl…

6/13(金) は Scala 勉強会です

HHa(H派)メモ - 6/13(金)夜:Scala勉強会やります@新宿三井ビル34階豆蔵 私も参加しますこの機会に Scala をちゃんと覚えたい

アクター

Actor 全然わかんないやっぱり Haskell とか Erlang を勉強してから Scala やったほうがいいのかな

無限リスト

こうかな object Main { def main(args : Array[String]): Unit = { var ls = Stream.from(0) // 0, 1, 2, 3, 4, 5...の無限リスト作成 ls.take(5).foreach(println) // 0, 1, 2, 3, 4 } } こっちはメモScalaで無限リスト:Haskellライクに

Actor チュートリアル

あとで読むのでメモ Spirit of Apprenticeship (みならいだましい) - Scalaチュートリアル

タプルと、case class を使った名前の後付け

Rainy Day Codings - Scala で怠惰なリテラル表記 タプルを使うとこんな感じで書ける object Main { def main(args : Array[String]): Unit = { val ls = List( ("Akira", 23, "Japan"), ("Johnny", 38, "America"), ("Millia", 16, "Russia") ) ls.foreach{…

Structual Subtyping

静的ダックタイピングのようなもの「Tはxxメソッドを持っていればいい型」のようなことができるベター Generics です object Foo { def name = "Foo" } object Bar { def name = "Bar" } object Main { def dispName(x :{def name: String}) = println(x.nam…

type alias

型に別名を付ける object Main { def main(args : Array[String]): Unit = { type StringEx = String // String に StringEx という別名を付ける val str: StringEx = "abc" println(str) } } object Main { def main(args : Array[String]): Unit = { type …

yield

object Main { def main(args : Array[String]): Unit = { val ls = for (i <- List.range(0, 10)) yield i + 1 ls.foreach(println) // 1, 2, 3...10 } }

リスト操作

先頭に要素追加 var ls = List[int]() ls = 3 :: ls ls = 1 :: ls ls = 4 :: ls ls.foreach(println) // 4, 1, 3 全要素に操作 var ls = List(3, 1, 4) ls = ls.map(_ + 1) ls.foreach(println) Range for (item <- List.range(0, 5)) { println(item) } // …

XMLリテラル

object Main { def main(args : Array[String]): Unit = { var xml = <Root> <Person>Akira</Person> <Person>Johnny</Person> </Root> println(xml) } } <Root> <Person>Akira</Person> <Person>Johnny</Person> </Root> あれ、スペースが入ってる var person = <Person>akira</Person> var root = <Root>{person}</Root> println(root…

implicit conversion の練習

その名の通り「暗黙の型変換」 型変換のメソッドだけ用意しておけば、変換元の型にないメソッドが呼ばれた時に 変換メソッドが暗黙に呼ばれ、変換先の型のメソッドを呼び出すことができる これを使えば、特定の型にメソッドを追加する、ということもできる(E…

練習

手続き型的なリスト処理 object Main { def main(args : Array[String]): Unit = { var ls = List[int](3, 1, 4) ls = ls.sort((x, y) => x < y) for (x <- ls) println(x) } } 関数型的なリスト処理 List(3, 1, 4).sort((x, y) => x < y).foreach(println) …

implicit parameter メモ

まだよくわかってないけどメモ object Main { trait Adder[T] { def add(lhs: T, rhs: T): T } // int型の + 処理 implicit object IntAdder extends Adder[int] { def add(lhs: int, rhs: int): int = lhs + rhs } // String型の + 処理 implicit object St…

カリー化された関数を直接書く

カリー化とかよくわかってないですが、2ch の Scala スレにおもしろいのがあったのでメモ object Main { def add(a :int)(b :int)(c :int) = a + b + c def main(args : Array[String]) : Unit = { print(add(1)(2)(3)) // 6 } }

Eclipse プラグインの導入手順

SEの行き着くところ… - Scala開発環境の構築(Eclipse編)

メモ(あとで読む)

【新・言語進化論】次にくる!新登場言語 - 第3回:オブジェクト指向と関数型を兼ね備えた「Scala」気になる開発プロダクツ - 第7回 Scala 2.6.0-finalなぜScalaなのか?多忙な Java 開発者のための Scala ガイド: オブジェクト指向のための関数型プログラミ…