好き勝手に・げーあにん?

ファミコンと同い年の社会人ヌルオタの日記

ビューティフルコードを読んだら大スランプ

ビューティフルコード (THEORY/IN/PRACTICE)

ビューティフルコード (THEORY/IN/PRACTICE)

ビューティフルコードを読む → 直後に自分のソースを見る → かつて無いほどの絶望感 → めげずにコードを組もうとする → 更なる絶望感 → ビューティフルコードを読む(逃避) → (以下、ループ)

どうやら、私のような貧相なダメグラマには刺激が強すぎたようです。こんなダメダメな私は穴掘って埋まっておきます。

冗談抜きで、本当にコードが書けなくなってしまいましたorz ゴールデンウィーク無視で働いてるのにまったく仕事が進んでない‥‥。

読み進めると自分への絶望感が拡がるだけだとわかっているのに! くやしい! でも読んじゃう!! むしろ早く読み終わらないと、スランプが長引くだけのような気がする。

以下、思ったことを垂れ流し。
まだ 1〜10章+まつもとさん関連(29章+対談)しか読んでない。

6章で話題に上がっていた Framework for Integrated Test (FIT) はちょっと見てから考えてみたいと思った。Java使わなくなって久しいので、実際に使うことは無いんだけど、思想的な意味で。


二分探索が4章、7章と話題に上がってたので、自分のコードで二分探索してたところを右シフトを使う形に書き直しといた。そんなデカイ配列扱わないけど、気持ちの問題。

微妙に関係ないけど、C/C++ も論理シフトの演算子があってもいいのにと、たまに思う。ホントにたまにだけど。たまに思う場面は、最初から unsigned 使ってない事が最大のミスのような気はする。


8章コード生成。文中ではJITで解決しているんだけど、この手の switch での処理分岐が必要、且つ、速度も必要なとこは、C++でやってるといつも迷うんだよなぁ。関数ポインタにするのがベターだとは思ってるんだけど‥‥。関数の種類がどうしようもなく多いときは、マクロ乱用して、似たような関数をいっぱいつくったりとかするよ!

以下、美しいとは程遠いマクロの使い方。

#include <stdio.h>
#include <stdlib.h>

#define DEFFUNC_PRINT_STR(func_name, str, sub) \
    void func_name() {\
        printf("%s\n", str);\
        sub\
    }

DEFFUNC_PRINT_STR(funcA, "funcA", ;)
DEFFUNC_PRINT_STR(funcEnvPath, getenv("PATH"), do{funcA();funcA();}while(0);)

int main()
{
    funcA();
    funcEnvPath();
    return 0;
}

実行時の出力。

funcA
/usr/local/bin:/usr/bin:/bin
funcA
funcA

C言語のマクロは強力すぎて不安になるよね! ‥‥私みたいなバカ野郎のせいですね。ごめんなさい。‥‥いつもこんな事してるわけじゃないんだからね! 本当に速度と手間に困ったときだけなんだからね! ‥‥こんな時、どうしたらいいのか、わからないの*1


読み進めたら追記するかも?

*1:笑えばいいと思うよ