2008-01-01から1年間の記事一覧

ビューティフルコードようやく買えた

ようやく昨日ビューティフルコードが売っているのを発見した。 帯が切れてたりしていつもなら絶対に買わないんだけど、 ここで買っておかないといつ手に入るかわからないので迷わず買った。帰りの電車で目次をみてて、せっかくだから、はじめから順に 読むの…

typeは関数型の別名をつけるためのものか

複数の関数で同じ意味合いの引数の型を一括で制御できるな。 こんな関数があるとして def f(x: (Int) => Int) = x(100) f((y: Int) => y * 100)なんてのがtypeを使って書くと type F = Int => Int def f(x: F) = x(100) f((y: Int) => y * 100)ってなる。 こ…

defがよくわからない

defは関数を宣言するとき。 って思っているのだが def a: String = "A"みたく変数を宣言できちゃう。 厳密には変数でなく関数なのかも。とりあえず、defとvalで比べてみる scala> def a: String = "HOGE" a: String scala> var b: String = "PIYO" b: String…

今日(いまさら)知ったこと

Pythonと同様""""""でくくれば、複数行にわたって書ける。 scala> var s = """ | hogehoge | piyopiyopiyo | | """ s: java.lang.String = hogehoge piyopiyopiyoXMLはそのままコードに書ける scala> var xml = <root><hoge></hoge></root> xml: scala.xml.Elem = <root><hoge></hoge></root>scala.xml.Elemクラス…

HashMapをつかってみた。

Javaからいつの間にか脱線。 HashMapへの要素追加。 import scala.collection.mutable.HashMap var h = new HashMap[String, Any] h + ("hoge" -> "HOGE") h.update("fuga", "FUGA")updateメソッドで追加するのと、 +メソッドで追加するのとできるみたいだ。…

Staticインポートって

先週Scalaをいじっていて、Javaのジェネリックに行き着いた。 ついでといってはなんだけど、Java5の新機能も確認してみている。(現在進行中) Staticインポートとは? Staticメンバーをインポートできる。 意外と地味? つかってみる import static java.la…

パスって重要。

Scalaのapiを見つけたときふと思ったこと。 これは、 Javaにライブラリの説明があるapiがある>scalaにもあるのでは?>発見。 にいたっている。幸いにしてJavaにapiがあることを知っていたから今回 もscalaにもあるのでは?って発想にいたって、発見できた…

ArrayBufferを知る。そしてapiあった。

みずしまさんよりコメントをいただいた。ありがとうございます。java.util.ArrayListもいいけど、 scala.collection.mutable.ArrayBufferってのがあるのか。よくよく考えたら、ダウンロードしたpdfしか見てなかったけど、 Javaみたくapiあるんじゃないか?と…

Genericsに絡んで書き方注意。

ArrayListを使うのに、 var a = new java.util.ArrayList() a: java.util.ArrayList[Nothing] = []となって、型がNothingとなってしまってaddで要素を追加しようとすると エラーになった。 あ〜これが、うわさのGenericsか!と思って var a = new java.util.…

またArrayにはまった?

最近Arrayすきだな〜。 本日発見。 var a = new Array(3)見たく、配列の長さを指定してnewもできる。 ついでに、 中身を取得?するapply 中身を更新するupdate Iteratorを返すelements 指定した要素の配列を返すsubArray flatMapこれはまだためしてない。 っ…

JavaでいうGenericsか。

ソースをみてて意味がわからなかった def func[A](x: List[A]) = ....の[A]の意味。 いろいろ調べてみると、JavaでいるGenericsと同じ感じらしい。 Javaは1.4以降はほぼ書いたことがなく、新機能を本でみてたくらい だったので、この結論にいたるのにかなり…

Listとかいろいろさわった記録。

List リストの宣言とheadとtail scala> var l = List(1, 2, 3) l: List[Int] = List(1, 2, 3) scala> l.head res0: Int = 1 scala> l.tail res1: List[Int] = List(2, 3)headとtailはSchemeのcarとcdrに相当するっぽいな。 ついでにいうと、consも使える。 c…

getElementById()でname属性が検索される?

getElementById()でname属性を検索してエレメントを取得できるという話を聞いた。 いや、絶対に推奨されている使い方ではないだろう。 そもそもIDはページ内でユニークだからgetElementById()はエレメントを返して、 複数設定できるname属性用にArrayオブジ…

Pythonにはarrayもあるらしい。

昨日の記事、に対して、 id:bonlifeさんから、ツッコミをいただいた。ありがとうございますm(_ _)mPythonのList([])はArrayと同一とばかり思っていました、、、 Arrayに関してはarrayモジュールがあるんですね。 知らなかった〜。 そうなると、arrayって変…

for文になれるためにいろいろ試す

