0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語、Javascriptのstatic用途の明確な違いについて

0
Posted at

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初学者のため間違って理解している点もあるかもしれず、ご指摘していただけるとありがたいです。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?