Что такое «Рубиновый способ» для выравнивания назначений переменных? (вопрос стиля кода) - PullRequest
1 голос
/ 26 сентября 2011

Скажите, у меня есть этот незапятнанный код:

some_var = Hash.new
some_var[:name] = "blah"
some_var[:address] = "101 blahblah lane"

another = "Olly olly oxen free!"

Как выглядит рубиновый способ сделать его красивым?

вариант 1: Оставьте это как есть

вариант 2: Выравнивание связанных вещей

some_var           = Hash.new
some_var[:name]    = "blah"
some_var[:address] = "101 blahblah lane"

another = "Olly olly oxen free!"

вариант 3: Выравнивание всех вещей

some_var           = Hash.new
some_var[:name]    = "blah"
some_var[:address] = "101 blahblah lane"

another            = "Olly olly oxen free!"

вариант 4: ?????

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 26 сентября 2011

Используя Хеши, как в вашем примере, я бы сделал другую версию:

some_var = {
  :name    => "blah",
  :address => "101 blahblah lane",
}
another = "Olly olly oxen free!"

или с Ruby 1.9

some_var = {
  name:    "blah",
  address: "101 blahblah lane",
}
another = "Olly olly oxen free!"
3 голосов
/ 26 сентября 2011

Мне действительно не нравятся # 2 или # 3. Когда вы выравниваете такие вещи, вы группируете вещи вместе. Даже если они "симметричны", это совсем не то, что вы хотите при назначении переменных. как

a      = 1
foobar = 2
baz    = 3

визуально вы группируете a, foobar и baz и группируете 1, 2 и 3. Даже если 1, 2 и 3 связаны, они все равно должны быть сгруппированы с их метками, показывая, что они могут быть связаны. достигается эффективным пробелом вокруг заданий.

Итак, структуры данных являются примером того, что вы действительно хотите сгруппировать

some_method([[1, "foo"],
  [2, "bar"],
  [3, "baz"]])

(imo) читать труднее, чем

some_method([[1, "foo"],
             [2, "bar"],
             [3, "baz"]])

Это что-то вроде ситуации, но у меня есть №4 для вас.

some_var = Hash.new.tap do |h|
  h[:name] = "blah"
  h[:address] = "101 blahblah lane"
end

another = "Olly olly oxen free!"

Object # tap даст результат, который вы нажмете в блоке, и оцените блок как объект, который вы нажали. Таким образом, в этом примере Hash.new возвращается, модифицируется блоком, а затем возвращается для присвоения some_var. Некоторые люди, с которыми я работаю, абсолютно ненавидят это, но я нахожу это фантастическим, говоря: «Все здесь напрямую связано с инициализацией этого выражения»

1 голос
/ 26 сентября 2011

IMHO 1 будет наиболее распространенным, но я определенно видел 2. Плюс последний также упоминается по крайней мере в одном руководстве по стилю:

Когда несколько симметричных назначений находятся в строках один за другим, выровнять их операторы присваивания. С другой стороны, не выравнивайте операторы присваивания несвязанных присваиваний, которые похожи просто по стечению обстоятельств.

Обоснование: выравнивание помогает читателю распознать, что задания связанные или симметричные.

http://en.opensuse.org/openSUSE:Ruby_coding_conventions#Assignment

...