Classes in Eia
Eia supports adding external class and lets you access its public functions and variables. You may import an external class as a static or an instantiated object.
Defining Classes
So how do you define a class?
It's really simple, just add visible modifier to global variables and functions to make it visible to other classes.
visible fn sayMeow() {
  println("Meow!")
}By default, all the variables and functions are marked private.
Constructors
In Eia, you may add an object constructor by defining a visible init with desired arguments.
You may define multiple of init functions with varying number of arguments.
init() function is not required if you are accessing a class statically
// Global visible variables that stores a person^s name and their age
// Variables initially nil (null)
 
visible var person: String = nil
visible var age: Int = nil
 
visible fn init(name: String) {
  person = name
  age = 20  // default age
}
 
visible fn init(name: String, _age: Int) {
  person = name
  age = _age
}
 
visible fn printUser() {
  println(format("Person named %s of age %d", person, age))
}Including an external class
You can include an external class using include keyword.
E.g., including Person.eia which lies in the same directory (simulation).
include(
  "simulation/Person"
   ...
)If a path
- Starts with 
/, Eia assumes it's a full path. - Doesn't start with 
/, it appends user directory at the beginning. - Starts with prefix 
stdlib, it is replaced by path of standard library directory. 
Creating objects
new keyword is used to create an instance of a class:
// Create an instance of Person using either init(name: String)
// or init(name: String, age: Int)
 
let person = new Person("Melon", 16)
person.printUser()
println(person.age)It prints the following:
Person named Melon of age 16
16Static usage of a class
Consider this file:
include(static:std:string)
 
var lastNTimes = 0
 
visible fn sayMeow(nTimes: Int) {
  nTimes += lastNTimes
  println("Meow ".repeat(nTimes))
}Now, to use this file statically, we'll import it:
include(static:"simulation/Cat.eia")then we use it:
println(sayMeow(2))
println(sayMeow(3))this outputs the following:
Meow Meow
Meow Meow Meow Meow MeowTips
In Eia you can implement a string() function to return a custom text:
visible fn string(): String {
  return "Person(name=" + person + ", age=" + age + ")"
}now when you do:
let person = new Person("Melon", 16)
println(person)you would see:
Person(name=Melon, age=16)