The program is a global object in which you can define types, methods and file-local variables.
# Defines a method in the program def add(x, y) x + y end # Invokes the add method in the program add(1, 2) #=> 3
A method's value is the value of its last expression; there's no need for explicit return
expressions. However, explicit return
expressions are possible:
def even?(num) if num % 2 == 0 return true end return false end
When invoking a method without a receiver, like add(1, 2)
, it will be searched for in the program if not found in the current type or any of its ancestors.
def add(x, y) x + y end class Foo def bar # invokes the program's add method add(1, 2) # invokes Foo's baz method baz(1, 2) end def baz(x, y) x * y end end
If you want to invoke the program's method, even though the current type defines a method with the same name, prefix the call with ::
:
def baz(x, y) x + y end class Foo def bar baz(4, 2) #=> 2 ::baz(4, 2) #=> 6 end def baz(x, y) x - y end end
Variables declared in a program are not visible inside methods:
x = 1 def add(y) x + y # error: undefined local variable or method 'x' end add(2)
Parentheses in method invocations are optional:
add 1, 2 # same as add(1, 2)
Main code, the code that is run when you compile and run a program, can be written directly in a source file without the need to put it in a special "main" method:
# This is a program that prints "Hello Crystal!" puts "Hello Crystal!"
Main code can also be inside type declarations:
# This is a program that prints "Hello" class Hello # 'self' here is the Hello class puts self end
To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/docs/syntax_and_semantics/the_program.html