C言語のstatic
主な用途
変数・関数の隠蔽(カプセル化)
例
C言語では、グローバル変数や関数にstaticをつけることで、
他のファイル(ソースファイル)からアクセスできないようにします。
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(); // エラー:インスタンスからは呼べない
追記
Javascriptが動作する最小限のプログラムを勉強のため追記します。
HTMLファイル内のscriptタグ内にJavascriptを記述することを学んでいます。
Javascriptはwebブラウザで動作するプログラム言語と学んだためwebで動作するようにしてみました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>TRY01</title>
<script src="file1.js"></script>
</head>
<body>
</body>
</html>
結論:何が違うのか
C言語は「どこから見えるか(スコープ)」を制御するためのキーワード。
JavaScriptは「何に紐付くか(インスタンスまたはクラス)」を決定するためのキーワード。
C言語のstaticは「隠蔽」が目的で、Javascriptのstaticは「クラスメソッドの定義」が目的という点が決定的な違いです。
また、個人的な感想としてはクラスの外側でクラス名.関数名で書くことができることはC#と似ているなと感じました。C#のstaticについても機会があれば触れていきたいですしC,C++,C#,Javascript,HTML,CSSなど組み込みから、web業界までIT業界の幅を広げてなんでも学んでいきたい所存です。
十分に動作確認を取ったうえで記事作成を行っていますが、Javascript初学者のため間違って理解している点もあるかもしれず、ご指摘していただけるとありがたいです。