計算機科学や情報学において、ネスト[ 1 ]とは、情報が階層的に整理されている状態、あるいはオブジェクトが他の類似のオブジェクトを含んでいる状態を指します。これはほぼ常に、何らかの意味で自己相似構造または再帰構造を指します。
入れ子構造とは、次のような意味を持つ。
スプレッドシートでは、関数をネストして複雑な数式を作成できます。OpenOffice.org Calcアプリケーションの関数ウィザードを使用すると、 複数のネストレベルをナビゲートして、それぞれの関数を個別に編集(および修正)できます。
例えば:
=IF(SUM(C8:G8)=0,"Y","N")
このMicrosoft Excelの数式では、SUM関数がIF関数の中にネストされています。まず、数式はセルC8からG8までの数値の合計を計算します。次に、合計が0かどうかを判断し、合計が0の場合は「Y」、そうでない場合は「N」を表示します。
当然ながら、これらの連鎖した(あるいはより正確には入れ子になった)数式を数学的に解くためには、内部の式を事前に評価する必要があり、この外向きの方向は不可欠です。なぜなら、内部関数が返す結果が、外部関数の入力データとして一時的に使用されるからです。
1行のコード内に括弧が多数存在する可能性があるため、編集やエラー検出(デバッグ)がやや煩雑になる場合があります。そのため、最新のプログラミング環境や表計算ソフトでは、現在の編集位置に対応する括弧のペアを太字で強調表示します。開き括弧と閉じ括弧の(自動的な)バランス制御は、ブレースマッチチェックとして知られています。
現在のExcelバージョンでは、ラムダ関数を使用して数式内で名前付きカスタム関数を作成し、関数を再帰的に呼び出すことができます[ 2 ]。
構造化プログラミング言語では、ネストとは制御構造を互いに囲むことを指し、通常はソースコード内の異なるインデントレベルで示されます。次の単純なBASIC関数はその例です。
function LookupCode ( sCode as string ) as integer dim iReturnValue as integer dim sLine , sPath as stringsPath = "C:\Test.dsv" if FileExists ( sPath ) then open sPath for input as # 1 do while not EOF ( 1 ) line input # 1 , sLine if sCode = left ( sLine , 3 ) then '実行するアクションEnd if loop close # 1 End if LookupCode = iReturnValue end functionこの小さくてシンプルな例では、「if... then... end if」という条件ブロックが「do while... loop」ブロックの中にネストされています。
PascalやAdaなどの一部の言語では、宣言のネストレベルに制限がなく、サブルーチンのネストやパッケージのネスト(Ada)も可能です。以下に、両方の例を示します(実際の例を簡略化したものです)。
-- グローバル変数の問題(並列で使用できない)を解消します-- コードのロジックや構造を変更する必要なく、一連の古いソースから--手続きNesting_example_1はtype Buffer_typeはIntegerの配列( Integer範囲<>)です。procedure Decompress ( compressed : in Buffer_type ; decompressed : out Buffer_type ) is -- 以下は、翻訳されたレガシーソースです。package X_Globals is index_in , index_out : Integer ; -- *** ^ これらの変数は Decompress のローカルです。-- *** これで Decompress はタスクセーフになりました。end X_Globals ; -- メソッド 1、2、3、... (仕様) package X_Method_1 is procedure Decompress_1 ; end X_Method_1 ; -- メソッド 1、2、3、... (コード) package body X_Method_1 is use X_Globals ; procedure Decompress_1 is begin index_in := compressed ' First ; -- ここで、解凍コード、メソッド 1 end Decompress_1 ; end X_Method_1 ; -- レガシーソースの終了begin X_Method_1 . Decompress_1 ;解凍終了;test_in 、test_out :Buffer_type (1..10_000 )begin Decompress ( test_in , test_out ); end Nesting_example_1 ;入れ子構造のデータ構造は、プログラミングにおいてもよく見られる。
Lispなどの関数型プログラミング言語では、リストデータ構造と、より単純なアトムデータ構造が存在する。[ 3 ]
(原子)リストにある原子は、A、T、O、M、Sです。
(((ネストされた)リストは)(不必要に)複雑になる可能性がある)