Skip to content

The Program

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

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