Вложение (вычисления)
Эта статья нуждается в дополнительных цитатах для проверки . ( июнь 2018 г. ) |
В информатике и информатике вложение [1] это когда информация организована по слоям или где объекты содержат другие подобные объекты. В каком-то смысле это почти всегда относится к самоподобным или рекурсивным структурам.
Терминология
[ редактировать ]Вложенность может означать:
- вложенные вызовы:
- использование нескольких уровней подпрограмм
- рекурсивные вызовы
- вложенные уровни круглых скобок в арифметических выражениях
- вложенные блоки императивного исходного кода, такие как вложенные предложения if, while, повторение до тех пор, пока и т. д.
- скрытие информации :
- определения вложенных функций с лексической областью действия
- вложенные структуры данных, такие как записи, объекты, классы и т. д.
- вложенная виртуализация , также называемая рекурсивной виртуализацией: запуск виртуальной машины внутри другой виртуальной машины
В таблицах
[ редактировать ]В электронной таблице функции можно вкладывать друг в друга, образуя сложные формулы. Мастер функций приложения OpenOffice.org Calc позволяет перемещаться по нескольким уровням вложенности, [ нужны дальнейшие объяснения ] позволяя пользователю редактировать (и, возможно, исправлять) каждый из них отдельно.
Например:
=IF(SUM(C8:G8)=0,"Y","N")
В этой формуле Microsoft Excel функция СУММ вложена в функцию ЕСЛИ. Сначала формула вычисляет сумму чисел в ячейках от C8 до G8. Затем он решает, равна ли сумма 0, и отображает букву Y, если сумма равна 0, и букву N, если это не так.
Естественно, чтобы обеспечить математическое разрешение этих цепных (или лучше: вложенных ) формул, внутренние выражения должны быть предварительно оценены, и это внешнее направление важно, поскольку результаты, возвращаемые внутренними функциями, временно используются в качестве входных данных для внешних . .
Из-за потенциального скопления скобок только в одной строке кода редактирование и обнаружение ошибок (или отладка ) могут стать несколько неудобными . Вот почему современные среды программирования, а также программы работы с электронными таблицами выделяют жирным шрифтом пару, соответствующую текущей позиции редактирования. (Автоматический) контроль балансировки открывающей и закрывающей скобок известен как проверка соответствия скобок .
В программировании
[ редактировать ]Структуры управления
[ редактировать ]В структурированного программирования языках вложенность связана с включением управляющих структур одна в другую, что обычно обозначается различными уровнями отступов в исходном коде , как это показано в этой простой BASIC функции :
function LookupCode(sCode as string) as integer
dim iReturnValue as integer
dim sLine, sPath as string
sPath="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
'Action(s) to be carried out
End if
loop
close #1
End if
LookupCode=iReturnValue
end function
В этом небольшом и простом примере условный блок «if... then... end if» вложен в блок «do while...».
Некоторые языки, такие как Паскаль и Ада, не имеют ограничений на объявления в зависимости от уровня вложенности, что позволяет создавать точно вложенные подпрограммы или даже вложенные пакеты (Ада). Вот пример обоих (упрощенный из реального случая):
-- 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;
Структуры данных
[ редактировать ]Вложенные структуры данных также часто встречаются в программировании.
Лисп
[ редактировать ]В языках функционального программирования , таких как Lisp , существует структура данных списка , а также более простая структура данных атома . [2]
- Простые списки содержат только атомы. [2]
( A T O M S )
Атомы в списке — A, T, O, M и S.
- Вложенные списки содержат как атомы, так и другие списки. [2]
( ( ( 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 ) )
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ https://study.com/academy/lesson/nesting-loops-stan Программирование на C
- ^ Jump up to: а б с Себеста, Роберт В. (2012). Концепции языков программирования (печать) (10-е изд.). Бостон, Массачусетс, США: Аддисон-Уэсли. п. 49. ИСБН 978-0-13-139531-2 .