Вы оставляете скобки в Ruby или нет? [закрыто]


86

Когда возможно .. вы оставляете скобки в Ruby или нет?

Ответы:


95

Из элементов рубинового стиля

Ruby позволяет вам опустить скобки, в общем, сопротивляйтесь этому искушению.

Скобки облегчают восприятие кода. Общий стиль Ruby заключается в их использовании, за исключением следующих случаев:

  • Всегда оставляйте пустые скобки
  • Скобки можно не включать в одну команду, окруженную разделителями ERb - маркеры ERb гарантируют, что код по-прежнему читается.
  • Строка, представляющая собой одну команду и один простой аргумент, может быть написана без скобок. Лично я считаю, что делаю это все реже и реже, но все равно отлично читается. Мне не нравятся отдельные строки в обычном коде Ruby, у которых есть несколько аргументов и нет скобок.
  • Многие доменно-специфические языки на основе Ruby (например, Rake) не используют круглые скобки для сохранения более естественного языка в своих утверждениях.

27

Я использую скобки в качестве комментариев, чтобы помочь себе в будущем ... у которого, вероятно, будет меньше мозговых клеток, чем у меня сейчас :-)

Нет ничего хуже, чем посмотреть на какой-то код, который вы написали 2 года назад, и неправильно его понять, так что вы что-то сломаете, изменяя его.

Если parens спасет меня в будущем на несколько минут (или часов) в будущем, я добавлю столько, сколько нужно, чтобы утверждение было кристально ясным.


2
+1 «Я использую скобки в качестве комментариев, чтобы помочь себе в будущем ... у которого, вероятно, будет меньше мозговых клеток, чем у меня сейчас :-)» Это ТАК правда, и именно поэтому я это делаю. Также следует проявить милосердие ко всем, кто следит за мной и использует мой код. Короче говоря, это дело обслуживания.
Железный Человек

9

Я не использую их, когда делаю DSL-подобные вещи, например t.column или has_many в рельсах. В остальное время это обычно сводится к ясности, и, вероятно, это равное разделение.


8

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


8

Если вы имеете в виду вызовы функций, я всегда ставлю скобки, потому что их всегда легче читать. Если вы имеете в виду в условиях (если, пока), я ставлю скобки только тогда, когда они необходимы.


2
Согласен. Например, в php я могу быстро определить переменную по префиксу $ .. в javascript я могу изменить функцию по скобке (). В Ruby не всегда легко увидеть разницу между var или func (без скобок).

7

Я стараюсь их не учитывать, если это вообще возможно. Я думаю, это упрощает чтение кода (вообще говоря).


4

В зависимости от того, что обычно более читабельно.

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


2

Я стараюсь не учитывать их при выполнении таких утверждений, как assert_equal. Может быть, чтобы сделать это предметно-ориентированным языком.


1

Если вы занимаетесь программированием в течение длительного времени, у вас, вероятно, возникнет «зуд» добавить скобки, и во многих случаях для этого есть веские причины.

Хотя, на мой взгляд, код проще для глаз, и я еще не столкнулся с проблемой - если вам понадобятся круглые скобки, вы узнаете это заранее, прежде чем столкнетесь со сценарием отладки.


4
«Мой учитель говорит мне, что это неизбежно». Это сложно отладить. Я рекомендую использовать их, чтобы избежать неоднозначного назначения параметров.
Железный Человек

Проголосовано против как «проще для глаз», ИМО - отвратительная причина опустить круглые скобки вокруг аргументов функции.
Марчелло Романи

2
разговаривая с толпой людей, не являющихся родителями, на днях я столкнулся с этой проблемой. if owner.is_a? thing //worked fine if owner.is_a? thing && x > 1 //not fine Я изучаю Ruby всего пару недель, и там, где я работаю, используется наименьшее возможное количество символов, и если вы пришли с любого другого языка, есть обучение Кривая, чтобы знать, когда вы передаете неявный хеш, массив символов, переходя к символам функции ... я не фанат.
Mega Man

@MegaManif owner.is_a? thing and x > 1
anna328p

1
@DmitryKudriavtsev andне имеет такого же приоритета оператора, который &&имеет
Mega Man
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.