SECTION VII: Function Architecture and Scopes

This section explains how to encapsulate reusable logic and how AVAP manages isolated memory to prevent side effects across different parts of the program.

7.1 Definition and Declaration (function)

A function in AVAP is an independent block of code registered in the engine so it can be invoked at any time.

Interface
function function_name(argument1, argument2, ...){ ... }
Technical Characteristics

Local Scope (function_local_vars):
When entering a function, AVAP creates a new local variable dictionary. Variables created inside the function (e.g., temp = 10) do not exist outside of it, protecting the global state.

Context Inheritance:
Functions can read global variables using the $ prefix, but any new assignment (=) remains in the local scope unless an explicit global persistence command is used.

7.2 The Return Command (return)

This is the mechanism used to terminate function execution and optionally send a value back to the caller.

Interface
return(variable_or_value)
Behavior

Termination:
Immediately stops function processing.

Data Transfer:
The value passed to return is injected into the variable that invoked the function in the main flow.

Cleanup:
Once return executes, the function’s local variable dictionary is destroyed to free memory.

7.3 Invocation and Parameter Passing

Functions are called by name followed by the required values or variables.

Professional Implementation Example
// Function definition (Local Scope)
function calculate_discount(base_price, percentage){
    factor = percentage / 100
    discount = base_price * factor
    total = base_price - discount
    return(total)
}

// Main Flow (Global Scope)
addVar(pvp, 150)

// Function call passing a reference $ and a literal value
final_price = calculate_discount($pvp, 20)

addResult(final_price) // Result: 120
7.4 Functions as Middlewares

In the registerEndpoint command (Section I), the middleware parameter accepts a list of functions. These functions have special behavior:

If a middleware executes a return() without a value or with an error value, AVAP can be configured to abort the request before reaching the main handler.

Ideal for guard tasks such as:

API key verification

Data schema validation

Initial audit logging

7.5 Recursion and Limits

AVAP supports recursion (a function calling itself), but caution is recommended regarding stack depth, especially in asynchronous processes (Section IV).

For processing large volumes of data, it is always preferable to use startLoop (Section III) instead of deep recursive calls.

Examples

1. Modular Sum Function

Code snippet

function sum(a, b){
    total = a + b
    return(total)
}
result = sum(10, 20)

2. Access Validation Function

Code snippet

function is_valid(token){
    if(token, "SECRET", "==")
        return(True)
    end()
    return(False)
}
authorized = is_valid($input_token)
