入れ子構造
[Wikipedia|▼Menu]
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方
出典検索?: "ネスティング" ? ニュース ・ 書籍 ・ スカラー ・ CiNii ・ J-STAGE ・ NDL ・ dlib.jp ・ ジャパンサーチ ・ TWL(2013年8月)
マトリョーシカ人形
プログラムの記述と比較してみると似ていることが分かる(参照1)(参照2

構造化プログラミングにおけるネスティング(: Nesting)、ネスト、入れ子とは、プログラムの構造が再帰的に繰り返されて記述されること。このような構造をネスト構造(: Nested structure)、入れ子構造と呼ぶ。この記事ではC言語風の擬似コードを用いるが、ネスティングの概念はC言語に限らない。また、名前空間などC言語にない機能についても記述している。「再帰」も参照
概要

ネスティングには主に次の3パターンが存在する。

制御構造 - if文switch文for文while文などを内包。これによって実際の処理を示す。

データ構造 - 構造体クラスインタフェースなどを内包。プログラム内でのデータの管理方法を示す。

副プログラム - サブルーチンプロシージャコルーチンなどを内包。処理の管理。

名前空間 - 名前空間の内部に別の名前空間を配する。

例えば、二分木と呼ばれるデータ構造はデータ構造のネスティングの好例である。
制御構造におけるネスティング

制御構造分岐命令ループ命令)のネスティング。スコープが入れ子になっている。
条件文のネスティング

以下の例では条件式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()のようにアクセスさせることが多い }}
関連項目
プログラミング

関数

プログラミング

プロシージャ

重複コード

再帰

その他

入れ子

外部リンク

IT用語辞典-入れ子


記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:11 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef