Vnoření (výpočet) - Nesting (computing)
Ve vědě o výpočetní technice a informatice je vnoření to, kde jsou informace uspořádány ve vrstvách nebo kde objekty obsahují jiné podobné objekty. Téměř vždy v určitém smyslu odkazuje na sebepodobné nebo rekurzivní struktury.
Terminologie
Vnoření může znamenat:
- vnořené hovory:
- pomocí několika úrovní podprogramů
- rekurzivní volání
- vnořené úrovně závorek v aritmetických výrazech
- vnořené bloky imperativního zdrojového kódu, jako jsou vnořené klauzule if-clauses, while-clauses, repeat-until clauses atd.
-
skrývání informací :
- definice vnořených funkcí s lexikálním rozsahem
- vnořené datové struktury, jako jsou záznamy, objekty, třídy atd.
- vnořená virtualizace , nazývaná také rekurzivní virtualizace: provozování virtuálního stroje uvnitř jiného virtuálního stroje
V tabulkách
V tabulce lze funkce vnořit jeden do druhého a vytvářet složité vzorce. Průvodce funkcí aplikace OpenOffice.org Calc umožňuje procházet několika úrovněmi vnoření a umožňuje uživateli upravit (a případně opravit) každou z nich zvlášť.
Například:
=IF(SUM(C8:G8)=0,"Y","N")
V tomto vzorci Microsoft Excel je funkce SUMA vnořená uvnitř funkce IF. Nejprve vzorec vypočítá součet čísel v buňkách od C8 do G8. Poté rozhodne, zda je součet 0, a zobrazí písmeno Y, pokud je součet 0, a písmeno N, pokud není.
Samozřejmě, že pro umožnění matematického řešení těchto řetězcem (nebo lépe: vnořené ) formule, vnitřní výrazy musí být předem vyhodnoceny, a to směrem ven je zásadní, protože výsledky, že interní funkce vrací dočasně používaných jako vstupních dat pro externí ty .
Vzhledem k možnému hromadění závorek pouze v jednom řádku kódu může být úpravy a detekce chyb (nebo ladění ) nějak nepříjemné . To je důvod, proč moderní programovací prostředí - stejně jako tabulkové programy - zvýrazňují tučným písmem dvojici odpovídající aktuální pozici pro úpravy. (Automatická) kontrola vyvážení otevírací a zavírací závorky známá jako kontrola shody závorky .
V programování
Kontrolní struktury
V strukturovaných programovacích jazyků, vnoření souvisí s uzavírající z řídicích struktur jeden do druhého, obvykle označené prostřednictvím různých odsazení úrovních v rámci zdrojového kódu , jak je znázorněno v tomto jednoduchém BASIC funkce:
function LookupCode(code as string) as integer
dim sLine, path as string
dim ReturnValue as integer
path="C:\Test.dsv"
if FileExists(path) then
open path for input as #1
do while not EOF(1)
line input #1, sLine
if code==left(sLine, 3) then
'Action(s) to be carried out
End if
loop
close #1
End if
LookupCode=ReturnValue
end function
V tomto malém a jednoduchém příkladu je podmíněný blok „if ... then ... end if“ vnořen do bloku „do while ... loop“.
Některé jazyky jako Pascal a Ada nemají žádná omezení deklarací v závislosti na úrovni vnoření, což umožňuje přesně vnořené podprogramy nebo dokonce vnořené balíčky (Ada). Zde je příklad obou (zjednodušeno od skutečného případu):
-- Getting rid of the global variables issue (cannot be used in parallel)
-- from a set of old sources, without the need to change that code's
-- logic or structure.
--
procedure Nesting_example_1 is
type Buffer_type is array(Integer range <>) of Integer;
procedure Decompress(
compressed : in Buffer_type;
decompressed: out Buffer_type
)
is
-- Here are the legacy sources, translated:
package X_Globals is
index_in, index_out: Integer;
-- *** ^ These variables are local to Decompress.
-- *** Now Decompress is task-safe.
end X_Globals;
-- Methods 1,2,3,... (specifications)
package X_Method_1 is
procedure Decompress_1;
end X_Method_1;
-- Methods 1,2,3,... (code)
package body X_Method_1 is
use X_Globals;
procedure Decompress_1 is
begin
index_in:= compressed'First;
-- Here, the decompression code, method 1
end Decompress_1;
end X_Method_1;
-- End of the legacy sources
begin
X_Method_1.Decompress_1;
end Decompress;
test_in, test_out: Buffer_type(1..10_000);
begin
Decompress(test_in, test_out);
end Nesting_example_1;
Datové struktury
Vnořené datové struktury se také běžně vyskytují v programování.
Lisp
Ve funkčních programovacích jazycích, jako je Lisp , existuje datová struktura seznamu stejně jako jednodušší atomová datová struktura.
- Jednoduché seznamy obsahují pouze atomy.
( A T O M S )
Atomy v seznamu jsou A, T, O, M a S.
- Vnořené seznamy obsahují atomy i další seznamy.
( ( ( N E S T E D ) L I S T S ) ( C A N ) ( B E ) U N N E C E S S A R I L Y ( C O M P L E X ) )