コーディングスタイル¶
このコーディングスタイルは標準ライブラリで使われているものです。自分のプロジェクトでもこのスタイルを利用することで、他の開発者に親しみやすいものにすることができるでしょう。
命名¶
Type names are PascalCased. 例をあげます。
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
Method names are snake_cased. 例をあげます。
class Person
def first_name
end
def date_of_birth
end
def homepage_url
end
end
Variable names are snake_cased. 例をあげます。
class Greeting
@@default_greeting = "Hello world"
def initialize(@custom_greeting = nil)
end
def print_greeting
greeting = @custom_greeting || @@default_greeting
puts greeting
end
end
Constants are SCREAMING_SNAKE_CASED. 例をあげます。
LUCKY_NUMBERS = [3, 7, 11]
DOCUMENTATION_URL = "http://crystal-lang.org/docs"
頭字語 (Acronyms)¶
クラス名では、頭字語は すべて大文字 とします。例えば、HTTP
や LibXML
などです。
メソッド名では、頭字語は すべて小文字 とします。 For example #from_json
, #to_io
.
ライブラリ (Lib)¶
ライブラリ(Lib
)の名前は先頭に Lib
をつけます。例えば、LibC
や LibEvent2
などです。
ディレクトリとファイル名¶
プロジェクト内では以下のようにします。
/
には README や、 (CI や editor config などの) プロジェクトの設定、そして (CHANGELOG や CONTRIBUTING ガイドなどの) プロジェクト全体のドキュメントを配置します。src/
にはプロジェクトのソースコードを配置します。spec/
にはcrystal spec
によって実行できる、プロジェクトの spec を配置します。bin/
には実行可能ファイルを配置します。
ファイルパスは、そのファイルの内容の名前空間と一致するようにします。Files are named after the class or namespace they define, with snake_case.
例えば、HTTP::WebSocket
は src/http/web_socket.cr
で定義されています。
Indentation¶
名前空間やメソッド、ブロックやその他のネストされた内容をインデントするには スペース2つ を使用してください。例をあげます。
module Scorecard
class Parser
def parse(score_text)
begin
score_text.scan(SCORE_PATTERN) do |match|
handle_match(match)
end
rescue err : ParseError
# エラーハンドリング…
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
# 変換の実装…
end
end
end