Scala
VM を Scala で書いてて得た知見。(再検証せずに書いてますので間違ってたら教えてください) for (i <- 0 until 100) { ... } より var i = 0 while (i < 100) { ...; i += 1 } の方がとっても速い。 for にすると for の中身が (Java レベルの) 別クラスに…
「安全じゃない」機能が簡単に使えるようになっているのは、どちらかというとJVMの上でScalaが実用言語としてやっていくための必要悪みたいなものであって、Scalaが言語として安全性を重視していないとかいい加減に扱っている、というわけでは無いのだと理解…
(だいぶ前に書いた記事で、公開にあたって再検証してないので、間違いがあったらごめんなさい。)ref: http://d.hatena.ne.jp/h_sakurai/20081213#p1flagir を作るときに参考にさせてもらったのですが、ProGuard のところで躓きました。 $ java -jar proguard…
ref: http://d.hatena.ne.jp/kmizushima/20090615/1245002849またまたみずしまさんにいろいろ教えてもらいました。ありがとうございます。 束縛前の val 変数を参照できてしまった。かなりはまった。これは Scala のバグと言っていいと思う *1 。どう直すか…
flagir を作るなどの過程で感じた Scala への不満を列挙。こんな記事を (日本語で) 公開しても誰も得しないし誰も読まないだろうから、やめようかなとも思ったんだけど。ぼくの勘違いなら指摘してもらえるかもしれないし、記録という意味もあるのでやっぱり…
2016/08/11 追記 Java アプレットと自宅サーバが滅びたので、Android アプリとして作り直しました。https://play.google.com/store/apps/details?id=io.github.mame.flagir 国旗を描いて検索するアプレットです。国際競技の観戦などのお供にどうぞ。 ref: ht…
zip と map で簡単に実装できればまあいいかなと思ったんだけど、 val xs = List(1, 2, 3) val ys = List(4, 5, 6) xs zip ys map { (x, y) => x + y } // error: wrong number of parameters; expected = 1ぐああー。引数を n 個受け取る関数と n-tuple を …
資料: http://www.scala-lang.org/docu/files/ScalaByExample.pdf 9. Lists リストの作り方。 val fruit = List("apples", "oranges", "pears") val nums = List(1, 2, 3, 4) val diag3 = List(List(1, 0, 0), List(0, 1, 0), List(0, 0, 1)) val empty = Li…
資料: http://www.scala-lang.org/docu/files/ScalaByExample.pdf 5. First-Class Functions 関数がファーストクラスな話。 5.1 Anonymous Functions すでに出てきたと思うけど (x: Int) => x * x が匿名関数。Int 型の引数を 1 つ受け取って、二乗を返す。…
ref: http://d.hatena.ne.jp/kmizushima/20090513/1242218451 みずしまさんにいろいろ教えてもらってしまいました。ありがとうございます。なんでも晒してみるもんですね。 static メソッドと普通のメソッドが混ざってるクラスは表現できるのかしら。 static…
Scala By Example を読みます。資料: http://www.scala-lang.org/docu/files/ScalaByExample.pdf 1. Introduction いんとろだくしょん 2. A First Example imperative に書いたクイックソートの例。 def sort(xs: Array[Int]) { def swap(i: Int, j: Int) { …
Scala を勉強してみます。売り文句だけ見てみると 1. 手続き型でも関数型でも書ける 2. 純粋なオブジェクト指向 3. 柔軟な文法で DSL しやすい 4. パターンマッチ 5. 静的型付け (ジェネリクスあり) 6. JVM で動く (Java の資産を活用できる) 1 〜 3 は Ruby…