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
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 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