📝コメント、機械に無視してもらう(がヒトには有効) アノテーションとディレクティブの違い

ソースコードのコメントは、プログラムのソースコードに書かれるテキストで、コンピュータによって実行される命令ではなく、人間のプログラマーがコードを理解しやすくするためのものです。

コメントの起源は、プログラム言語の始まりにまで遡ります。最初のプログラム言語であるアセンブリ言語でも、プログラマーはコードに注釈を加えるためにコメントを使用していました。その後、高水準プログラム言語が開発されるにつれて、それらの言語でもコメントをサポートする機能が取り入れられました。

例えば、1950年代に登場したFortran言語では、C列にある文字はコメントとして扱われ、プログラムの実行に影響を与えませんでした。これが、現代のプログラム言語におけるコメントの起源の1つと考えられています。

現在、ほとんどのプログラム言語は、プログラマーがソースコードにコメントを加えることができるように、特定のコメント記法を持っています。例えば、C言語では、コメントは/と/の間に記述され、または//の後に記述されます。

多くのプログラム言語のコメントの書式には類似点があります。

例えば、多くの言語で、// は一行コメントを、/* と */ は複数行のコメントを示すのが一般的です。

  • C言語、C++、Java、JavaScript、Swiftなどの言語では、// は一行コメント、/* と */ は複数行のコメントを示します。

  • Python、Ruby、Perlなどの言語では、# は一行コメントを示します。

  • HTMLでは、<!-- と --> でコメントを囲みます。

このように、多くの言語でコメントの書式が似ているため、プログラマーは新しい言語を学ぶ際に、コメントの書式をすぐに理解することができます。

プログラム言語によっては、一般的でないコメントの書式を使っているものもあります。

  • Ada言語では、一行コメントは "--" で始まります。

  • LispやHaskellでは、一行コメントは ";" で始まります。

  • SQLでは、一行コメントは "--" で始まり、複数行のコメントは "/" と "/" で囲みます。

プリプロセッサディレクティブとコメントは異なるものです。

  • プリプロセッサディレクティブは、コンパイラにソースコードをどのように処理するかを指示するものです。たとえば、C言語では、プリプロセッサディレクティブは#記号で始まります(例: #include #define )。

  • コメントは、ソースコードを読む人間に向けたメモや説明で、コンパイラによって無視されます。

  1. C/C++

  2. Python

    • PythonはC言語のようなプリプロセッサを持っていませんが、import ステートメントを使って他のモジュールを読み込むことができます。

    • Python 3.8以降、#で始まる新しい構文 := が追加されましたが、これはプリプロセッサディレクティブではなく、式内で変数に代入するためのものです。

  3. Java

    • Javaにはプリプロセッサがありません。ただし、アノテーション(例:@Override, @Entity)があり、これはメタデータをクラス、メソッド、変数に追加するために使用されます。

  4. JavaScript

    • JavaScriptにはプリプロセッサがありませんが、一部のフレームワークやライブラリは独自のディレクティブを提供しています。例えば、AngularJSは ng- プレフィックスを持つディレクティブ(例:ng-model, ng-repeat)を提供しています。

  5. .NET(C#、VB.NET)

    • C#とVB.NETは、#で始まるプリプロセッサディレクティブ(例: #if , #else , #endif , #define , #undef , #warning , #error , #line , #region , #endregion , #pragma )を持っています。

    • ただし、これらの言語では、メタデータをクラス、メソッド、プロパティに追加するために使用されるアノテーション(C#では属性、VB.NETでは属性)もあります。

このように、言語やフレームワークによって、プリプロセッサディレクティブやディレクティブの文法は

  1. アノテーション:

    • アノテーションは、プログラムのコードにメタデータを追加するために使用される。

    • 主にJavaや.NET言語(C#、VB.NET)で使用されます。

    • アノテーションは、コンパイラやフレームワークに、クラス、メソッド、プロパティ、パラメータなどの要素に追加的な情報を提供します。

    • 例: Javaの@Overrideアノテーション、C#の[Serializable]属性。

  2. ディレクティブ:

    • ディレクティブは、プリプロセッサやコンパイラに指示を出すために使用される。

    • C/C++のプリプロセッサディレクティブ( #include , #define )やC#、VB.NETのプリプロセッサディレクティブ( #if , #else )がこれに該当します。

    • また、AngularJSのようなフレームワークのディレクティブ(ng-model, ng-repeat)も、これに分類されます。

お願い致します