ネスティング

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
マトリョーシカ人形にんぎょう
プログラムの記述きじゅつ比較ひかくしてみるとていることがかる(参照さんしょう1)(参照さんしょう2

構造こうぞうプログラミングにおけるネスティングえい: Nesting)、ネストとは、プログラムの構造こうぞう再帰さいきてきかえされて記述きじゅつされること。このような構造こうぞうネスト構造こうぞうえい: Nested structure)、構造こうぞうぶ。この記事きじではC言語げんごふう擬似ぎじコードをもちいるが、ネスティングの概念がいねんはC言語げんごかぎらない。また、名前なまえ空間くうかんなどC言語げんごにない機能きのうについても記述きじゅつしている。

概要がいよう[編集へんしゅう]

ネスティングにはおもつぎの3パターンが存在そんざいする。

たとえば、分木ぶんぎばれるデータ構造こうぞうはデータ構造こうぞうのネスティングの好例こうれいである。

制御せいぎょ構造こうぞうにおけるネスティング[編集へんしゅう]

制御せいぎょ構造こうぞう分岐ぶんき命令めいれいループ命令めいれい)のネスティング。スコープになっている。

条件じょうけんぶんのネスティング[編集へんしゅう]

以下いかれいでは条件じょうけんしき1を判定はんていして判定はんてい結果けっかが"しん"であるなら条件じょうけんしき2を判定はんていし、条件じょうけんしき2の判定はんてい結果けっかも"しん"なら条件じょうけんしき3を判定はんていする。条件じょうけんしき3も同様どうよう判定はんてい結果けっかが"しん"であるなら処理しょり1、処理しょり2、処理しょり3をすべ処理しょりしたのちから脱出だっしゅつするが、それまでに条件じょうけんしき2が"にせ"なら処理しょり3だけを、条件じょうけんしき3が"にせ"なら処理しょり2と処理しょり3をしてから脱出だっしゅつする。


C言語げんごかぜでの記述きじゅつ

if (条件じょうけんしき1){
   if (条件じょうけんしき2){     // ここの「if」は一番いちばんじょうの「if」の
      if (条件じょうけんしき3){   // ここの「if」はひとじょうの「if」と一番いちばんじょうの「if」の
         処理しょり1;
      }
      処理しょり2;
   }
  処理しょり3;
}

ループぶんのネスティング[編集へんしゅう]

基本きほんてき上述じょうじゅつ条件じょうけんぶんうごきがているため、記述きじゅつている。ループぶん同士どうしでのはループぶん多用たようするために、プログラミングのミスによるバグひとつである無限むげんループ発生はっせいしやすくなる。

一番いちばん外側そとがわから順番じゅんばん条件じょうけんしき判定はんていしてき、条件じょうけんしきたされなくなるまで内側うちがわ処理しょりかえしていく。

C言語げんごかぜでの記述きじゅつ

for (int x = 0; 条件じょうけんしき1; x++){
   for (int y = 0; 条件じょうけんしき2; y++){   //ここの「for」は一番いちばんじょうの「for」の
      for (int z = 0; 条件じょうけんしき3; z++){ //ここの「for」はひとじょうの「for」と一番いちばんじょうの「for」の
          処理しょり1;
      }
      処理しょり2
   }
   処理しょり3;
}

ループぶん条件じょうけんぶん混合こんごうしたネスティング[編集へんしゅう]

一番いちばん外側そとがわから順番じゅんばん条件じょうけんしき判定はんていしてき、条件じょうけんしきたされなくなるまで内側うちがわ処理しょりかえしていく。ただし外側そとがわから番目ばんめのループぶんでは、条件じょうけんしき3の判定はんてい結果けっかしんのときは処理しょり1を、にせのときは処理しょり2を処理しょりする。

C言語げんごかぜでの記述きじゅつ

for (int x = 0; 条件じょうけんしき1; x++){
   for (int y = 0; 条件じょうけんしき2; y++){ //ここの「for」は一番いちばんじょうの「for」の
      if (条件じょうけんしき3){                //ここの「if」はひとじょうの「for」と一番いちばんじょうの「for」の
          処理しょり1;
      }
      else{
          処理しょり2;
      }
  }
}

データ構造こうぞうにおけるネスティング[編集へんしゅう]

構造こうぞうたいクラスインタフェースにおけるネスティング。

構造こうぞうたいのネスティング[編集へんしゅう]

構造こうぞうたいがメンバとしてなんらかの構造こうぞうたいっている状態じょうたいは、構造こうぞうたいをネストしているとえる。

struct Point
{
	int x;
	int y;
};

struct BitmapImage
{
	struct Point size;
	unsigned char *image;
};

ふくプログラムにおけるネスティング[編集へんしゅう]

サブルーチンプロシージャコルーチンにおけるネスティング。たんべつのサブルーチンなどをすだけの場合ばあい再帰さいき場合ばあいもある。

サブルーチンのネスティング[編集へんしゅう]

以下いかれいはgccでのみコンパイル可能かのう

void message(void){
	void hello(){  }// ネストされた関数かんすう定義ていぎ
	hello(); //ネストされた関数かんすう
}
//ここではhello()はせない

名前なまえ空間くうかんのネスティング[編集へんしゅう]

記述きじゅつ方法ほうほう先述せんじゅつのデータ構造こうぞう酷似こくじしている。名前なまえ空間くうかんけることでサブルーチンなどの名称めいしょう競合きょうごうするのを防止ぼうしする。ちなみに、C言語げんごには名前なまえ空間くうかん機能きのうはない。

namespace 名前なまえ空間くうかん1{
	namespace 名前なまえ空間くうかん2{
		int func(){} //名前なまえ空間くうかん1::名前なまえ空間くうかん2::func()のようにアクセスさせることがおお
	}
}

関連かんれん項目こうもく[編集へんしゅう]

プログラミング[編集へんしゅう]

その[編集へんしゅう]

外部がいぶリンク[編集へんしゅう]