# Nesting (computing)

In computing science and informatics, **nesting**^{[1]} is where information is organized in layers, or where objects contain other similar objects. It almost always refers to self-similar or recursive structures in some sense.

In a spreadsheet functions can be *nested* one into another, making complex formulas. The function wizard of the OpenOffice.org Calc application allows to navigate through multiple levels of nesting,^{[further explanation needed]} letting the user to edit (and possibly correct) each one of them separately.

In this Microsoft Excel formula, the SUM function is nested inside the IF function. First, the formula calculates the sum of the numbers in the cells from C8 to G8. It then decides whether the sum is 0, and it displays the letter Y if the sum is 0, and the letter N if it is not.

Naturally, to allow the mathematical resolution of these chained (or better: *nested*) formulas, the inner expressions must be previously evaluated, and this outward direction is essential because the results that the *internal* functions return are temporarily used as entry data for the *external* ones.

Due to the potential accumulation of parentheses in only one code line, editing and error detecting (or debugging) can become somehow *awkward*. That is why modern programming environments -as well as spreadsheet programs- highlight in bold type the pair corresponding to the current editing position. The (automatic) balancing control of the opening and closing parenthesis known as *brace match checking*.

In structured programming languages, *nesting* is related to the *enclosing* of control structures one into another, usually indicated through different *indentation* levels within the source code, as it is shown in this simple BASIC function:

In this small and simple example, the conditional block “if... then... end if” is nested inside the “do while... loop” one.

Some languages such as Pascal and Ada have no restrictions on declarations depending on the nesting level, allowing precisely nested subprograms or even nested packages (Ada). Here is an example of both (simplified from a real case):

-- Getting rid of the global variables issue (cannot be used in parallel)In the functional programming languages, such as Lisp, a **list** data structure exists as does a simpler **atom** data structure.^{[2]}