コンテンツにスキップ

プログラム

プログラムとは、コンパイラによって処理されるソースコード全体のことです。ソースは解析され、プログラムの実行可能なバージョンにコンパイルされます。

プログラムのソースコードはUTF-8でエンコードされている必要があります。

トップレベルスコープ

他の名前空間の外で定義された型、定数、マクロ、メソッドなどの機能はトップレベルスコープにあります。

# Defines a method in the top-level scope
def add(x, y)
  x + y
end

# Invokes the add method on the top-level scope
add(1, 2) # => 3

トップレベルスコープのローカル変数はファイルローカルであり、メソッド本体内では表示されません。

x = 1

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

add(2)

プライベートな機能も現在のファイル内でのみ表示されます。

ダブルコロンプレフィックス(::)は、トップレベルスコープの名前空間、定数、メソッド、またはマクロを明確に参照します。

def baz
  puts "::baz"
end

CONST = "::CONST"

module A
  def self.baz
    puts "A.baz"
  end

  # Without prefix, resolves to the method in the local scope
  baz

  # With :: prefix, resolves to the method in the top-level scope
  ::baz

  CONST = "A::Const"

  p! CONST   # => "A::CONST"
  p! ::CONST # => "::CONST"
end

メインコード

メソッド、マクロ、定数、型定義のいずれでもなく、メソッドまたはマクロ本体内にない式は、メインコードの一部です。メインコードは、ソースファイルのインクルード順にプログラムが開始されるときに実行されます。

メインコードに特別なエントリポイント(mainメソッドなど)を使用する必要はありません。

# This is a program that prints "Hello Crystal!"
puts "Hello Crystal!"

メインコードは名前空間の内側にも存在できます

# This is a program that prints "Hello"
class Hello
  # 'self' here is the Hello class
  puts self
end