コーディングスタイル¶
このスタイルは標準ライブラリで使用されています。他の開発者にとって使い慣れたものにするために、独自のプロジェクトでも使用できます。
ネーミング¶
**型名**はパスカルケースです。例:
class ParseError < Exception
end
module HTTP
class RequestHandler
end
end
alias NumericValue = Float32 | Float64 | Int32 | Int64
lib LibYAML
end
struct TagDirective
end
enum Time::DayOfWeek
end
**メソッド名**はスネークケースです。例:
class Person
def first_name
end
def date_of_birth
end
def homepage_url
end
end
**変数名**はスネークケースです。例:
class Greeting
@@default_greeting = "Hello world"
def initialize(@custom_greeting = nil)
end
def print_greeting
greeting = @custom_greeting || @@default_greeting
puts greeting
end
end
**定数**は大文字のスネークケースです。例:
LUCKY_NUMBERS = [3, 7, 11]
DOCUMENTATION_URL = "https://crystal.dokyumento.jp/docs"
**例外メッセージ**はセンテンスケースです。ただし、コードまたは頭字語はメッセージの先頭で小文字で始まる場合があります。例:
raise ArgumentError.new("Cannot create a string with a null pointer")
raise RuntimeError.new("getpeername failed")
{% raise "Expected size to be an integer literal" %}
頭字語¶
クラス名では、頭字語はすべて大文字です。例:HTTP
、LibXML
。
メソッド名では、頭字語はすべて小文字です。例:#from_json
、#to_io
。
ライブラリ¶
Lib
名はLib
で接頭辞が付けられます。例:LibC
、LibEvent2
。
ディレクトリとファイル名¶
プロジェクト内
/
にはREADME、プロジェクト設定(例:CIやエディター設定)、その他のプロジェクトレベルのドキュメント(例:変更ログや貢献ガイド)が含まれています。src/
にはプロジェクトのソースコードが含まれています。spec/
にはプロジェクトのスペックが含まれており、crystal spec
で実行できます。bin/
には実行ファイルが含まれています。
ファイルパスは、その内容の名前空間と一致します。ファイルは、定義するクラスまたは名前空間にちなんで命名され、スネークケースを使用します。
例:HTTP::WebSocket
はsrc/http/web_socket.cr
に定義されています。
インデント¶
名前空間、メソッド、ブロック、またはその他のネストされたコンテキスト内のコードをインデントするには、**スペース2つ**を使用します。例:
module Scorecard
class Parser
def parse(score_text)
begin
score_text.scan(SCORE_PATTERN) do |match|
handle_match(match)
end
rescue err : ParseError
# handle error ...
end
end
end
end
クラス内では、メソッド定義、定数、内部クラス定義を**改行1つ**で区切ります。例:
module Money
CURRENCIES = {
"EUR" => 1.0,
"ARS" => 10.55,
"USD" => 1.12,
"JPY" => 134.15,
}
class Amount
getter :currency, :value
def initialize(@currency, @value)
end
end
class CurrencyConversion
def initialize(@amount, @target_currency)
end
def amount
# implement conversion ...
end
end
end