コンテンツにスキップ

プログラム

プログラムはそれ自体がグローバルオブジェクトです。その中で、型やメソッド、そしてファイルローカルな変数の定義を行うことができます。

# プログラムにメソッドを定義
def add(x, y)
  x + y
end

# プログラムでメソッドを呼び出す
add(1, 2) # => 3

メソッドでは、その最後の式の値がメソッドの値となります。したがって、明示的にreturnを書く必要はありません。ただ、明示的にreturnを書くことも可能です。

def even?(num)
  if num % 2 == 0
    return true
  end

  return false
end

add(1, 2) のように、レシーバを指定せずにメソッドを呼び出したとき、そのメソッドが現在の型やその継承元に見つからなかった場合は、プログラムから探索されます。

def add(x, y)
  x + y
end

class Foo
  def bar
    # プログラムの add メソッドを実行
    add(1, 2)

    # Foo の baz メソッドを実行
    baz(1, 2)
  end

  def baz(x, y)
    x * y
  end
end

プログラムに定義されたメソッドを呼び出したいけれど、現在の型にも同名のメソッドが定義されているときは、::をプレフィックスにして呼び出すことができます。

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

プログラムに定義された変数に対して、メソッドの中からアクセスすることはできません。

x = 1

def add(y)
  x + y # error: undefined local variable or method 'x'
end

add(2)

メソッド呼び出しの際の括弧は省略することができます。

add 1, 2 # add(1, 2) と同じ

メインとなるコード

コンパイルされたプログラムを実行する際に実行される部分のコードは、ソースコードに直接書きます。"main" メソッドのような特別なメソッドに含める必要はありません。

# "Hello Crystal!" と表示するプログラム
puts "Hello Crystal!"

メインとなるコードは型定義の中に現れる場合もあります。

# "Hello" と表示するプログラム
class Hello
  # ここでの 'self' は Hello クラス
  puts self
end