JSで変数名に_がつくのはどういう意味ですか?

JS で変数名に _ を使う意味

JavaScript において、変数名や関数名の先頭にアンダーバー (_) を付けることは、慣習として特別な意味を持ちます。この記事では、その意味合いと、具体的な使用例、注意点などを詳しく解説します。

_が変数名や関数名の先頭につく場合

変数名や関数名の先頭にアンダーバーを付与する場合、それは「プライベート」という意味合いを持つことが多いです。しかし、JavaScript には他の言語のように「private」のようなアクセス修飾子が存在しないため、厳密な意味でのプライベート変数ではありません。あくまで、開発者間の暗黙の了解として、アンダーバー付きの変数や関数は内部的にのみ使用されることを示しています。

スコープとプライベート変数

プライベート変数は、特定のスコープ内でのみアクセス可能な変数を指します。JavaScript におけるスコープは、関数スコープとブロックスコープの二つがあります。アンダーバー付きの変数は、一般的には関数スコープ内で定義され、その関数内でのみアクセス可能な「プライベート変数」として扱われます。


function exampleFunction() {
  // プライベート変数
  let _privateValue = 10; 

  function innerFunction() {
    // _privateValue にアクセス可能
    console.log(_privateValue); 
  }

  innerFunction(); 
}

// _privateValue にはアクセスできない
console.log(_privateValue); // エラー

クラスとプライベートメンバー

ES2015 で導入されたクラス構文においても、アンダーバーはプライベートメンバーを示唆するために用いられます。ただし、これも厳密なプライベートメンバーではなく、あくまで慣習的なものです。


class MyClass {
  constructor() {
    this._privateProperty = "private";
  }

  getPrivateProperty() {
    return this._privateProperty;
  }
}

const instance = new MyClass();
console.log(instance.getPrivateProperty()); // "private"
console.log(instance._privateProperty); // "private" (アクセス可能)

アンダーバーの使用に関する注意点

  • アンダーバーによる「プライベート」指定は、あくまでも慣習的なものであり、言語仕様による強制力はありません。他の開発者と共同で開発する場合は、事前にコーディング規約などを共有しておくことが重要です。
  • 将来、JavaScript にプライベートフィールドが導入された場合、既存のコードとの互換性の問題が発生する可能性があります。そのため、ライブラリやフレームワークなど、将来的な変更に備える必要がある場合は、注意が必要です。

アンダーバーの他の用途

変数名や関数名の先頭以外に、アンダーバーは以下のような用途でも使用されます。

用途 説明
無視される変数 関数の引数など、使用しない変数を明示的に示す場合に用いられます。 const [_unused, value] = [1, 2];
プロパティ名のプレフィックス フレームワークやライブラリによっては、特定の機能を持つプロパティ名にアンダーバーをプレフィックスとして付ける場合があります。 { _id: 1, name: "John" }

まとめ

この記事では、JavaScript におけるアンダーバーの用途、特に変数名や関数名の先頭につく場合の意味合いについて解説しました。アンダーバーは、あくまで慣習的なものであり、厳密なアクセス制御を提供するものではありません。しかし、コードの可読性や保守性を向上させるために、適切に使用することが重要です。

参考文献

関連QA

Q1: アンダーバー付きの変数にアクセスしても問題ないでしょうか?

A1: 技術的にはアクセス可能ですが、慣習的にプライベートとして扱われているため、アクセスすることは推奨されません。内部実装に依存したコードは、将来的なバージョンアップなどで動作しなくなる可能性があります。

Q2: 必ずアンダーバーを付けるべきでしょうか?

A2: プロジェクトのコーディング規約や、チーム内の共通認識に従うことが重要です。明確なルールがない場合は、可読性や保守性を考慮して、必要に応じて使用することが望ましいです。

Q3: 将来的にアンダーバーの扱いは変わるのでしょうか?

A3: JavaScript は進化を続ける言語であるため、将来的な変更の可能性は否定できません。最新の情報や、利用するライブラリ・フレームワークの仕様などを確認することが重要です。

その他の参考記事:JavaScript 変数