Java
C++
JavaScript

コードをコメントアウトするときにちょっと工夫してみる

More than 5 years have passed since last update.

あんまし無秩序にタグをつけるのもどうかと思うのでJSとJavaとC++だけにしておきましたが/* */という形式のコメントが使える言語なら基本的に使える気がします。

さて、コードをコメントアウトするときは一行ずつちまちま//でコメントアウトするのも面倒なので、/* */で囲みます。例えば、こんなふうに。

// 文字列の中から一文字を探す関数

function search(s, c) {
//線形探索してた
/*
var
i = 0;
for (i = 0; i < s.length; i++) {
if (s.charAt(i) === c) return i;
}
return -1;
*/

//indexOfってメソッドがあるらしい
return s.indexOf(c);
}

でも、コメントアウトした部分を復元したいこともあります(そもそもそのためにコメントアウトするんです)。

// 文字列の中から一文字を探す関数

function search(s, c) {
//線形探索する
var
i = 0;
for (i = 0; i < s.length; i++) {
if (s.charAt(i) === c) return i;
}
return -1;
//やっべこれ線形探索の課題じゃん!
/*
//indexOfってメソッドがあるらしい
return s.indexOf(c);
*/

}

そうすると、前に付けた/* */を外して、さらに書き足した部分に/* */を付けなくてはいけません。まあ、これぐらいならコメントの対応がすぐに分かるのでそこまで面倒ではないのですけど、数百行近くあるコメントアウトだったりすると、スクロールする手間があってうんざりします。(さっさとリファクタリングしろ!)

そこで、こうやってコメントアウトしてみます。

// 文字列の中から一文字を探す関数

function search(s, c) {
//線形探索する
var
i = 0;
for (i = 0; i < s.length; i++) {
if (s.charAt(i) === c) return i;
}
return -1;
//課題出したあとは普通にindexOf使いたいなあ…
/*
//indexOfってメソッドがあるらしい
return s.indexOf(c);
//*/
スラッシュが二つ!
}

さっきのコードとほとんど変わらないように見えますが、コードに示したようにindexOfを呼ぶ部分のコメントの終わりのスラッシュが二つになっています。

こうすると、何が便利なんでしょうか?

// 文字列の中から一文字を探す関数

function search(s, c) {
//線形探索する
/*
var
i = 0;
for (i = 0; i < s.length; i++) {
if (s.charAt(i) === c) return i;
}
return -1;
//*/

//課題出したあとは普通にindexOf使いたいなあ…
スラッシュを一つ追加するだけでおk
//*
//indexOfってメソッドがあるらしい
return s.indexOf(c);
//*/
}

再びindexOfの方を使うようにしました。

やはりコード中で示してありますが、スラッシュを一つ追加するだけで、コメントアウトが解除されています。

これは//*というのが//から始まる一行コメントとして解釈されて、さらにコメントの終わりの部分も予め//で一行コメントとして解釈されるようにしておいたためです。

ちなみにRubyとかCなんかの文化では、コメントアウトしたい部分を必ず条件がfalseになるようにしたif文(Cだとプリプロセッサ命令)で囲ったりすることもあるみたいです。

JavaScriptだとこんな感じ。

if (0) {

console.log('昔の処理');
}
console.log('今の処理');

シンタックスハイライトが無くて微妙です…。