Ruby - когда я должен использовать круглые скобки или нет при вызове функции / метода - PullRequest
0 голосов
/ 20 октября 2019

Существует ли четкий стандарт или руководство, чтобы использовать или не использовать круглые скобки при вызове функции / метода?

Например, следующий код:

class List < Jets::Stack
  sqs_queue(:dead_letter)
end

Должен ли я или не должен 'я использую скобки? Другой пример:

class ExampleJob < ApplicationJob
  def sqs_event ref(:dead_letter)
  end
end

против

class ExampleJob < ApplicationJob
  def sqs_event ref :dead_letter
  end
end

Есть ли официальное руководство, которому я могу следовать?

Ответы [ 4 ]

2 голосов
/ 20 октября 2019

В Ruby это обычно необязательно.

Ruby стремится к минимализму, поэтому их часто избегают.

Иногда они требуются, например, в rspec Ожидается, где

expect a.to be true

должно быть

expect(a).to be true

Если при вызове метода, имеющего параметр, не использовать ни символов, ни пустых символов, получается ArgumentError, если для параметра не задано значение по умолчанию, то есть

def a(x=1)

Другое соображение - когда вы хотите вызвать метод для результата чего-либо, когда вам нужно, чтобы этот метод был явно в конечном результате, то есть

"br" + "own".upcase 

brOWN

Однако

("br" + "own").upcase

BROWN

Наконец, когда я говорю о ясности, иногда может быть лучше иметь их, даже если в этом нет особой необходимости. Обычно это в составных выражениях, а не в зависимости от приоритета оператора и т. Д. Или если вы хотите, чтобы выражение, которое специально не выполнялось стандартным приоритетом оператора, и вы хотите, чтобы ваша собственная группировка и порядок операций, например:

irb(main):007:0> 5 + 6 * 2
=> 17
irb(main):008:0> (5 + 6) * 2
=> 22

Как указал Ник, единственным осложнением является super, где super или super() проходят по пармсу, но super(a,b) вызывает super с ... a, b в качестве параметров

1 голос
/ 20 октября 2019

Не существует официального стандарта для лучших практик Ruby-кода. Однако в сообществе Ruby появился ряд предпочтительных стилей. Рекомендуется следовать этим предпочтительным стилям только потому, что это делает ваш код более читабельным для других программистов на Ruby.

Ник Роз дал вам ссылку на руководство по стилю. Я также рекомендую вам рассмотреть возможность установки и использования rubocop . Он даст вам обратную связь о том, когда и когда не заключать в скобки аргументы, многие другие вопросы форматирования, такие как правильное отступление и какой из нескольких различных вариантов синтаксиса выбрать в конкретной ситуации.

Чтобы ответить на ваш конкретный вопросо том, использовать или нет скобки для аргументов метода, ответ да, в общем. Исключениями являются, как говорится в руководстве, «методы, имеющие статус« ключевое слово »в Ruby». Примером является puts (на самом деле Kernel.puts метод). Большинство людей здесь не используют круглые скобки, но в руководстве говорится, что они являются необязательными.

Другой пример, как сказал Ник (хотя «методы с ключевыми словами-аргументами» не совсем верны; в этом случае аргументы - это символы, которые представляют методы, а не ключевые слова), это attr_accessor, что на самом делеModule.attr_accessor.

Так что, как правило, если оно выглядит как «команда» («ключевое слово», если хотите), но на самом деле является методом, опустите скобки. В противном случае используйте их. И если вы не уверены в разнице, приобретите привычку использовать рубокоп.

1 голос
/ 20 октября 2019

Да, есть

Полагаю, вы ищете руководящие принципы сообщества, поскольку нет руководств по стилю от основной команды Ruby.

Что ж, всякий раз, когда вы вызываете методВы должны использовать круглые скобки, в противном случае становится неясным

# bad
x = Math.sin y
# good
x = Math.sin(y)

# bad
array.delete e
# good
array.delete(e)

# bad
temperance = Person.new 'Temperance', 30
# good
temperance = Person.new('Temperance', 30)

Однако рекомендуется пропустить их, когда нет аргументов.

Будьте осторожны с super и super() они разные!

Единственным исключением, на мой взгляд, является какой-то пользовательский DSL, для самого DSL должны быть некоторые правила или предпочтения, например

validates :name, presence: true

Это также верно для методов с аргументами ключевого слова:

attr_reader :name, :age
0 голосов
/ 21 октября 2019

Согласно Matz :

Если аргументы передаются методу, они обычно заключаются в круглые скобки,

object.method(arg1, arg2)

, но они могут бытьопускается, если это не вызывает двусмысленности.

object.method arg1, arg2
...