Scala

Scala のロゴは階段のカタチ

Where does the Scala logo come from?にてScalaのロゴの由来が説明されてたので紹介。 Scala(Scale) はイタリア語では階段を意味します。 Scala 言語が開発された、EPFL(スイス連邦工科大学)には面白い形のモダンな階段があり、Scala のロゴはこの階段から…

Scala on NetBeans 6.9.1

Scala Plugins for NetBeans 本家の http://wiki.netbeans.org/Scala にある手順で Scala Plugins for NetBeans を入れたら、NetBeans 起動しなくなりました・・ http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuil…

Scala の Swing サポート#2 イベント処理

イベントの扱い SimpleSwingApplication を使用した簡単なイベント処理の例です。Frame にマウスクリック回数を表示する Label を配置します。 import swing._ object Counter extends SimpleSwingApplication { val label = new Label { text = "0" listenT…

Scala の Swing サポート#1 SimpleSwingApplication とレイアウトマネージャ

Hello, World! 単純な Swing アプリケーションは以下のように SimpleSwingApplication を継承することで簡単に作成することができます。 import swing._ object Example extends SimpleSwingApplication { def top = new MainFrame { title = "Hello, World!…

Scala2.8 の新機能 特化型パラメータ

Scala におけるプリミティブ型の扱い Scala は純粋オブジェクト指向言語であり、Java にあるプリミティブ型は存在しません。Java の int などはScala では Int というオブジェクトとして扱われます。しかしこれはコンパイル段階の話で、出力されるバイトコー…

sbt(simple-build-tool) のカスタムアクションでScalaのビルドを制御する

sbt の導入については blog1.mammb.com を参照してください。 カスタムアクション sbt のアクション(compile, test, run など)は、sbt.DefaultProject.scala という Scala コードにて定義されています(実際には BasicScalaProject という抽象クラス)。この D…

MacPorts で Scala 2.8 のインストール

port install Scala2.8 から scala27 と scala28 の 2つが選べるようになってます。 port search scalascala27 @2.7.7 (lang, java) The Scala Programming Language scala28 @2.8.0 (lang, java) The Scala Programming Language scala28 をインストール。 …

Scala 2.8.0 の先に

Scala 2.8.1 2.8のバージョンアップで大きな問題は発生しなかったが、2010年9月から10月を目処にの小規模のバグフィックスリリースが予定されているとのこと。 Scala 2.9 ライブラリの強化を行い 2010年の12月から2011年の1月を目処にリリースが予定されてい…

Scala IDE for Eclipse for Scala 2.8

Helios 実験的サポート Scala IDE for Eclipse が Helios 実験的サポートになってたので入れてみた。nightly だけど・・ The Scala IDE のアップデートサイト http://download.scala-ide.org/nightly-update-helios-2.8.0.final パースペクティブで Scala 選…

Scala IDE for Eclipse for Scala 2.8.0.RC4

The Scala IDE for Eclipse for Scala 2.8.0.RC4 available now ということで、Eclipse Helios (3.6 RC4) に入れてみた。 Scala IDE のサイト http://www.scala-ide.org/ では"Eclipse 3.6 is not yet supported"とうたわれているが、入れちゃいます。 The S…

メソッドの戻り値推論

これは普通に戻り値 4 def method() = { 2 * 2 } println(method) // 4 これも戻り値 4 def method() = 2 * 2 println(method) // 4 こうするとUnit def method() { 2 * 2 } println(method) // () こうすると当然戻り値 4 def method():Int = { 2 * 2 } pri…

foldLeft と foldRight のエイリアス

foldLeft 初期値を1として、arrの和を得る。 val arr = List(2, 3, 4) arr.foldLeft(1){(x, y) => x + y} 1 + 2 + 3 + 4 で 10 となる。短く書くと、 arr.foldLeft(1)( _ + _ ) foldLeft には /: というエイリアスがあり、以下のように書ける。 (1 /: arr){_…

可変長引数としてリストを渡す

可変長引数の定義 可変長引数にするには以下のように書けば def output(strs: String*) { strs.foreach(print) } output("hge1 ", "hoge2 ", "hoge3 ") 以下の出力が得られます。 hge1 hoge2 hoge3 List[String]を渡す 可変長引数を取る関数にListを渡すと、…

Scala の各種起動方法

今更ながらScalaの起動方法まとめ。 Scala インタープリタ ちょいと試すにはインタープリタ。 >scala Welcome to Scala version 2.8.0.RC2 (Java HotSpot(TM) Client VM, Java 1.6.0_12). Type in expressions to have them evaluated. Type :help for more …

vim の Scala プラグイン

sbaz にて scala-tool を取得すると、各種ツールのプラグインが入手できます。ここでは vimプラグインを適用してみます。 sbaz によるscala-tool-supportの取得 以下のコマンドにてscala-tool-supportを取得します。 > sbaz install scala-tool-support plan…

eclipse のScalaプラグインがバギーなのでNetBeanプラグインを試してみた

scala 2.8 のダウンロード http://www.scala-lang.org/downloads から最新版ダウンロード(scala-2.8.0.RC2.zip) パスにスペースを含まないディレクトリに解凍。ここでは C:\scala\scala-2.8.0.RC2 とした。 環境変数に以下を設定 SET SCALA_HOME=C:\scala\sc…

trait のミックスインはwithだけのがきれいだと思うのですが

トレイトのミックスインには extends か with を使いますが、何が違うのでしょうか。以下のトレイトがあった場合、 trait traitA trait traitB Foo クラスに traitA をミックインするには以下のようにします。 class Foo extends traitA traitB のミックイン…

型パラメータの境界とは

パラメータ境界 型パラメータには以下の3つの境界が設定できる。 上限境界(upper bound) 例 hoge[A <: T] A が T のサブタイプでなければならない 下限境界(lower bound) 例 hoge[A >: T] A は T のスーパータイプでなければならない 可視境界(view bound) 例 hoge[A A が T として扱える(暗黙の型変換により変換可能または A が T のサブタ</:>…

型パラメータの変位指定

型パラメータの変位 型パラメータには + や - の変位アノテーションを付けることで変位指定ができる。型パラメータの変位には以下の3つがある。 不変(nonvariant) : [A] 共変(covariant) : [+A] 反変(contravariant) : [-A] 不変 不変とした場合、funcの引数…

Scala における列挙(Enumeration)

Scala の列挙サポート Scala では列挙を言語の構文としてではなく、scala.Enumerationというライブラリとして提供している。Color の列挙を定義するには以下のようにする。 package etc9 object Color extends Enumeration { val Red, Green, Blue = Value }…

Scalaのためのシンプルなビルドツール SBT

SBTとは SBT(simple-build-tool)はScalaのためのシンプルなビルドツールです。google code でホストされています。 http://code.google.com/p/simple-build-tool/今回はWindows環境にてSBTを使用してみます。現在の最新版である sbt-launch-0.7.3.jar を使用…

Scala の JDBC ライブラリ scala.dbc について

scala.dbc は Scala に添付のデータベース操作用のライブラリです。ORM ではなくて、JDBCのラッパです。メンテナンスもあまりアクティブでないため、そのうち無くなると思いますが、SQL を DSL のようにタイプセーフで書けるので勉強になるかも・一応 H2 を…

関数は Function トレイトである

第一級関数 Scala において、関数は第一級関数 first-class function です。第一級関数なので、関数を値の様にして扱うことができます。例えば以下のように関数を f という値として定義できます。 val f:Int=>Int = x=>x*x println(f(3)) 結果は 9 が出力さ…

名前渡し Call-by-name にて引数のコード実行タイミングを制御する

Java で以下のコードにてgreeting()を呼び出すと、 public String hello() { return "HELLO"; } public void print(String s) { System.out.println(s); } public void greeting() { print(hello()); } 最初に hello() メソッドが呼ばれ、その結果の HELLO …

コレクションと関数による関数型プログラミングの真価

入力をどう変化させるか? 命令型のプログラミングでは、制御(命令)フローを考え、そのフローにてデータをどのように変化させるかを考えますが、Scala では入力を出力に変換する という考え方にてロジックを組み立てていきます。 奇数を抽出する場合、命令…

Liftを用いたWebアプリケーションの作り方 その3

今回は、で作成したto-doの登録結果を一覧表示できるようにします。完成後の画面は以下のようになります。 TD.scalaの変更 to-do一覧には、to-doが完了したものを含めて表示するか、除いて表示するかのチェックボックスを設けます。このチェックボックスの設…

Liftを用いたWebアプリケーションの作り方 その2

昨日のblog1.mammb.comに続き、本日は、Lift の公式ページにある Getting Started を参考に・・ プロジェクトの作成 今回作成するプロジェクトはtodo管理アプリケーションとなります。前回と同様に Maven によりプロジェクトを作成します。 mvn archetype:ge…

Liftを用いたWebアプリケーションの作り方 その1

Liftとは Scalaで書かれたWebアプリケーションフレームワークです。現存の Seaside, Rails, Django, TurboGears, Wicket などのいいとこ取りのフレームワークとされています。 ここでは、http://wiki.liftweb.net/index.php/HowTo_start_a_new_liftwebapp に…

apply メソッド!

Scalaのオブジェクトとクラスではapplyという名前のメソッドは、メソッド名なしで呼び出される特殊なメソッドであ〜る。 package ApplyDemo object Foo { def apply(n:Int) = printf("FooObject({0})\n", n) } class Foo { def apply(n:Int) = printf("FooCl…

Lazy Evaluation

遅延評価 必要になったときに評価 値の代入などに使用 相互参照で解決できないときも使用 例 okButtonが使用されるまでインスタンス化されない lazy val okButton = new JButton("Ok")