最近、既にあるC#のソースの一部を書き換えるために、#if-#else-#endifを活用するようになりました。
たとえば、以下のコードを書き換えるとします。
untaraKantaraMendouNaMono(areya,koreya,iroiro);
まず、#if-#else-#endifをつけ加えます。
#if true
#else
untaraKantaraMendouNaMono(areya,koreya,iroiro);
#endif
こうしてから、#if trueと#elseの間に、書き直すコードを書いていきます。
これによって、書き換え途中で書き換え前の内容をすぐ参照できるし、動作に疑問がある場合はtrueをfalseに置き換えるだけで旧コードを実行できます。
こういう変更方法はスマートかもしれない、と思いましたが本当はおかしいですね。#if-#else-#endifは古のCにもあるプリプロセッサ ディレクティブです(ちょっと違うけど)。今頃喜ぶのはなぜだろうと思って考えてみると、原因はJavaにあるらしいことに気付きました。Javaにはプリプロセッサが無いからです。
どうもJavaに巻き込まれたことで、感覚が狂ってしまったところがあるようです。少し校正し直さねば……。
以下、説明不足であることに気付いたので追加します。
この手法は、ソースの変更内容を記録するために使うものではない、ということを説明し忘れていました。変更内容を記録するには、そのためのツールであるVisual Source SafeやCSVなどを使うのが基本です。ここで述べた手法は、こういうソース管理ツールにチェックインするまでの短い時間に、変更前のソースと変更後のソースを#if-#else-#endifで共存させるものです。修正完了後には取り除いてしまうべきものです。そうしないと、ソース上に古いソースの残骸が散在して読みにくくなるし、下手をすると#if-#else-#endifがネストしてメンテできない化け物になる可能性もあり得ます。
というわけで、試してみる人がもし居れば、使い所を間違えないようにお願いします。