Program

部分文字列

部分文字列って分かりにくくない? 第一引数はいいとして、第二引数は言語によって、インデックスを指定したり長さを指定したり、その両方が使えたり*1。 どういう名前なら分かりやすいだろう? substringByIndex, substringByLengthとか? あー、Pythonライ…

せめて学校で教えて欲しかったこと

なんというか、結局独学しかないんだろうけど。 バージョン管理ツール ビルドツール ユニットテストツール LaTeX awk/sed、もしくはperl、というか正規表現

リレーショナルDBのテーブル設計

平気で重複データ持たせたり一つの項目にデータいっぱい突っ込んだり*1するのって、目に付いたものを何も考えずにクラスにしちゃうのと同じ感覚なのかなぁ。 *1:配列みたいな感じに

じゃんけんプログラム

さて、じゃんけんプログラムで多態性を実現するならどんな感じだろうか? とりあえず、グーとチョキとパーしかないんだから、enumを使ってみた。 public enum HandShape { ROCK("グー") { public void judge(HandShape enemy) { switch (enemy) { case ROCK:…

Listをsplit

書いてみた。 public final class ListUtils { private ListUtils() {} public static <E> List<List<E>> split(List<E> list, E delim, SplitMode mode) { if (list == null || mode == null) { throw new NullPointerException(); } List<List<E>> result = new ArrayList<List<E>>(); Li</list<e></list<e></e></list<e></e>…

case

JNI Java Native Interface プログラミングのサンプルでstructConverterってのがあるんだけど、それがコンパイルできなかった。 原因は以下のようなコード。 public class SwitchTest { public static final int HOGE = 0; public static void main(String[]…

独自例外

上のように書くとアレか、独自例外はちゃんと考えて作って欲しい、と読めてしまうな。 個人的には、独自例外はあまり定義したくない/して欲しくない派*1なんだけど、これは意見が分かれるのかも。 例外クラスってExceptionとかRuntimeExceptionを継承するだ…

例外

Javaにはチェックされない例外と、チェックされる例外があって、これの使い分けは難しい。 Effective Javaでは、チェックされない例外をさらに実行時例外*1とエラー*2に分けていて、 新たなErrorサブクラスを実装しないことが最善です。 実装するすべてのチ…

StringBuilderとかString#formatとか例外とか

文字列を%&lt;16進数&gt;形式にエスケープする。 - うなの日記のプログラムを弄ってみる。 public static final String escape(String string, String encode) { byte[] bs = null; try { bs = string.getBytes(encode); } catch (UnsupportedEncodingExcept…

try-catchの嵐

インターン先でも遭遇したんだけど、今日聞いた話だと身近にもこんなコードがあるらしい・・・ // 宣言 String line = null; BufferedReader br = null; InputStreamReader isr = null; FileInputStream fis = null; // ファイルのオープン try { fis = new …

finally

なんか勘違いしてるプログラムを見た。 BufferedReader in1 = null; BufferedReader in2 = null; try { ... } finally { if (in1 != null) in1.close(); if (in2 != null) in2.close(); } 確かにfinallyブロックにはほとんど必ず入る*1けど、イコールfinally…

Javaコードスタイル

最近高専時代の友人*1とJavaのコードスタイルの話をしたら、ちょうど同じ頃にCコードスタイルがあがってた。 てことで便乗(?)して議論の内容をちょっと紹介。 まず、Javaには開き中括弧を独立行に書くスタイルは合わないよねー、とか、匿名クラスってどう書…

ジェネリクスで複数のインターフェイスを指定

って出来たんですね。知らなかった・・・ interface I1 {} interface I2 {} // こんな感じ class C1 <E extends I1 & I2> {} class C2 {} // クラスを指定する場合はextendsの直後に指定する class C3 <E extends C2 & I1 & I2> {} TypeParameter: TypeVariable TypeBoundopt TypeBound: extends Class</e></e>…

なんとなくダイアログボックス

ダイアログボックスって出すの面倒だよなー、とか思って。 public enum DialogBox { MESSAGE("メッセージ", ButtonType.DEFAULT) { public DialogResult show(Component p, Object msg, String ttl, ButtonType t) { int result = showConfirmDialog(p, msg,…

privateメンバの合法的アクセス

#define private public - 神様なんて信じない僕らのためにを読んで、Exceptional C++ Style*1を思い出した。 そこでは、 偽造犯 スリ 詐欺師 言語法律家 にたとえてprivateメンバのアクセス方法を説明している。この中で#define private publicはスリとして…

配列のclone

CopyUtilsのtoCopyableに配列を渡したらNoSuchMethodExceptionが発生した。 getMethodで怒られてるみたいなんで、とりあえず配列がどんなメソッドを持ってるか確認してみた。 import java.lang.reflect.Method; public class Test { public static void main…

Javaでsprintf

普通にString#formatにあったという(コメント欄参照)。 J2SE5.0からprintfが導入されたけど、何気にsprintfはない。ってことで、簡単実装。 // StringUtils的なクラスに public static String sprintf(String format, Object...args) { StringWriter str = n…

Cloneable

Cloneableはお世辞にも使いやすいとはいえないので、もうちょっと使いやすくしようと試みる。 public interface Copyable<E extends Cloneable> extends Cloneable { E copy(); Object clone() throws CloneNotSupportedException; } このインターフェイスを実装したクラスは、cop</e>…

外側のクラスのthis

外側のクラスのthisの取り方ってあんまり知られてない・・・? public class Hoge { private Hoge(Piyo p) { ... } ... } public class Piyo { public Piyo self() { return this; } public void method() { new Thread() { public void run() { Hoge hoge =…

GUIでプログラム(2)

GUIでプログラムのつづき。 ノンコーディングは別にかまわないのだけど、だからってコーディングの手段を奪うのはやめてほしい。こういうツールってコーディング上の単調作業をなくすためー、とか、開発者の均質化を促進するためー、とかを売り文句にしてい…

ResultSet(2)

ResultSet - ぐるぐる〜への反応への反応。 あと、ResultSet にはカーソル的な更新の API もかねているのと、その際のエラー情報取得とかあったり。 JDBC と Collection API - odz buffer あー、カーソルとしてのResultSetを完全に失念してました。ただ、個…

GUIでプログラム

GUIでプログラム?冗談はよしてくれ。 というのは冗談です*1。 GUIでコンポーネントとかを置いて、それを繋げてロジックを構築する、そんな方式自体を非難するわけじゃないんだけど、どうもこの手の開発ツールってきちんとしたドキュメントが整備されていな…

ResultSet

JDBCということで、ResultSetについて。SELECTした結果を素直にJavaの世界に持ってくるならばResultSetという名前はいいと思うんだけど、現実的にはResultListとか、ResultTableのほうがいいんじゃないかな。 なぜなら、Setセットとして扱うような処理はSQL…

現実世界云々

も1つおまけに、現実世界をどうのこうの、っていう考え方について*1。 現実世界をモデリング、っていうのは、オブジェクト指向の解説として多いように思う。それも否定はしないけど、それは最善の方法じゃない。 というのも、現実世界をモデリングした場合、…

名詞抽出

オブジェクト指向について色々なところで盛り上がってますね。今日はそのなかから一番違和感のあったものを。 名詞抽出をママゴト遊びだと批判する声もあるが、ヒアリングから設計に至る過程で、脳の内部的に名詞抽出をやらない人はいないだろう。 モデル弄…

NullPointerException

"string".equalsってバッドノウハウなの? - 神様なんて信じない僕らのためにより、NullPointerExceptionについて。 NullPointerExceptionは偉大*1だけど、 NullPointerExceptionでnullを検知しようとする考えがそもそも間違い、な気がする。 "string".equal…

全くの素人にプログラミング言語を教えるとしたら

とりあえず、ひと通りの標準ライブラリがそろっている言語がいいと思う。この時点でC言語はパス。何でかって言うと、自分で組んだプログラムと、標準で備わっているプログラムの差を感じてもらうため。そのためにはC言語の標準ライブラリは貧弱すぎる。せめ…

Javaでrange

Javaでtimesのつづき。 前回はJavaでRubyのtimesっぽいものを作って++を隠蔽したけど、まぁお世辞にも使いやすいとは言いがたい。一番の問題は、回数数えるだけなのに記述量が多いことだと思う。 ということで、今回は記述量もそれなりになるように、Python…

Javaで初めてつまずいたところ

Javaで初めてつまづいたのは、インストールでも環境変数の設定でもない。これらはどんな入門書でも載っているものであって、そのとおりに進めればなんとかなった*1。では何につまずいたかというと、argsである。 public class HelloWorld { public static vo…

ジェネリクスでユーティリティ

Javaの理論と実践: 疑似typedefアンチパターンちょっと古めの記事だけど役に立つ内容なので紹介。「継承を使って疑似的にtypedefのようなものは実現できるけど、ぜんぜん駄目だから使うな」って話。で、それだけじゃなくて型推論を活用して、安全にタイプ量…