Modules
Organizing and reusing code
Import Syntax
Nevaarize supports two types of imports:
- Standard Library — Built-in modules
- File Imports — Your own
.nvafiles
Standard Library Imports
Import built-in modules with the stdlib keyword:
// Import syntax: import stdlib [module] as [alias]
import stdlib math as m
import stdlib time as t
import stdlib io as io
// Use imported functions
print(m.Sqrt(16)) // 4.0
print(m.Pow(2, 10)) // 1024.0
print(t.clock()) // current time
Available Standard Libraries
| Module | Description | Key Functions |
|---|---|---|
math |
Mathematical operations | Abs, Sqrt, Pow, Sin, Cos, Floor, Ceil |
time |
Time and timing | clock, sleep, timestamp, format |
io |
Input/Output | Print, Input, ReadFile, WriteFile |
File Imports
Import your own .nva files as modules:
// Import a local file
import "utils/helpers.nva" as helpers
import "config.nva" as config
// Use imported functions
result = helpers.calculate(10)
print(config.appName)
Creating a Module
Any .nva file can be a module. Here's an example:
File: utils/math.nva
// utils/math.nva - Custom math utilities
// Constants
PI = 3.14159265359
// Functions that will be available to importers
func square(x) {
return x * x
}
func cube(x) {
return x * x * x
}
func circleArea(radius) {
return PI * radius * radius
}
func clamp(value, minVal, maxVal) {
if (value < minVal) {
return minVal
}
if (value > maxVal) {
return maxVal
}
return value
}
File: main.nva
// main.nva - Using the module
import "utils/math.nva" as myMath
print("Square of 5:", myMath.square(5))
print("Cube of 3:", myMath.cube(3))
print("Circle area (r=2):", myMath.circleArea(2))
print("Clamped value:", myMath.clamp(150, 0, 100))
Module Best Practices
1. One Purpose Per Module
// Good: Single responsibility
// validation.nva - Only validation functions
func isEmail(s) { ... }
func isPhone(s) { ... }
func isRequired(s) { ... }
// Bad: Mixed concerns
// stuff.nva - Random utilities
func isEmail(s) { ... }
func calculateTax(amount) { ... }
func formatDate(d) { ... }
2. Use Clear Aliases
// Good: Descriptive aliases
import "validators/user.nva" as userValidator
import "formatters/date.nva" as dateFormatter
// Usage is clear
userValidator.isValid(user)
dateFormatter.toISO(date)
// Bad: Unclear aliases
import "validators/user.nva" as v
import "formatters/date.nva" as d
// Hard to understand
v.isValid(user)
d.toISO(date)
3. Project Structure
myproject/
├── main.nva # Entry point
├── config.nva # Configuration
├── modules/
│ ├── auth.nva # Authentication
│ ├── database.nva # Database operations
│ └── api.nva # API handlers
├── utils/
│ ├── validation.nva # Validation helpers
│ ├── formatting.nva # String formatting
│ └── logging.nva # Logging utilities
└── tests/
└── test_auth.nva # Tests