코딩 스타일

이 스타일은 표준 라이브러리에서 사용됩니다. 여러분의 프로젝트에 이 스타일을 이용하신다면 다른 개발자가 더 친숙하게 느낄 수 있을 것입니다.

네이밍

타입 이름은 캐멀 케이스입니다.

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 = "http://crystal-lang.org/docs"

줄임말

클래스 이름에서, 줄임말은 모두 대문자입니다. 예를 들어, HTTPLibXML과 같습니다.

메서드 이름에서, 줄임말은 모두 소문자입니다. 예를 들어, #from_json이나 #to_io와 같습니다.

Lib

Lib 이름은 Lib으로 시작합니다. 예를 들어, LibC, LibEvent2와 같습니다.

디렉토리와 파일 이름

한 프로젝트 안에서

  • /는 README 문서와 프로젝트 설정(CI나 에디터 설정), 그리고 기타 프로젝트 수준의 문서(변경사항이나 기여 가이드)를 포함합니다.
  • src/는 프로젝트의 소스 코드를 포함합니다.
  • spec/crystal spec으로 실행할 수 있는 프로젝트 스펙을 포함합니다.
  • bin/은 실행 파일을 포함합니다.

파일 경로는 내용물의 네임스페이스와 일치해야 합니다. 파일명은 정의하는 클래스 혹은 네임스페이스에 따라 언더스코어 케이스로 짓습니다.

예를 들어, HTTP::WebSocketsrc/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
        # 에러 처리 ...
      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
      # 변환 구현 ...
    end
  end
end

results matching ""

    No results matching ""