メンバ変数の強調表示をしよう。

半年くらい前に、ふとテキストエディタの強調機能を使って、C++のメンバ変数に色を付けてみたら、これがとても良かったのでおすすめする。

数10行あるメンバ関数のコードを表示したときでも、その中で扱っているメンバ変数が、ぱっと一瞬で把握できる。

それが行頭にあって = 記号が付いていれば書き換えているわけで、リードアクセスか、ライトアクセスか、という違いも視覚的にぱっと飛び込んでくる。

コードを見て、ぱぱっと1秒もかからない時間で、リードライトの特性が把握できてしまう。

そうすると、「このメンバ変数はこのパスでは変化しない」だとか、「ここで書き換えると、影響する箇所がどことどこ」といったことを把握するのがすごく速くなる。

ちなみに、ぼくの使っている秀丸エディタC++の構文までは解釈してくれないので、正規表現でメンバ変数を指定した。

ところで、よくクラス名の頭に C や T を付けるとか、メンバ関数の名前の最初の文字は大文字か小文字かとか、統一すると見栄えが整ったり読みやすかったりするのは分かるけど、いままではあまりメリットを感じたことがなかった。

でも今は、メンバ変数に関しては色分けの効能がすごいことを知ってしまったので、他の変数と機械的に区別できるように、「m_」とか付けるようにしている。

せっかくなのでメンバ変数の正規表現を紹介。前方不一致の機能を使って「.」や「->」が頭につくものは除くのがポイント。

(?<!(\.|->|[a-zA-Z0-9_]))([a-z][a-zA-Z0-9_]*_|mp*(_|[A-Z])[a-zA-Z0-9_]*)(?![a-zA-Z0-9_])

そして「.」とか「->」が付いているのはこっち。これは this ではなく他のインスタンスや他の構造体の変数に触っている箇所。意味合いが異なるので別の色を付けた方がよい。

(?<=\.|->)([a-z][a-zA-Z0-9_]*_|mp*(_|[A-Z])[a-zA-Z0-9_]*)(?![a-zA-Z0-9_])

メンバ変数の流儀にもいろいろあるので、いろいろ対応するように工夫してみた。上に書いた正規表現で下のようなスタイルを全部強調表示できる。

  int m_size;
  int *mp_buffer;
  int **mpp_table;
  int mData;
  int mpData;
  int data_;