Javaの機能として用意されているインスタンス初期化子とクラス初期化子について、クラス初期化子は用途がなんとなくわかった(他に代替がない機能)のですが、インスタンス初期化子はコンストラクタで良くないのかなあ、と思っていたのですが、無名クラスの定義の際に必要だということに気づきました。
確かに要るなぁと感心したのでメモしときます。
Javaの機能として用意されているインスタンス初期化子とクラス初期化子について、クラス初期化子は用途がなんとなくわかった(他に代替がない機能)のですが、インスタンス初期化子はコンストラクタで良くないのかなあ、と思っていたのですが、無名クラスの定義の際に必要だということに気づきました。
確かに要るなぁと感心したのでメモしときます。
ちょっとしたバグのようなものがあったので、ご報告まで。Open SSH/H8 writerで公開されているソースコードです。
Linqって強力ですね。「こういう機能実装できないかな」って考えたときに、真っ先にSQLのDISTINCTが思い浮かびました。そこで、「LINQ使って楽に実装できないのか?」と考えつき、やってみました。
予想通りに動きすぎて、本当に怖いですよね。最近、マイコンプログラミングばかりやってるもので、書いてるとおりに動かないことなんて日常茶飯事なのです。実際のところは、書いてるとおりにしか動いてないわけですがそこには突っ込まないでくださいね。
では、単純にすげーと思ったソースコードを記しておきます。
H8マイコン用のプログラムとして、ビット演算をしているときに見つけました。環境は、windowsの上でcygwinを動かしていて、コンパイラはgcc4.3.4(20090894)とかいうやつです。
さっき、へーと思ったことがあったのでメモしときます。
ちょっとした小言というか、潔癖症だからこそ気になった点です。同級生のソースコードを眺めていて発見しました。
操作したいビットに1を立てた定数を用いるべき
ひとことで、このようになるでしょうか。ソースコードを見れば一発です。
main(){ char a = 0x87; /* 1000 0111 */ a |= 0x48; /* 0x00 x000 を1にしたい時 */ // a &= 0x78; /* x000 0xxx を0にしたい時はこう書かずに、 */ a &= ~0x87; /* こう書いて欲しい */ }
どのビットを操作する演算なのかを明確にするためにも、後者を使って欲しいものです。
#include <stdio.h> #define N 300 main(){ int i; for(i = 0; i < N; i++){ #if 0 printf("%d\n", i); /* middle comment printf("%d\n", i * 10); printf("%d\n", i * 100); // small comment */ #endif } }
大コメントが非常に便利ですね。0を1に書き換えるだけで、コメントから脱出させることができます。私も良く使います。
C#の勉強会などというものを部内でやっています。そのとき、本当に理解しているのかなという意地悪な気持ちで、非常に簡単なプログラムの出力結果を、一年生に問うて見ました。
今まで知らずに生きてきたので、恥さらしも含めてまとめておきます。結論から言うと、当たり前のことですが構造体のサイズはsizeof()を使って取得しましょう(サイズを定数で記述しないこと)。
そういえば、何年か前に気になったことを思い出したのでメモしておきます。情報のソースを出すことができませんが、実験結果と考察だけ載せておきます。