Examples Overview¶
This section provides practical examples of Onion programs, demonstrating various language features and programming patterns.
Example Programs¶
All examples can be found in the run/ directory of the Onion repository.
Basic Programs¶
- Hello World - Simple output
- Arrays - Array manipulation
- User Input - Reading input
Object-Oriented Examples¶
- Classes and Objects - Basic OOP
- Inheritance - Extending classes
- Interfaces - Interface implementation
Functional Programming¶
- Lambda Expressions - Anonymous functions
- Closures - Capturing variables
- Recursion - Recursive algorithms
Practical Use-Cases¶
- Scripting & CLI - Command-line arguments, process execution, file I/O
- JSON & HTTP - JSON/YAML parsing, HTTP client basics
- Async & Concurrency - Futures, async composition, do-notation
- Error Handling - Option, Result, validation patterns
Running Examples¶
Using the Script Runner¶
Compiling and Running¶
Example Index¶
| File | Description | Topics Covered |
|---|---|---|
Hello.on |
Hello World | Basic I/O |
Array.on |
Array operations | Arrays, loops |
StringCat.on |
String concatenation | Strings, arrays |
ReadLine.on |
User input | I/O, strings |
List.on |
Dynamic lists | ArrayList, << operator |
Foreach.on |
Foreach loop | Iteration, collections |
Select.on |
Pattern matching | Select expression |
LineFilter.on |
Lambda filtering | Lambdas, closures |
LineCounter.on |
File processing | Recursion, I/O |
Factorial.on |
Recursion | Recursive functions |
Delegation.on |
Delegation pattern | Interfaces, forward |
Calculator.on |
GUI calculator | Swing, event handling |
Bean.on |
JavaBean pattern | Serialization, getters/setters |
OrderReport.on |
Larger data pipeline | Records, enums, collection pipelines |
ExprEval.on |
Expression evaluator | Interfaces, polymorphism |
StatsApp.on |
Statistics processing | Generics, extension methods |
TodoManager.on |
Task manager | Records, enums, extension methods |
ShapeProcessor.on |
Geometry shapes | Inheritance, extension methods |
TextAnalyzer.on |
Text statistics | String/List extension methods |
ConfigApp.on |
CLI + config file | Args, YAML, derive!(Yaml) |
JsonApiClient.on |
JSON + HTTP client | Http, Json, records |
AsyncDownloader.on |
Concurrent futures | Future, do-notation |
ShellPipeline.on |
Shell process pipeline | Proc, file I/O |
ResultValidation.on |
Validation with errors | Option, Result |
StaticImports.on |
Static method imports | import { Class::method } |
UnitConverter.on |
CLI unit converter | Extension methods, Args |
Learning Path¶
Beginner¶
- Start with
Hello.on- Basic syntax - Try
Array.on- Data structures - Explore
Foreach.on- Iteration
Intermediate¶
- Study
Factorial.on- Recursion - Learn
LineFilter.on- Lambdas - Review
Bean.on- OOP patterns - Try
UnitConverter.on- Extension methods and CLI args
Advanced¶
- Analyze
Calculator.on- GUI programming - Understand
Delegation.on- Design patterns - Examine
LineCounter.on- File processing
Practical¶
ConfigApp.on- Build a CLI-driven config loaderJsonApiClient.on- Parse JSON and call HTTP APIsAsyncDownloader.on- Run tasks concurrentlyShellPipeline.on- Orchestrate shell commandsResultValidation.on- Handle errors functionally
Next Steps¶
- Basic Examples - Simple programs
- OOP Examples - Object-oriented code
- Functional Examples - Functional programming
- Scripting Examples - CLI and process automation
- JSON & HTTP Examples - Network and data formats
- Async Examples - Concurrent programming
- Error Handling Examples - Validation and errors