提高大型attr_accessor的可读性

时间:2013-02-26 18:15:19

标签: ruby coding-style readability human-readable

在定义常量或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
在课堂上很糟糕。这是最好的方法吗?我想知道是否还有其他方法可以提高可读性。

4 个答案:

答案 0 :(得分:6)

更改某个宽度的行:

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
  ...
]

或者如果您不需要保存线条,那么将每个项目放在一个单独的行上可能很容易:

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

或者如果你有时间格式化,那么你可能想要制作几个列并对齐它们:

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          ...
]

在Ruby 2.0中,为符号数组引入了新的文字表达式%i[...]

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

答案 1 :(得分:0)

您可以使用YAML文件或设置配置文件。然后在初始化时,您可以指定值。

示例YAML:

#configuration file 
config: 

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

示例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 

这最适合在程序中设置常量。然后,您可以从任何文件访问它们。

答案 2 :(得分:0)

多年来,通过反弹各种语言,我开始使用这种布局:

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 }

行按字母顺序排序,行上的每个单词都按字母顺序排序。

如果某一特定行太长,我会将其包裹起来并在它们之前和之后添加空白行,以便在视觉上划分它们,保持行中的行和单词的排序。

大多数编辑都可以轻松排序,这是第一次清理凌乱的列表,这是一个痛苦的事情,之后维持它是没有什么大不了的。我使用vim,它有sort命令,但Sublime Text 2,我把它视为我的“记事本”替代品也是这样做的。

我这样做是为了维护。我发现通过排序的行扫描要容易得多,即使它与其他行的列不是均匀分布,也不是我试图找到一些不在排序顺序中显示的内容。整洁很重要,但秩序让我的头不受伤害。试图编辑一个列中的表并让它全部变成一堆,因为我添加了一个单词变得非常快,所以列被抛出,我只是排序。我敢肯定,当我告诉他们这样做的时候,我的同事一开始很烦恼,但是他们很快就看到了这个好处,它让我闭嘴。 : - )

使用Ruby v2.0添加%i,第二个示例可以更改为:

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

这不是一个很大的改变,但它有点清洁。

答案 3 :(得分:-2)

在我看来,所有这些都是表列名。

如果是,那么你不需要attr_accessor,rails会自动提供对它们的访问权。

您可以拨打object.name, object.html_url,依此类推。

你能确认是否是这种情况