読者です 読者をやめる 読者になる 読者になる

例外について色々と考えてみた

オブジェクト倶楽部、コーディング規約の会の「C# コーディング標準」の駄目なところ - ぐるぐる〜から派生して、 「他の例外クラスを継承しただけの例外クラスを作らない」に不同意の理由 - Diary of Dary、 例外クラスの指針 - 猫とC#について書くmatarill…

LinkedList の途中への挿入の効率

連結リストの挿入は O(1) ってのに異論はないんだけど、挿入場所が分かっていなければ O(1) じゃなくて O(n) になるってのは忘れられがち・・・というか、下手したら認識されてさえいない。 例えば List#add(int index, E element) の効率だけど、これは ind…

条件演算子・・・厨?

名前 症状 僕の状態 三項演算子厨 どんどんネストした三項演算子を書いてしまう.気が付くと自分でも良くわからなくなってる事もある 治療済み プログラマの麻疹 - YoshioriのBlog 三項演算子は多分条件演算子のことだろう、ってのはいいとして、ネストした…

流れるようなインターフェイス書いてて思ったこと

流れるようなインターフェイス書いてて、「これメソッドのグルーピングに使えるんじゃね?」って思った。 例えば Visual Studio でも Eclipse でも、補完機能って平坦なリストなんだよね。 オーバーロードは一つにまとめてくれるけど、似たような名前のメソ…

特定ディレクトリ以下の列挙 (再帰呼び出しとループ)

例えば、あるディレクトリ以下のファイル名を取得したい場合の再帰のみ使ったもの、ループのみ使ったもの、両方使ったもののどれが一番分かりやすいか。 まずは自分ならどう書くかを形にした上で続きを読むといいのかな。 あ、サンプルは Java です。 両方 …

値渡しと参照渡し (と参照の値渡し)

値渡しと参照渡しは、分かってしまえば何も難しいところはないんだけど、分かるまでにちょっとした壁があるというかなんとうか・・・ てことでちょっとまとめておきますねー 値渡し (call-by-value) と参照渡し (call-by-reference) の違い 値渡しと参照渡し…

strong typedef しててもアプリケーションハンガリアンが有効な場合はある

strong typedef するってなんだ、ってのは置いとくとして、適切な名前の基準三つ。を読んでちょっと思ったことが、上のタイトル。 どういう状況かというと、変数名の補完機能の付いたエディタ*1で GUI プログラム書いてるとか、そんな感じ。 GUI コンポーネ…

CleanCode Chapter 4:Comments

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)作者: Robert C. Martin出版社/メーカー: Prentice Hall発売日: 2008/08/01メディア: ペーパーバック購入: 1人 クリック: 62回この商品を含むブログ (21件) を見るこの前…

CleanCode Chapter 3:Functions

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)作者: Robert C. Martin出版社/メーカー: Prentice Hall発売日: 2008/08/01メディア: ペーパーバック購入: 1人 クリック: 62回この商品を含むブログ (21件) を見るChapter…

分からん・・・

明白といわれても CTMCP、ちまちまとしたペースで読み進んでます。が、今日さしかかったところでの練習問題 3.10 練習問題1.実数の絶対値実数の絶対値を計算する関数 Abs を定義したい。次の定義はうまくいかない。 fun {Abs X} if X < 0 then ~X else X en…

セミコロンのあるなしで挙動が変わるプログラム

