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