Style de codage

Ce style est utilisé dans la librairie. Vous pouvez l'utiliser dans vos propres projets pour qu'ils paraissent familier aux autres développeurs.

Nommage

Les noms de Type sont en casse CamelCase. Par exemple:

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

Les noms de Méthodes sont en case Underscore. Par exemple:

class Person
  def first_name
  end

  def date_of_birth
  end

  def homepage_url
  end
end

Les noms de Variables sont en case Underscore. Par exemple:

class Greeting
  @@default_greeting = "Hello world"

  def initialize(@custom_greeting = nil)
  end

  def print_greeting
    greeting = @custom_greeting || @@default_greeting
    puts greeting
  end
end

Les Constantes sont en case Screaming. Par exemple:

LUCKY_NUMBERS     = [3, 7, 11]
DOCUMENTATION_URL = "http://crystal-lang.org/docs"

Acronymes

Dans les noms de classe, les acronymes sont en lettres capitales. Par exemple, HTTP, et LibXML.

Dans les noms de méthode, les acronymes sont en lettres minuscules. Par exemple #from_json, #to_io.

Libs

Les noms de Lib sont préfixés par Lib. Par exemple: LibC, LibEvent2.

Dossier et Noms de fichiers

Dans un projet:

  • / contient un fichier readme, toute configuration du projet (i.e., CI ou configuration d'IDE), et toute documentation au niveau projet (i.e. changelog ou guide de contribution).
  • src/ contient le code source du projet.
  • spec/ contient les spécifications du projet, qui peut être exécuté avec crystal spec.
  • bin/ contient tous les exécutables.

Les chemins de fichier correspondent à l'espace de nommage de leur contenu. Les fichiers sont nommés après la classe ou l'espace de nommage qu'ils définissent, en case Underscore.

Par exemple, HTTP::WebSocket est défini dans src/http/web_socket.cr.

Blancs

Utilisez deux espaces pour indenter du code dans des espaces de nom, méthodes, blocs et tout autre contexte imbriqué. Par exemple:

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

Dans une classe, séparez les définitions de méthodes, constantes et définitions de classes internes avec une nouvelle ligne. Par exemple:

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

results matching ""

    No results matching ""