Skip to content

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

Object-Oriented Examples

Functional Programming

Practical Use-Cases

Running Examples

Using the Script Runner

cd run
onion Hello.on

Compiling and Running

onionc Hello.on
java Hello

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
Primes.on Sieve of Eratosthenes + factorization Boolean arrays, for/while loops
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
DeptReport.on CSV group-by/aggregate pipeline Csv, records, Maps::groupBy, Stats
ExprEval.on Expression evaluator Interfaces, polymorphism
AdtExpr.on Expression evaluator, as an ADT enum enum case cases, select, exhaustiveness
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
WordStats.on Word-frequency text statistics Strings, Maps::countBy, records
LogSummary.on Shape-first log analysis record ... from re"...", Maps::countBy
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
SetOperations.on Set algebra onion.Sets (union, intersection, difference)
PrimitivePredicate.on Filtering with a primitive predicate java.util.function.Predicate[Int], removeIf
PrimitiveFunctionalInterfaces.on Primitive-typed Java functional interfaces Predicate, Supplier, Function with primitive type args
SortWithPrimitiveComparator.on Sorting with a primitive comparator java.util.Comparator[Int], primitive lambda bridging
CollectionUtilities.on Map/list utilities onion.Maps, onion.Iterables, custom sort
FizzBuzz.on Classic FizzBuzz Loops, modulo, conditionals
Fibonacci.on Recursive vs. iterative Fibonacci Recursion, loops, Timing
DataClass.on Record equals/hashCode/copy demo Records, toString, copy
Bidirectional.on One record, every direction from re"...", derive!(Json, Yaml), example
CsvProcessor.on CSV header parsing + aggregation Csv::parseWithHeader
CliArgsDemo.on Manual CLI argument parsing onion.Args
FileWordCounter.on Word count from a file File I/O, BufferedReader
Generics.on Generic box class Generic classes, type parameters
PairSample.on Generic pair class Generic classes, multiple type parameters
Extension.on Extension methods on a built-in type extension blocks
NullSafety.on Nullable types and safe navigation T?, ?. safe call operator
ValVarInference.on val/var type inference Local type inference, mutable vs. immutable
PrimitivePrint.on Printing primitives IO::println/IO::print
FunctionTypesSample.on Function-typed parameters Function types, lambdas
JavaCollectionsSample.on Java collections interop java.util.ArrayList, Collections
JavaGenerics.on Java generics interop java.util.ArrayList[String]
GuessNumber.on Number-guessing game BufferedReader, control flow
TodoApp.on Interactive CLI todo list ArrayList, console I/O
HttpJsonClient.on HTTP + JSON client onion.Http
RegexLogParser.on Log line parsing re"..." regex select patterns
RecordLaws.on Record law/example clauses law, example, compile-time checking
SchemePrefix.on User-definable scheme-prefixed literals prefix"..." raw string literals
ShapeFirst.on Shape-first scripting tour re"...", pipelines, do-notation, auto-CLI
FixedWidthDemo.on User-written Shape instance onion.Shape, Outcome/Defect, law
JsonYamlShapeDemo.on Named JSON/YAML shape on a record shape name = json/yaml
ConfigEditDemo.on Lossless config editing Lens, Residue, comment/order preservation
BrokenLogDemo.on Partial-failure log parsing onion.Shape, Outcome::values/defects
ToolDemo.on CLI derived from a tool declaration tool, capabilities, --help/--contract/--plan

Learning Path

Beginner

  1. Start with Hello.on - Basic syntax
  2. Try Array.on - Data structures
  3. Explore Foreach.on - Iteration

Intermediate

  1. Study Factorial.on - Recursion
  2. Learn LineFilter.on - Lambdas
  3. Review Bean.on - OOP patterns
  4. Try UnitConverter.on - Extension methods and CLI args

Advanced

  1. Analyze Calculator.on - GUI programming
  2. Understand Delegation.on - Design patterns
  3. Examine LineCounter.on - File processing

Practical

  1. ConfigApp.on - Build a CLI-driven config loader
  2. JsonApiClient.on - Parse JSON and call HTTP APIs
  3. AsyncDownloader.on - Run tasks concurrently
  4. ShellPipeline.on - Orchestrate shell commands
  5. ResultValidation.on - Handle errors functionally

Next Steps