Murga

個人的に言いたいコト・主張・気持ち。

単一行コメント記号の直後にスペースを付けないのは「コメントアウトされたコード」を示す

プログラミングにおいて、単一行コメントを書く時は、言語に応じて記号文字は違えど、

# コメントです (Python など)
// コメントです (Java など)

こんな風に、#//記号の直後にスペースを置いて書くことがほとんどだろう。汚いコードを書く人達は、時に記号の直後にスペースを書かなかったりするが、世の一般的なコードは記号の直後にスペースが入っている。

しかし、世の一般的なコードの中でも、記号の直後にスペースを書かない場合があることに気付いた。

例えば、Apache の設定ファイル httpd.conf の場合。

  • httpd.conf
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule authn_file_module libexec/apache2/mod_authn_file.so
#LoadModule authn_dbm_module libexec/apache2/mod_authn_dbm.so
#LoadModule authn_anon_module libexec/apache2/mod_authn_anon.so
#LoadModule authn_dbd_module libexec/apache2/mod_authn_dbd.so

Dynamic Shared Object … から Example までの塊は、人が読むコメントとして書かれているが、その下の LoadModule の行を見ると、

  • #LoadModule

というように、コメントアウトする # 記号の直後にスペースが打たれていない。

次は PHP の設定ファイル php.ini の例。

  • php.ini
;;;;;;;;;;;;;;;;;;;;
; php.ini Options  ;
;;;;;;;;;;;;;;;;;;;;
; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini"
;user_ini.filename = ".user.ini"

; To disable this feature set this option to empty value
;user_ini.filename =

;;;;;;;;;;;;;;;;;;;;
; Language Options ;
;;;;;;;;;;;;;;;;;;;;

; Enable the PHP scripting language engine under Apache.
; http://php.net/engine
engine = On

コチラはコメントアウト記号がセミコロン ; で、最終行の engine = On などはコメントアウトされていないコード。

; Name for user-defined php.ini … という行は、行頭のセミコロンの直後にスペースがあるが、その次の行は

  • ;user_ini.filename = ".user.ini"

という風に、 ;user_ini の間にスペースが開いていない。

コレは何なのだろうか。


最近になって、このスペースが書かれていないコードは、コメントアウトされたコードを示していることに気付いた。

そこで「comment out without space」などでググってみると、次のような Stackoverflow が見つかった。

I've developed software in many languages for about 10 years on projects large and small.
I have yet to see anyone intentionally not use a space.
In the scheme of things it doesn't really matter that much (after all, we all know those are comments and can read them),
but I do think the no-space version looks similar to commented-out code and requires an extra millisecond of brain power to confirm it is a comment :-)

Agreed, spaces for comments, no spaces for commented-out code.

意訳すると、

  • 私は10年間色々なプロジェクトで多くの言語を使ってきた
  • 意図的にスペースを開けないことにしている人は見かけたことがない
  • 結局のところ、人が読めればスペースが開いていようが開いていまいが大した問題ではない
  • ただ、私はスペースを開けずに書かれている場合は、コメントアウトされたコードと認識していて、それが人間用のコメントだった場合は読み取るのに若干の読解コストがかかると感じている

という意見だ。

それに対して

  • 禿同!スペースが付いていたら (人間用の) コメント。スペースなしだったらコメントアウトされたコード。

と返信が付いている。


よくよく php.ini のコードとコメントを見ると、次のように書いてある。

; To disable this feature set this option to empty value
;user_ini.filename =

和訳するとこうだ。

; この機能を無効にするには、このオプションに空の値を設定すれば良い。(次のように)
;user_ini.filename =

つまり、このコメント文と、「コメントアウトされたコード」を参考に、独自に設定したい場合は、「コメントアウトされたコード」のコメント記号を外して、

; この機能を無効にするには、このオプションに空の値を設定すれば良い。(次のように)
user_ini.filename =

このようにコードを有効化してやれば良い、ということだ。


ということで結論。

  • 行頭スペースありのコメント行は、人間が読むためのコメント文を示す
    • 一般的にコメントを書く際は面倒臭がらずスペースを付けよう
  • 行頭スペースなしのコメント行は、コメントアウトされたコードを示す
    • コメントアウト記号を取り外せば、そのままコードとして機能する行になっていることが望ましい

自分は全てのコメントでスペースを付与していたので、「コードとして有効化する場合がある」コメントについては、スペースなしで書くようにしようかなーと思った。

新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

  • 作者: Andy Hunt,武舎広幸,武舎るみ
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/04/27
  • メディア: 単行本(ソフトカバー)
  • 購入: 25人 クリック: 475回
  • この商品を含むブログ (151件) を見る