2013-02-26 3 views
1

Que dois-je faire lors de la définition des constantes ou des symboles attr_accessor très grands? Par exemple, quelque chose comme ceci:Amélioration de la lisibilité du grand attr_accessor

ATTRIBUTES = %w(id name full_name owner private html_url description fork url forks_url keys_url collaborators_url teams_url hooks_url issue_events_url events_url assignees_url branches_url tags_url blobs_url git_tags_url git_refs_url trees_url statuses_url languages_url stargazers_url contributors_url subscribers_url subscription_url commits_url git_commits_url comments_url issue_comment_url contents_url compare_url merges_url archive_url downloads_url issues_url pulls_url milestones_url) 

attr_accessor :name, :login, :full_name, :owner, :private, :html_url, :description, :fork, :url 

dans une classe est terrible. Est-ce la meilleure façon? Je veux savoir s'il existe d'autres moyens d'améliorer la lisibilité.

+0

Cela devrait être demandé sur http://codereview.stackexchange.com si vous êtes intéressé par la façon de le nettoyer. Si ça ne marche pas, StackOverflow est le bon endroit. –

Répondre

6

lignes de changement à certaine largeur:

ATTRIBUTES = %w[ 
    id name full_name owner private html_url description fork url forks_url 
    keys_url collaborators_url teams_url hooks_url issue_events_url events_url 
    ... 
] 

ou si vous n'avez pas besoin d'enregistrer des lignes, puis mettre chaque élément sur une ligne distincte peut être facile:

ATTRIBUTES = %w[ 
    id name 
    full_name 
    owner 
    private 
    html_url 
    ... 
] 

ou si vous avez formatage de l'heure, alors vous pourriez vouloir faire plusieurs colonnes et les aligner:

ATTRIBUTES = %w[ 
    id     name    full_name   owner    
    private html_url description fork url    forks_url 
    keys_url   collaborators_url teams_url   hooks_url 
    issue_events_url events_url   ... 
] 

En Ruby 2.0, un nouveau littéral e Xpression %i[...] a été introduit pour le tableau de symboles:

attr_accessor *%i[ 
    name 
    login 
    full_name 
    owner 
    private 
    ... 
] 
+1

Je pense qu'il comprend le point! :) – Arindam

+1

+1 pour m'avoir introduit à la notation '% i []' :) –

+0

btw formatage est vraiment facile si vous utilisez VIM avec le plugin Tabular (http://vimcasts.org/episodes/aligning-text-with- tabular-vim /) –

0

Vous pouvez utiliser un fichier YAML ou définir un fichier de configuration. Ensuite, lorsque vous initialisez, vous pouvez affecter des valeurs.

Exemple YAML:

#configuration file 
config: 

    FIRST_NAME: "Bob" 
    USER_ID: "abc13324" 
    LAST_NAME: "Smith" 
    Etc.... 

Exemple Ruby:

class NewClass 
    def initialize 
     configFile = YAML.load_file("pathToYourYamlFile.yaml") 
     @firstName = configFile['config']['FIRST_NAME'] 
     @lasttName = configFile['config']['LAST_NAME'] 
     @user_id = configFile['config']['USER_ID'] 
     etc.... 
    end 
end 

Il est préférable pour définir des constantes dans votre programme. Vous pouvez ensuite y accéder à partir de n'importe quel fichier.

+0

pouvez-vous donner l'exemple de votre réponse? –

+0

Bien sûr, donnez-moi un min. – BlackHatSamurai

-2

Il me semble que tous ces éléments sont les noms de colonnes de table.

Si oui, vous n'avez pas besoin d'attr_accessor pour ceux-ci, les rails leur donnent automatiquement accès.

Vous pouvez appeler object.name, object.html_url et ainsi de suite.

Pouvez-vous confirmer si tel est le cas

+0

Ce n'est pas des rails, mais merci pour aider –

0

Au fil des ans, grâce à rebondir sur plusieurs langues, je suis venu à utiliser ce genre de mise en page:

ATTRIBUTES = %w(
    archive_url assignees_url 
    blobs_url branches_url 

    collaborators_url comments_url commits_url compare_url 
    contents_url contributors_url 

    description downloads_url 
    events_url 
    fork forks_url full_name 
    git_commits_url git_refs_url git_tags_url 
    hooks_url html_url 
    id issue_comment_url issue_events_url issues_url 
    keys_url 
    languages_url 
    merges_url milestones_url 
    name 
    owner 
    private pulls_url 

    stargazers_url statuses_url subscribers_url 
    subscription_url 

    tags_url teams_url trees_url 
    url 
) 

%w(
    description 
    fork full_name 
    html_url 
    login 
    name 
    owner 
    private 
    url 
).each { |a| attr_accessor a.to_sym } 

Les lignes sont classés par ordre alphabétique, et chaque mot individuel sur la ligne est trié par ordre alphabétique.

Si une ligne particulière devient trop longue, je vais l'envelopper et ajouter des lignes vides avant et après pour les délimiter visuellement, en maintenant le type de lignes et les mots dans la ligne.

La plupart des éditeurs facilitent le tri, et c'est le premier passage à nettoyer une liste désordonnée qui est pénible, ensuite ce n'est pas grave pour la maintenir. J'utilise vim, qui a la commande sort, mais Sublime Text 2, que je traite comme mon remplacement de "bloc-notes" le fait aussi.

Je fais cela pour la maintenance.Je trouve qu'il est beaucoup plus facile de balayer une ligne triée, même si elle n'est pas équidistante dans les colonnes avec les autres lignes, que d'essayer de trouver quelque chose qui n'est pas dans un ordre trié dans de jolies colonnes. La netteté compte mais l'ordre me fait mal à la tête. Essayer d'éditer une table qui est dans les colonnes et la faire disparaître parce que j'ai ajouté un mot vieillit très rapidement, donc les colonnes ont été jetées, et je trier juste. Je suis sûr que ça dérange mes collègues au début quand je leur dis de le faire de cette façon, mais ils voient le bénéfice assez tôt, et ça me fait taire. :-)

Avec l'ajout de Ruby v2.0 de %i, le second exemple peut être modifié à:

%i(
    description 
    fork full_name 
    html_url 
    login 
    name 
    owner 
    private 
    url 
).each { |s| attr_accessor s } 

Ce n'est pas un grand changement, mais il est un nettoyant tout petit peu.