Улучшить читаемость большого attr_accessor
Что я должен делать при определении констант или 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 ответа
Изменить линии на определенной ширине:
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
...
]
Вы можете использовать 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
Это лучше всего подходит для установки констант в вашей программе. Вы можете получить к ним доступ из любого файла.
На протяжении многих лет, благодаря отрыву от разных языков, я стал использовать этот вид макета:
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 }
Это не большое изменение, но немного чище.
Мне кажется, все это имена столбцов таблицы.
Если да, вам не нужен attr_accessor для них, rails автоматически предоставляет к ним доступ.
Ты можешь позвонить object.name, object.html_url
и так далее.
Можете ли вы подтвердить, если это так