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