programming
新しいJava7にimmutableなリストを記述できるリテラルが導入されるけど、Java5ならこういうヘルパメソッドを用意すればいいだけの話なのだ。(誰でも思いつくけど) public static <T> List<T> constList(final T... elems){ return Collections.unmodifiableList(</t></t>…
明らかに不穏です。 // finalを付けないと更に不穏なコードにできます。 private static final String SPECIAL_TOKEN = new String(""); public static void methodXXX(final String arg){ if(arg == SPECIAL_TOKEN){ // なんか特別な処理 } // 普通の処理 }…
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月ぐらいにちょっと勉強したC言語(C89)を今復習中。いや、ほんとはC++も勉強してたはずなんだけど。でもC言語は言語仕様がコンパクトで分かりやすい。その実、罠だらけだが。とりあえずK&Rの後ろの規格的な部分をパラパラパラ… メモリ上の一区域をオ…
同じコードがとにかく何度も続く。これが一番の特徴。 色々な問題を1つの関数に持ち込んでいる。問題の分割がへたくそ。同じ問題を解くコードが複数個所に現れる。 for文が少ない。繰り返し構造を積極的に用いてない。クラスなどの抽象構造が少ない。 メソッ…
LispboxというEmacsのdistribution。Winユーザでもzipを解凍してbatを実行するだけでCommon Lispをはじめられる。個人的にAllegroは好きじゃないので(生理的な問題)、CLISP版をインストールした。しかしSchemeならWindowsでも動くGaucheとかあるのに、Comm…
This article explains the new features in Python 3.0, compared to 2.6. Python 3.0, also known as ???Python 3000??? or ???Py3K???, is the first ever intentionally backwards incompatible Python release. だいたい変更点を見ていたら、ほとんど意…
ADODB.Stream(ActiveX Data Object Library)というクラスを使えば、VBA(COM)にてShift_JIS以外の文字コードの読み書きが出来ます。クローズドなWindows環境にて(ある程度の)文字コード変換プログラムが簡単に作れます。ほかにWindowsデフォルトで出来る機…
リストを返却するユーティリティ関数では返却値に配列ではなくCollectionを使おう。 ' 今開いているブック(複数)からname$の名前を持っているブックだけ集めて返す。 Function CollectOpenedWorkbooks(name$) As Collection Set CollectOpenedWorkbooks = …
(考えたことを書いてみる。正直書いてあることは自明なので役に立つようなものではありません。) はやさを求めて プログラムにしても、人手による作業にしても、作業にかかる時間を短縮しようとしたら以下のようなことをだいたいやるでしょう。 作業を減ら…
もっとevalされるべきというのに笑った。それにしてもニコニコ動画でLispができるのはすごい!
Haskellの親戚のConcurrent Cleanにちょっとだけ触れてみよう。 http://sky.zero.ad.jp/~zaa54437/programming/clean/ http://www.geocities.jp/lethevert/clean/gettingStarted01.html http://www.geocities.jp/lethevert/clean/clean-mode.html Cleanideと…
関数も値である ラムダ(誰か飽きてギリシャ語っぽくランブダって言うようになってくれよう) レキシカルクロージャ とくにレキシカルクロージャに関しては今後これに関して「珍しい!」「すばらしい機能だ!」「Common Lispにはあったのだが、ほかのFuckin'…
遅延評価って言語仕様の要請じゃないのね。 リンク [http //haskell.org/onlinereport/:title](言語仕様的なもの) : 巷で売ってる本だけじゃいろいろわからないよね。和訳版もありました! [http //haskell.org/ghc/:title] : Glasgow Haskell Compilerの…
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FineDetailを前に見ていて、どうすれば「数字を特別扱いしたソートになるだろう?」と考えていた。 そしてとりあえず今日作ってみた。課題として手ごろだ。 普通の文字列比較 まずは普通の文字列比較。これを使う…
おもしろそうな記事発見: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(あとから管理する者も…
まあこういう違いです。引数の適用の仕方なので、方言みたいなものですが。 CommonLisp - reduce (defun myreverse (lis) (reduce (lambda (x y) (cons y x)) lis :initial-value nil)) (myreverse '(1 2 3 4 5)) ; (5 4 3 2 1) Scheme - fold (define (myre…
http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29Common Lispにはreduceという関数があり、これはSchemeやHaskellでいうところのfoldにあたります。 いわゆる畳み込み関数というやつで、『畳み込みする関数』と『その初期値』を使って、リス…
以下の本を買った人へ:Advanced Visual Basic 6: Power Techniques for Everyday Programs (DevelopMentor Series)作者: Matthew Curland出版社/メーカー: Addison-Wesley Professional発売日: 2000/07/13メディア: ペーパーバックこの商品を含むブログ (1…
IOは非同期にせよ。出来る限り非同期にせよ。 書くだけ書いて読み返さないデータは全て非同期で書き出してしまえ。スレッドに乗せるな。制御に乗せるな。遅いものはそれだけで作業させよ。 ログとか、アプリの排出データとか。
プログラマになって最初のうちは、ソフトウェアのテストすべきところはごく一部に抑えるべきという考え方だった。 経験を積み出すと、まんべんなく、という考えになった。 最近では、基本的にまんべんなく、であるが、自明である部分はやらなくていいという…
Wikipedia:hoge foo bar baz まあ、これはいいとして、自分の場合こまったことに hoge hage fuge fuga なんです。これの困ったところはhogeとhageだと見分けが難しいのと、それと髪の毛を気にする人の前にこのソースがあるとちょっと悪い気がするところです…
たまにはアルゴリズムの勉強。 今日はハッシュテーブル。いわゆるハッシュ関数によるマップですね。 (いわゆるマップとかの)ハッシュ関数 任意のオブジェクトをintに変換する関数。同値のオブジェクトは必ず同じ値のintに変換される。 なるべくintの値域内…
ストリーミングモデル、と私が勝手に呼んでいるパターン。 もうプログラミングの帝石みたいなものだけれども、インプットが巨大(あるいは無限)な問題を一定のメモリで解くというやり方。 以下が対照的だろう。 メモリに全部ファイル内容を読んでから1行ず…
末尾再帰(tail recursion)は意識しないとそうならない。 再帰の中には末尾再帰に変換できないものも当然ある たいがい再帰関数で途中結果を持ちあるくようにすれば末尾再帰にできる ただ、これを無理やりやると結局スタックを持ち歩いているのと違わなくなる…
(2008/10/22に加筆。) Javaではインナークラス、匿名クラスの違いがわかってると便利です。 以下のクラスから参照できる変数スコープの違いをはっきりと示すことができるとかっこいいでしょう。 staticなインナークラス ただのインナークラス 匿名クラス …
Genericに出来る余地がある場合、さっさとGenericにすべきなのか?なやむ。
ざっと5000行ある…。これを読むのは辛い…。