例えばこんな感じ。 public final class Main { static int count = 0; static boolean m1() { System.out.println("m1"); return false; } static boolean m2() { System.out.println("m2"); return count++ != 1; } static void reset() { System.out.prin…

プリミティブ型だからといって特別扱いする必要はない・・・と、思う

仮想マシンがプリミティブ型を特別扱いしてるからと言って、その上に乗っている言語でプリミティブ型を特別扱いする必要なんてない。 どういうことかというと、 int i = 0; String str = i.toString(); なんてことが出来ても何も問題はない*1。 プリミティブ…

昔のコード

昔のコードは読むに耐えないとはよく言うけれど、どのくらい昔のコードが読むに耐えないのだろう。 自分の感覚では、触らなくなって1年くらいなんだけど・・・ 逆に言えば、触り続けてるコードなら全然平気 (当たり前か)。

ガード節による入れ子条件記述の置き換え

「リファクタリング」の「ガード節による条件記述の置き換え」 って項目がまさに、 ifの入れ子になるような処理を、関数の最初で値検査してreturn(あるいは例外をスロー)に置き換えるって話だったと思います。 途中でreturn編 ちょっとりふぁくと - 神様なん…

Visio使えねー

Visioで書いたE-R図からCREATE TABLE文とかテーブル仕様書を出力しようとしたんだけど、データベースプロパティにアクセスできない・・・

真・バブルソート

ここで書いたバブルソート(偽)はアルゴリズムじゃなくて、引き起こされる結果の特徴的な部分から考えた。 思考の順序としては、 バブルソートは一番後ろから確定していくよなー なら最大値を一番後ろにくっつけて、それ以外をまた同じソートにかければいっか…

単純なソートはどれが一番単純か

主に行数的な意味で。 Javaで書いてみた。 private static void swap(int[] target, int index1, int index2) { int tmp = target[index1]; target[index1] = target[index2]; target[index2] = tmp; } // 挿入ソート public static int[] insSort(int[] tar…

上のいくつかのソートをHaskellで書いてみた

超適当。 -- 挿入ソート import Data.List insSort = foldr insert [] -- 選択ソート selSort [] = [] selSort xs = let min = minimum xs in [min] ++ selSort [x | x <- xs, x /= min] -- バブルソート(偽) bblSort [] = [] bblSort xs = let max = maximu…

ソート

何故だか忘れたけど、読書会でソートの話題が出たので話題に出たソート、出なかったソートを紹介しておく。 ボゴソート なんで最初がこれなんだ、というのは気にしない。 簡単に言うと、適当に選んで、偶然そろうのを待つという方法。 もちろん実用性なんて…

フォールスルーのいろいろ

switch文でよく話題に出てくるフォールスルーだけど、言語によって実は結構違う。 まずはJavaとC++ // Java int i = 0; switch (i) { case 0: System.out.println("0"); case 1: System.out.println("1"); break; } // C++ int i = 0; switch (i) { case 0: …

巨大な共通定数クラス・・・あるある

コーディングの掟(最強作法) 現場でよく見る不可解なJavaコードを一掃せよ! (開発の現場セレクション)作者: arton,宇野るいも出版社/メーカー: 翔泳社発売日: 2008/09/18メディア: 単行本(ソフトカバー)購入: 29人 クリック: 339回この商品を含むブログ (5…

トリッキーなコードを避けろ、ねぇ

トリッキーなコードを避けろと言っている人が // Java if ((str == null ? "" : str).isEmpty()) { ... } こんなコード書いちゃいかんでしょ。

postfix/suffix

そしてn。 snprintf なんてのもあるのでアレですが、locale や re-entrant の目印が _l とか _r という postfix になっていたりで統一感がありませんね。 ってまあ途中に潜り込ませるやり方がそうそうできるわけでもない。と。 あと、postfix が複数ついたり…

C言語出来るって言いませんでした?

感覚でプログラム書く人なんているんだなぁ。 と、言うのも、昨日 char* hoge(); ... void piyo() { char firstCh; ... firstCh = hoge()[0]; ... } こんなコードを書いたら、「そんなコード通らないでしょ」と。 なんで?と聞いたら、「いや、普通に考えて…

iBATIS(もしくはiBATIS.NET)

これはなかなか自分にあったO/Rマッピングツールかもしれない。 ちょっと調べてみようかな。

おろ?

ときどきの雑記帖 i戦士篇 んーと?これじゃぁだめなんだろうか? とりあえず、Java、python、rubyで試してみたけど全部うまく動いてるみたい。 そういう問題ではない・・・?

オブジェクト指向

クラスを使っていればオブジェクト指向なんだと勘違いしてるやつ多すぎ。 意味もなくgetter/setter用意してるやつ多すぎ。 未だにシステムハンガリアン使ってるやつ多すぎ。 カプセル化=データ隠蔽だと思ってるやつ多すぎ。 継承を実装の継承のためだけに使…

プロパティとメソッド

プロパティとメソッド、どっちを使えばいいかの境界線ってどうなってんだろ? C#前提で話を進めるとして、個人的には Object.ToString()メソッドじゃなくてObject.Textプロパティ Object.GetType()メソッドじゃなくてObject.Typeプロパティ Object.GetHashCo…

Webプログラムに必要な知識

趣味のWebプログラムじゃなくて、仕事の場合に「必要だろ」、って知識。 文字に関する知識 脆弱性に関する知識 ユーザビリティに関する知識 マークアップ言語、CSS、JavaScript サーバサイドで使用する言語、フレームワークに関する知識 SQL、データベース、…

O/Rマッピングに関する勘違い

なんでO/Rマッピングが自分にとってしっくりこないのかわかった気がする。 オブジェクトとリレーショナルDBをマッピングするものだと思ってたんだけど、実際にはオブジェクトをリレーショナルDBにマッピングするものだったからだな。 えらい長い間勘違いして…

部分文字列

部分文字列って分かりにくくない? 第一引数はいいとして、第二引数は言語によって、インデックスを指定したり長さを指定したり、その両方が使えたり*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でプログラムのつづき。 ノンコーディングは別にかまわないのだけど、だからってコーディングの手段を奪うのはやめてほしい。こういうツールってコーディング上の単調作業をなくすためー、とか、開発者の均質化を促進するためー、とかを売り文句にしてい…