Java

メソッドオーバーロードの動的束縛とか

Javaのメソッドは名前が似てるオーバーライドとオーバーロードという二つの概念があります。オーバーライドはサブクラスでメソッドを再定義するもので、オーバーロードは同じ名前で引数が異なるメソッドを複数定義する仕組みです。で、今回はJavaのメソッド…

enumをもうちょっと使う

enum basics - しげるメモで基本的なことをおさらいしたので、私がよく使ってるenum関係のパターンをいくつか。

最近のVisitor

最近よくVisitorを使うので、もうちょっと使いやすいスタイルにならないかなーと思って作ったのがこれ。

enum basics

仕事柄、Javaのenumを使うことが多いのですが、あまり世の中のプログラムでenumを全力で使ってるところをあまり見かけません。ということで、自分でもどうなのと思うときがちらほらあるenumの使い方をまとめてみようと思いますが、とりあえず今回は普通の復…

Commandのサンプル

あんまりコマンドじゃない。コマンド++

Visitorのサンプル

某所でVisitorのサンプル書くとか言う話題になったので。

似非PDAをfluent interfaceで

みんな変態にしかスターをくれないので。型変数使うとプッシュダウンオートマトン(のような動作)を実現できたりもする。ただし、スタックに積めるのが1種類の値だけなのでかなりイマイチではある。 System.out.println( new Xml() .tag("hello") .attribute(…

DFAをfluent interfaceで書いてみる

某所で変態扱いされたので解説がてら。こんな "1 plus 2 minus 5 is" みたいなことを書けるDFAをJavaで書いてみる。単純に現状態を表すのクラスの中に「次状態 入力() {...}」なメソッドを作ってるだけ。 public class Dfa { public static void main(String…

プラクティス

package-info.java から書くということを実践してみようかと

異常系の判断基準

id:daisuke-m と話してたことをまとめる。 元ネタはThrowableについて本気出して考えてみた - 都元ダイスケ IT-PRESS。異常が起こったとき、だいたい下の方法で対処してます。 RuntimeException系をスロー Exception系をスロー AssertionErrorをスロー (また…

"literal".equals(s) のまとめ

3つ流派があって ぬるぽが飛ぶのが嫌だから、nullでないことが保証されるリテラルを先に書く ぬるぽが飛ばないとエラーを隠すので、ぬるぽを発生させる可能性のある s を先に書く equalsは同値比較演算で交換可能のはずなのに、順序を変えると動作が違うのは…

SunのコンパイラとEclipse JDTで動きが違う

HudsonがEclipseでコンパイルできなかったという話題が1か月前くらいにあって、その調査をしているときにjavacとJDTで微妙に動作が違う点を見つけました。 class Hoge<T> { void h() { class Foo { T t; } Foo o = new Foo(); boolean b = (o instanceof Foo); </t>…

"literal".equals(s)

なんか流行ってたので。私はs.equals("literal")派です。理由は 読みやすい 静的解析しやすい "literal".equals(s) はsにnullが認められていない時にも正常に動いているかのように見える とはいっても、プロジェクト全体でぶれてなければ問題ないとは思いま…

否定演算子が目立たない

ので、== false と書くパターンがあります。 if (hoge.isFoo() == false) { ... } 最近は上記を使っているのですが、3つくらい書けば目立つんじゃねと思った if (!!!hoge.isFoo()) { ... } たぶん偶数回しか書かないというバグを生みそうなのでやめた。

数学ライブラリ

手に馴染むフリーの数学ライブラリがJavaになかったので作成中。 sparse open-vector sparse open-matrix vector functions matrix functions graph functions 数学から離れすぎ+チューニングの世界から離れすぎでけっこう苦戦してます。

Yukara Wisdom リリース

Yukara プロジェクトサイトをオープンし、SeasarConで id:masataka_k がしゃべった Yukara Wisdom をリリースしました。 http://yukara.ashikunep.org/ http://yukara.ashikunep.org/wisdom マーケット的な何かとかは -Yukara-Wisdomリリース - まさたか日記…

using のアレ

java.io.Closeable の事も忘れないであげて。 - 設計と実装の狭間で。 に対して、Syntax Sugarっぽいものを目指してみた。 public abstract class Using<S extends Closeable, T extends Throwable> { abstract S value() throws T; abstract void process(S value) throws T; void play() { new Or() {</s>…

Javaバイトコード復習 (0) - 導入

ちょっとアイデアが出たのでバイトコード上でのモデル検査をやろうかなと思ってます。ただ、バイトコードを最後に触ったのが4年前だかですっかり忘れてたので、復習の過程をまとめていこうかと。バイトコードはバイナリエディタで書くのがつらすぎるので、Ja…

可変長引数ではAuto Unboxingが優先される?の理由

可変長引数ではAuto Unboxingが優先される? - kaisehのブログへのツッコミ。米欄に書こうとしたら長すぎたのでこちらに。 ところが可変長引数の場合は、評価の優先順位が違うみたいです。次のようにプログラムに書き足すと、 public class Test { static vo…

Javadocを書かない

前回はJavadocを書く - しげるメモというタイトルで話を進めましたが、今回は逆にJavadocを減らすプラクティスについてメモがてら。私は別にJavadocを書くのが好きなわけではなく、単純に書いたほうがめんどくさくないと思うのでそうしてます。ただ、Javadoc…

Javadocを書く

最近は時間を作ってEffective Javaの2版をよんでます。Effective Java (Java Series)作者: Joshua Bloch出版社/メーカー: Prentice Hall発売日: 2008/05/08メディア: ペーパーバック購入: 6人 クリック: 65回この商品を含むブログ (42件) を見るほとんど1版…

簡単なフィルタ

こんな言語(?)でやってみようかなと。 class Hoge { public int a; public int b; } List<Hoge> list = new ArrayList<Hoge>(); ... List<Hoge> filtered = ListFilter .source(list) .includes("a != 0") .includes("b > 0") .excludes("a > b") .toList(); includes("conditi</hoge></hoge></hoge>…

Javaが不得意なこと

サンプルに使うDSL考えてて、あまりに思いつかないので一人ブレスト。JavaやっててついDSLにしちゃう部分。 複雑なデータ構造の構築 duck typingのほうが楽そう データ構造の検索 論理型言語が得意で、手続き型言語は向いてない シンボル参照 シンボル定義が…

Ganymede

Ganymede中

メモ

とりあえずグラフ理論忘れすぎ もう一度勉強しなおす 数学系のライブラリをちゃんと調べておく コンパイラに使う程度の数学だとかなり浅い 車輪の再発明は趣味の範囲に http://jung.sourceforge.net/ http://acs.lbl.gov/~hoschek/colt/

循環依存関係とか

何でこんなことやってるかというと、会社の同僚から「でかいプロジェクトをいくつかのプロジェクトに分割するときどうするよ」って言うネタをいただいたからでした。今考えてみると、単に弱連結成分を検出して、その中のどこか適当なところでカットしてあげ…

循環依存関係の検出を高速化

寝付けなかったので書いてみた。rt.jarも1分以内に終わる。以下、プログラム。

ライブラリ内の循環依存関係を持つクラスの検出

さっきのエントリにあるrt.jarは終わる気がしなかった(前のエントリから走らせ続けて2/10000くらい)のでASM3.1に含まれるasm-allについて調べてみました。 [org.objectweb.asm.AnnotationWriter, org.objectweb.asm.Attribute, org.objectweb.asm.ClassReade…

O(n^4)

クラス間に循環依存関係があれば、それをグループ化するプログラム書いてました。 1時間くらいで書いてみたら間接依存関係の検出がO(n^4)のアルゴリズムになって、rt.jar (10000クラス以上)がどうも終わる気がしません。もうちょっと待ってみるテスト。

いつもの

いつもどうやってんの?と急に聞かれたので。自分で書いててどうかなと思ったりも。 全体 人間が考えやすい言語で脳に定着させて、それが揮発する前にコードに起こすのが一番速そう。 登場人物と、その役割を決める とりあえずインターフェースを書く UMLで…