for文について PythonはJavaScriptのようなインデックスでループさせるような for文はなく、for in でしかない。 JavaScriptで書くと var array = new Array('A', 'B', 'C'); for(var i = 0; i < array.length; i++){ alert(i);//A B Cと出力される } ってい…

lambda式は

Pythonのlambda式は、勝手にJavaScriptの 匿名関数とイコールだと思っていたけど、 ずいぶんと違っていて、単一の式しか使えないらしい。 var f = function(x, y){if(x > y){return x;}else{return y;}}; f(3, 4); なんてのが、 f = (lambda x, y : if x > y…

eval()は悪か?

文字列をJavaScriptコードとして実行するeval()。 とても便利だけど、考えもなしに使うと、セキュリティホールにもなりかねない。 だから安易に使うものじゃないと思う。 考えに考え抜いてもう使うしかないような切り札とすべき。 引数で渡された名前を持つ…

Google Gadgetを作ってみよー

今日は、JavaScript Day! と勝手に決め、前々から気になっていた Google Gadgetの記事が出ていたので触発された。 ちょっといじってみよ。 はじめに builderの『5分で学ぶGoogle Gadget開発』を 読む。ふむふむ。 作るのはxmlベース。Contentの中にJavaScrip…

引数の値渡しと名前渡し

値渡しと名前渡しとは? 関数の引数渡しの方式で、 実引数を評価した結果を仮引数に渡すのが値渡し(普通に渡すのと同じ) 実引数を評価せず、値が必要になるまで評価を待つのが名前渡し という。 宣言のしかた 値渡し 仮引数名: 型名 名前渡し 仮引数名: =>…

scalacをするのとしないのと

http://d.hatena.ne.jp/daisun/20080322/1206163454 の最後に書いた、コンパイルしなくても動くとか動かないとかの謎。 いまだ理解できていないし答えも出ていないけど とりあえず考えたことをまとめておく。 Javaは? まず、scalaもJVM上で動作するのでJava…

どうやらobjectがclassってのは間違いのようだ

何日か前にscalaではJavaでいうclassはobjectって書くと書いたけど、それは間違っていたようだ。 classはやっぱりclassみたい。 scalaではclassはコンストラクタもかねてclass クラス名(){}でかけるようだ。 では、objectっていうのはなにか? objectはmodul…

小学生のうそが本当になる機能

初めてscalaをみて衝撃をうけたのが、 Traitって機能のwithを使ったMixin。 なんとインスタンスに対してクラス継承するようなことができる。 class Piyo(){ } trait Hoge(){ } var piyohoge = new Piyo with Hoge みたいに。つまり、 「俺、昨日、魔法使いが…

ソースを読み解く

サンプルにでていた def sum(f: Int => Int): (Int, Int) => Int = { def sumF(a: Int, b: Int): Int = if(a > b) 0 else f(a) + sumF(a + 1, b) sumF }これを読み解く。まず、 def sum(f: Int => Int): (Int, Int) => Intsumって名前の関数を宣言している。…

なんとなく似てる

Scalaの概念というか考え方というか、どことなくPythonに似てるなと 双方のfor文を眺めていたら、思った。

It's OKを久しぶりに聴く。

帰り道、久しぶりにPearl Jamのライブ版の『Daughte』rから『It's OK』につながっていく お気に入りの曲を聴いた。 あそこまで"It's OK"って連呼されると、最近の自分のもやもやも前向きに考えられそうな 気がした。1つ言える事は、『It's OK』はPearl Jam…

最近言及したキーワード

みたら、えらいはずかしいのがでかい文字になってる。 気をつけよ。

パフォーマンスについていろいろ知りたくなった

SQL

結合条件にtrimとか関数付けるとインデックスが効かなくて、全件検索に行くらしい。 へー。 そもそもなんで結合条件になるキー項目にtrimとかつけなきゃいかんじゃ! ぷへへーーー とか思っていたけど、どうやら余計なブランクが入る可能性があるかららしい…

ついでにOz/Mozartもインストール。でもトラブル続き。

ついでといってはなんだけど、 『コンピュータプログラミングの概念、技法、モデル』を買ったので Oz/Mozartの実行環境も整える。 1つめのトラブル とりあえず、パッケージをダウンロードしてきてインストール。 ここでまず1つ目のトラブル。 どこに入った…

開発環境を作ってみる。

プログラミングGaucheを買ったので、Gaucheの実行環境を整える。 Windowsだといまいちそうなので、Mac(G4)に開発環境を作る。 IntelMacではないけど、元々Ruby、Python、Javaなんかがデフォルトで 入っていたりするので、いずれは開発環境を整えたいなと思…

超入門=>まだ入門もできていない

とりあえずインストール windows http://www.scala-lang.org/からダウンロード ダウンロードしたファイルを解凍 binにpath通す mac macportsがあれば、 sudo port install scala でかってにやってくれる。 すげー楽。 わかったこと 変数と定数 変数はvar、定…