C言語のstatic
主な用途
変数・関数の隠蔽(カプセル化)
例
C言語では、グローバル変数や関数にstaticをつけることで、
他のファイル(ソースファイル)からアクセスできないようにします。
// file1.c
int show_num = 0; // 他ファイルから見える
static int hidden_var = 10; // 他ファイルから見えない
static void hidden_func() { ... } // 他ファイルから見えない
void public_func() {
int counter = 0; // 値は関数内でのみ保持
counter++; // 関数を抜けると値は破棄
show_num++; // ファイル内で値は保持される
static int count = 0; // 関数を抜けても値を保持
count++;
}
Javascriptのstatic
主な用途
クラスメソッド・プロパティの定義
例
ES6から導入されたクラス構文で、クラス(設計図)自体に
メソッドやプロパティを紐付けます。インスタンス(実体)
を作る必要がなく、クラス名.メソッド名()で呼び出せます。
class MyClass {
static staticMethod() {
return '静的メソッドです';
}
}
console.log(MyClass.staticMethod()); // OK
// const obj = new MyClass();
// obj.staticMethod(); // エラー:インスタンスからは呼べない
結論:何が違うのか
C言語は「どこから見えるか(スコープ)」を制御するためのキーワード。
JavaScriptは「何に紐付くか(インスタンスまたはクラス)」を決定するためのキーワード。
C言語のstaticは「隠蔽」が目的で、Javascriptのstaticは「クラスメソッドの定義」が目的という点が決定的な違いです。
また、個人的な感想としてはクラスの外側でクラス名.関数名で書くことができることはC#と似ているなと感じました。C#のstaticについても機会があれば触れていきたいですしC,C++,C#,Javascript,HTML,CSSなど組み込みから、web業界までIT業界の幅を広げてなんでも学んでいきたい所存です。
十分に動作確認を取ったうえで記事作成を行っていますが、Javascript初学者のため間違って理解している点もあるかもしれず、ご指摘していただけるとありがたいです。