编码风格¶
此风格用于标准库。您可以在自己的项目中使用它,使其对其他开发者更加熟悉。
命名¶
类型名称使用帕斯卡命名法。例如
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.ruby-lang.org.cn/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
。
目录和文件名¶
在一个项目中
/
包含自述文件、任何项目配置(例如 CI 或编辑器配置)以及任何其他项目级文档(例如变更日志或贡献指南)。src/
包含项目的源代码。spec/
包含 项目的规格,可以使用crystal spec
运行。bin/
包含任何可执行文件。
文件路径与它们所包含内容的命名空间匹配。文件以它们定义的类或命名空间命名,使用蛇形命名法。
例如,HTTP::WebSocket
定义在 src/http/web_socket.cr
中。
缩进¶
使用两个空格缩进命名空间、方法、代码块或其他嵌套上下文中的代码。例如
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
在一个类中,使用一个换行符分隔方法定义、常量和内部类定义。例如
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