Where is the main function in EK9?
← Getting Started · Ref: Q17
EK9 does not have a main() function. Instead, you define named programs inside a defines program block.
A program is a named method inside defines program:
defines program MyProgram() stdout <- Stdout() stdout.println("Hello")
Key points:
1. Programs are NAMED, not anonymous main functions. You choose the name: HelloWorld(), DataProcessor(), WebServer(). This is more descriptive than a generic main() entry point.
2. Multiple programs can exist in one file
Related utilities can live together in the same module. Run a specific one with: ek9 -r ProgramName file.ek9. If a file has only one program, -r is optional.
3. Programs can accept typed command-line arguments
Declare parameters with -> and EK9 automatically converts string arguments to the declared types (String, Integer, Float, Boolean, Date, Time, and more). Exit code 9 means wrong argument count. Exit code 10 means type conversion failed. Both are reported before the program runs, with the line ek9: wrong number of program arguments (exit 9) - or ek9: cannot convert a program argument (exit 10) - first on stderr, so they never read as the program's own 9 or 10.
4. Programs share module resources
All programs in a module can access the module's functions, classes, constants, and types.
The code example below shows two programs in one module: a simple greeting and one that accepts a name argument.
See Q1 for a minimal program. See Q5 for source file structure. See Q49 for defining functions that programs can call. See Q93 for defining classes. See Q111 for components.
Example
#!ek9 defines module qa.getting.started.entry.point defines function greetingMessage() <- message as String: "Welcome to EK9" defines program SimpleGreeting() stdout <- Stdout() stdout.println(greetingMessage()) PersonalGreeting() -> name as String stdout <- Stdout() stdout.println(`Hello, ${name}!`)
Common mistakes
E50001 — A typo in the function name 'greetingMessge' means the compiler cannot find any identifier with that name. Check spelling carefully as EK9 is case-sensitive. See ek9 -h E50001 for details.
Incorrect:
stdout.println(greetingMessge())
Correct:
stdout.println(greetingMessage())
Other ways to ask this
- What is the entry point in EK9?
- How do I define a program in EK9?
- Can I have multiple programs in one file?
- How does defines program work?
- How do I pass arguments to a program?
- How do I accept command-line parameters?
Coming from another language?
C: main(), Java: public static void main(String[] args), Go: func main() in package main, Rust: fn main(), Python: if __name__ == '__main__'. EK9 uses named programs in defines program blocks. Unlike Java and Go, multiple entry points per file. Unlike C and Rust, programs are named and selectable at runtime.
Keywords: arguments, beginner, defines, entry, first, function, intro, main, multiple, parameters, point, program, run, start