ページ「インスタンス」と「構造体」の間の差分

提供: MonoBook
(ページ間の差分)
ナビゲーションに移動 検索に移動
imported>Administrator
 
imported>Administrator
(ページの作成:「構造体(struct)とは、一部のプログラミング言語に搭載されている、複数の既存の型の組み合わせを、新しい型として定義…」)
 
1行目: 1行目:
'''インスタンス'''([[英語]]:instance)とは、「実体」のことである。
+
構造体(struct)とは、一部の[[プログラミング言語]]に搭載されている、複数の既存の型の組み合わせを、新しい型として定義できる機能のことである。
  
== アプリケーション ==
+
[[IT土方]]の現場では構造体を「[[固定長]]の[[データ]]」として[[ファイル]]などに読み書きする技法が古くから使われている。[[XML]][[JSON]]などという軟弱なフォーマットはあまり使われない。
[[ROM]][[HDD]]の中に格納されている[[アプリ]][[プログラム]])が[[RAM]]に読み込まれ実行可能な状態になったものを「インスタンス」という。
 
  
現実的には、上記のように[[プログラム]]が[[RAM]]に読み込まれ、実行が開始され、ある程度の初期化を済ませた状態を指すことが多い。
+
構造体のメンバーに[[関数ポインタ]]を入れると、いわゆる[[オブジェクト指向]]の「[[クラス]]」に近いものになる。
 
 
この初期化処理の際に「同名のアプリが起動しているか」をチェックして終了するものを「シングルインスタンス」、チェックしないものを「マルチインスタンス」などと呼ぶ。
 
 
 
=== Windows ===
 
[[Windows]]はマルチインスタンスが基本となっている。スタートメニューやタスクバーのアイコンをクリックすると次々と同じアプリが立ち上がる。
 
 
 
このため多くの[[プログラマー]]が「多重起動防止する方法」を調べるのが定番となっている。
 
 
 
=== AndroidやiOS ===
 
[[Android]]や[[iOS]]はシングルインスタンスが基本となっている。[[スマホ]]という特性上こちらのほうが使い勝手がいいからだ。
 
 
 
このため多くの[[ゲーマー]]がチートするために「マルチインスタンス化する方法」を調べているようだ。
 
 
 
== プログラミング ==
 
[[構造体]]や[[クラス]]の定義をもとに、[[メモリ]]を確保し、初期化処理までを完了したものを「インスタンス」とをいう。
 
 
 
 
 
この挙動は[[Objective-C]]がわかりやすい。
 
Objective-Cではメモリ確保(alloc)と初期化(init)の2挙動を明示的に行うようになっている。
 
<syntaxhighlight lang="objective-c">
 
Class* instance = [[Class alloc] init];
 
</syntaxhighlight>
 
 
 
 
 
Objective-C以外の多くの[[言語]]では「new」とするだけで一発で行うことができる。
 
このような場合でも内部的にはメモリ確保(alloc)と初期化(init)は別々に実行されている。<syntaxhighlight>
 
Class instance = new Class();
 
</syntaxhighlight>
 
 
 
ここで注意しなければならないのは「newであっても、内部は2挙動であり、その2挙動は連続実行されるとは限らない」という点である。
 
 
 
たとえば[[C#]]ではその2挙動は連続実行される。一方で[[Java]]ではnewすると即座にメモリ確保だけは行われるが、初期化はそのインスタンスの「最初の利用時」に実行される。<syntaxhighlight lang="java">
 
// newでメモリ確保が実行される
 
Class instance = new Class();
 
 
 
// 初回は初期化(コンストラクタ)が実行されたのちHelloメソッドが実行される。
 
instance.Hello();
 
 
 
// 2回目は普通にHelloメソッドだけ実行される。
 
instance.Hello();
 
</syntaxhighlight>この挙動によりJavaでは[[ダブルチェックロッキング]]が実装できない。
 
 
 
== 関連項目 ==
 
* [[副作用]]
 
* [[自己参照]]
 
* [[関数ポインタ]]
 

2019年10月14日 (月) 01:39時点における最新版

構造体(struct)とは、一部のプログラミング言語に搭載されている、複数の既存の型の組み合わせを、新しい型として定義できる機能のことである。

IT土方の現場では構造体を「固定長データ」としてファイルなどに読み書きする技法が古くから使われている。XMLJSONなどという軟弱なフォーマットはあまり使われない。

構造体のメンバーに関数ポインタを入れると、いわゆるオブジェクト指向の「クラス」に近いものになる。