В информатике и информатике вложенность [1] — это когда информация организована по слоям или когда объекты содержат другие подобные объекты. Это почти всегда в каком-то смысле относится к самоподобным или рекурсивным структурам.
Вложенность может означать:
В электронной таблице функции можно вкладывать друг в друга, образуя сложные формулы. Мастер функций приложения OpenOffice.org Calc позволяет перемещаться по нескольким уровням вложенности, позволяя пользователю редактировать (и, возможно, исправлять) каждый из них отдельно .
Например:
=ЕСЛИ(СУММ(C8:G8)=0,"Y","N")
В этой формуле Microsoft Excel функция СУММ вложена в функцию ЕСЛИ. Сначала формула вычисляет сумму чисел в ячейках от C8 до G8. Затем он решает, равна ли сумма 0, и отображает букву Y, если сумма равна 0, и букву N, если это не так.
Естественно, чтобы обеспечить математическое разрешение этих цепочек (или лучше: вложенных ) формул, внутренние выражения должны быть предварительно оценены, и это внешнее направление важно, поскольку результаты, возвращаемые внутренними функциями, временно используются в качестве входных данных для внешних . .
Из-за потенциального скопления скобок всего в одной строке кода редактирование и обнаружение ошибок (или отладка ) могут стать несколько неудобными . Вот почему современные среды программирования, а также программы для работы с электронными таблицами выделяют жирным шрифтом пару, соответствующую текущей позиции редактирования. (Автоматический) балансирующий контроль открывающей и закрывающей скобок известен как проверка соответствия скобок .
В языках структурированного программирования вложенность связана с включением управляющих структур одна в другую, что обычно обозначается различными уровнями отступов в исходном коде , как это показано в этой простой функции BASIC :
функция LookupCode ( sCode как строка ) как целое число dim iReturnValue как целое число dim sLine , sPath как строка sPath = "C:\Test.dsv", если FileExists ( sPath ) , затем откройте sPath для ввода как # 1 , пока не будет EOF ( 1 ) , строковый ввод # 1 , sLine if sCode = left ( sLine , 3 ) , then 'Action(s ) должно быть выполнено End if замыкание цикла # 1 End if LookupCode = iReturnValue функция завершения
В этом небольшом и простом примере условный блок «if... then... end if» вложен в блок «do while...».
Некоторые языки, такие как Паскаль и Ада, не имеют ограничений на объявления в зависимости от уровня вложенности, что позволяет создавать точно вложенные подпрограммы или даже вложенные пакеты (Ада). Вот пример обоих (упрощенный из реального случая):
-- Избавление от проблемы с глобальными переменными (нельзя использовать параллельно) -- из набора старых источников без необходимости изменения -- логики или структуры этого кода. -- процедура Nesting_example_1 тип Buffer_type — это массив ( целочисленный диапазон <>) целого числа ; процедура Распаковка ( сжатая : in Buffer_type ; распакованная : out Buffer_type ) — Вот переведенные устаревшие источники: package X_Globals is index_in , index_out : Integer ; -- *** ^ Эти переменные являются локальными для Decompress. -- *** Теперь распаковка безопасна для задач. конец X_Globals ; -- Методы 1,2,3,... (спецификации) пакет X_Method_1 — процедура Decompress_1 ; конец X_Method_1 ; -- Методы 1,2,3,... (код ) Тело пакета X_Method_1 использует X_Globals ; процедура Decompress_1 начинается index_in : = compressed ' First ; -- Здесь код распаковки, метод 1 end Decompress_1 ; конец X_Method_1 ; -- Конец устаревших источников начинается с X_Method_1 . Распаковать_1 ; закончить распаковку ; test_in , test_out : Buffer_type ( 1 ... 10_000 );начать распаковку ( test_in , test_out ); конец Nesting_example_1 ;
Вложенные структуры данных также часто встречаются в программировании.
В языках функционального программирования , таких как Lisp , существует структура данных списка , а также более простая структура данных атома . [2]
( А Т О М С )
Атомы в списке — A, T, O, M и S.
( ( ( Н Е С Т Е Д ) СПИСКИ ) ( C A N ) ( B E ) UN N E C E S S A R I L Y ( C O M P L E X ) )