java

リストリテラルなら…

新しいJava7にimmutableなリストを記述できるリテラルが導入されるけど、Java5ならこういうヘルパメソッドを用意すればいいだけの話なのだ。(誰でも思いつくけど) public static <T> List<T> constList(final T... elems){ return Collections.unmodifiableList(</t></t>…

あまりよくないObjectのidentityの使い方

明らかに不穏です。 // finalを付けないと更に不穏なコードにできます。 private static final String SPECIAL_TOKEN = new String(""); public static void methodXXX(final String arg){ if(arg == SPECIAL_TOKEN){ // なんか特別な処理 } // 普通の処理 }…

例外という語彙

Javaの例外を使ってると(他の言語は知らないが)、例外って要するに、その例外の原因を示す一種の語彙じゃん、って思えてくる。 NullPointerException nullのせいでうまくいきませんでした IllegalArgumentException 変な引数指定すんな OutOfBoundsExcepti…

EclipseのQuick Assistを活用しよう

EclipseのQuick Assist/Fix(Ctrl + 1)機能を活用しよう。 // Invert conditions 機能 if(!a && !b); ↓ if(a || b); // Invert equals 機能 someString.equals(""); ↓ "".equals(someString) // Join nested if statements 機能 if(a) if(b); ↓ if(a && b); E…

定数と比較するレベルでも頻出するようならさっさとメソッドにすべし

今日、自分で学んだこと。 SOME_CONSTANT.equals(someString) とかいう記述が頻出するなら、この程度であってもメソッドに置換すべし。 isSomeConstant(someString);

クソコードの特徴

同じコードがとにかく何度も続く。これが一番の特徴。 色々な問題を1つの関数に持ち込んでいる。問題の分割がへたくそ。同じ問題を解くコードが複数個所に現れる。 for文が少ない。繰り返し構造を積極的に用いてない。クラスなどの抽象構造が少ない。 メソッ…

Groovy.exe(x86)はJAVA_HOMEがx64Javaを指していると動かない

Groovyのお話。groovy.batは動くので、x64環境ではgroovy.exeは使わないほうがいいかも。 -jh "x86なJREパス" で呼び出しても別にOK。

JDT(Eclipse)のASTパーサでJavaソースをパージング

仕事の暇時間に、EclipseのJDTについてくるASTParserで、適当なソースをパージングしてみたりした。EclipseのASTParserを試すソースをあらわすchar[]配列さえあれば、別にビルドパスだのなんだの関係なしにその場でパース、即、メソッドの一覧などSyntaxTree…

Eclipseの機能 - Javaスクラップページ

今まで気づいていなかったEclipseの機能、Javaスクラップページ。感じとしては、VBのイミディエイトウィンドウや、他言語のインタラクティブコマンドラインを想像するといいかもしれない。適当に書いたJavaの式を評価してその場で値を教えてくれる。

whileで絶対に最後でbreakするぐらいならif使いなさい

while(records.hasNext()){ // some operations break; // all paths reaches } (^ω^;;) if(records.hasNext()){ //some operations } でいいだろjk。というよりももっとひどいコードを最近毎日読んでいます。 まあまだひどさで言えばマシレベルかな。

Javaでの半角 ⇒ 全角変換などの実装は簡単だった

ちょっと仕事でJavaでの半角全角変換など実装してみた。案外楽だった。 JavaはStringインスタンスの時点でUTF-16文字列となっていることがかなり有利に働く。少なくともJavaではそこまで文字変換を怖がる必要はないっぽい。文字変換の実装には下記のパターン…

Javaの可変長引数の罠

なんだかくだらないし、罠というほどでもないけれど、多少何か考えさせられる例: public class UnexpectedVLA { public static void main(final String[] ignored){ // バグを呼ばない. System.out.println(getLowest(3, 1, 5, -3, 4)); // バグを呼ぶ. fin…

文字列比較(かきすて)

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FineDetailを前に見ていて、どうすれば「数字を特別扱いしたソートになるだろう?」と考えていた。 そしてとりあえず今日作ってみた。課題として手ごろだ。 普通の文字列比較 まずは普通の文字列比較。これを使う…

Return-Type-Based Method Overloading in Java(かきすて)

おもしろそうな記事発見:Return-Type-Based Method Overloading in Java http://today.java.net/pub/a/today/2008/07/31/return-type-based-method-overloading.html Jasminってなにさ(Java-ASM => Javaのアセンブラツールです) 記事の途中に出ているJasm…

複数キーのハッシュマップ

複数のキーから一意の値を取り出すようなハッシュマップ(java.util.HashMap)をもし作成したい場合、キー部分に複数キーを表現するようなオブジェクトを使うよりは、できるならば文字列連結で複数キーを表現してしまったほうがいい。*1(あとから管理する者も…

fold - fold([lr]1?)?, reduce, Aggregate, accumulate

http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29Common Lispにはreduceという関数があり、これはSchemeやHaskellでいうところのfoldにあたります。 いわゆる畳み込み関数というやつで、『畳み込みする関数』と『その初期値』を使って、リス…

匿名クラスつかいまくりんぐ

Javaでメソッド内の変数にアクセスしまくりんぐの匿名クラスつかいまくりんぐプログラミング。 後の保守が多少不安である。しかし、Lambda的なものが少ないからこうなりがちになるのも仕方ないかなあ、と。 え?ちゃんとクラス分析やれって?ごもっともで。…

インナークラス、匿名クラス

(2008/10/22に加筆。) Javaではインナークラス、匿名クラスの違いがわかってると便利です。 以下のクラスから参照できる変数スコープの違いをはっきりと示すことができるとかっこいいでしょう。 staticなインナークラス ただのインナークラス 匿名クラス …

Javaの現場より

言語自体を理解していない人が多い 特に参照の値渡しが徹底されていることが理解できていない VBやC++, C#のものとは違う。 Javadocを読まない人が多い コードをコピペするだけ。その内容を理解しなくても平気な人が多い。 初心者は8割の確率でバクダンを持…

Cover/Hide ExplicitException With RuntimeException

Throwable属の中でもRuntimeException派生じゃないException派生はいちいちキャッチしなくちゃいけないので、メンドイ。 まあ、そのかわりにプログラマには例外発生箇所がきっちり分かるというメリットがあったり、また、明確に例外が漏れ出さないことを保障…

java.util.regex.Patternクラスのソース

ざっと5000行ある…。これを読むのは辛い…。

do-whileを完全に忘れていた

Javaのdo-whileを完全に忘れていました。存在を5割ほど忘れていて、意味も取り違えていました。最低1回は実行されるループなのでした。 do { System.out.println("line to be printed out only once."); } while (false); VBAでいえば、下記相当: Do Debug.p…