程式碼風格¶
此風格用於標準函式庫。您可以在自己的專案中使用它,讓其他開發人員更容易熟悉。
命名¶
類型名稱使用 PascalCase 命名法。例如
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
方法名稱使用 snake_case 命名法。例如
class Person
def first_name
end
def date_of_birth
end
def homepage_url
end
end
變數名稱使用 snake_case 命名法。例如
class Greeting
@@default_greeting = "Hello world"
def initialize(@custom_greeting = nil)
end
def print_greeting
greeting = @custom_greeting || @@default_greeting
puts greeting
end
end
常數使用 SCREAMING_SNAKE_CASED 命名法。例如
LUCKY_NUMBERS = [3, 7, 11]
DOCUMENTATION_URL = "https://crystal.dev.org.tw/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/
包含任何可執行檔。
檔案路徑與其內容的命名空間相符。檔案以它們定義的類別或命名空間命名,使用snake_case。
例如,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