2016-06-21 1 views
3

семантический вопрос здесь. Мне нравится использовать тернарные выражения; например (и это глупый пример, только чтобы показать мой вопрос):Должен ли я использовать тернарное выражение, если оно подталкивает линию более 80 символов?

some_int >= 5 ? @description = "This is a pretty long value" : @description = "This value is a little shorter" 

... но линия часто получает довольно долго. Должен ли я использовать это вместо этого:

if some_int >= 5 
     @description = "This is a pretty long value" 
    else 
     @description = "This value is a little shorter" 
    end 

Просто чтобы сохранить отдельные линии короче? Чем короче обязательно == читабельнее? Благодаря!

+0

Почему вы хотите сохранить строки под 80 символами? – spickermann

+0

@spickermann Поскольку 80 символов являются безопасным допущением для минимальной ширины окна редактора, идите дольше, чем это, и он будет обертывать линию или исчезать с правого края, что затрудняет чтение. Лично я предполагаю 100 теперь, когда у нас есть широкоформатные экраны, но вам нужен минимум. – Schwern

ответ

6
some_int >= 5 ? @description = "This is a pretty long value" : @description = "This value is a little shorter" 

Это неправильное использование тернар. Единственное использование тройника - это когда вы собираетесь использовать возвращаемое значение. Она должна быть написана таким образом (форматирование вопросов в сторону):

@description = some_int >= 5 ? "This is a pretty long value" : "This value is a little shorter" 

Должен ли я не использовать трехкомпонентную выражение, если оно толкает линию по 80 символов?

Длина строки - неправильная метрика. Это похоже на запрос, если подпрограммы должны быть не более 25 строк (или что-то еще). Это не совсем в корне проблемы и может привести к некоторым неудобным выборам. Реальный вопрос - сложность.

Из-за сложности POV ваш троянец в порядке. Это простое условие, простые утверждения, и он использует возвращаемое значение. Проблема заключается в том, что инструкции слишком длинные, и они будут завернуты. Вы можете переформатировать их, как @U-D13 suggests.

@description = some_int >= 5 
    ? "This is a pretty long value" 
    : "This value is a little shorter" 

Вы также можете поместить строки в свои собственные переменные, добавляя дополнительные пояснения к коду.

@long_description = "This is a pretty long value" 
@short_description = "This value is a little shorter (except it's not)" 

@description = some_int >= 5 ? @long_description : @short_description 

Оба инструмента действительны, и их можно комбинировать. Это ситуационная ситуация.

И, смотрите, теперь текст является настраиваемой переменной объекта.

2

Разбейте выражение на несколько строк:

@description = some_int >= 5 
    ? "This is a pretty long value" 
    : "This value is a little shorter" 

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

2

Интересная вещь о Рубине вы можете использовать if где тройная бы слишком запутанным или неудобно:

@description = 
    if some_int >= 5 
    "This is a pretty long value" 
    else 
    "This value is a little shorter" 
    end 

Это значительно легче читать с первого взгляда, чем тройной эквивалент.

И if и case работают таким образом, возвращая значение, которое было вызвано.

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

method_call(value > 5 ? :high : :low) 

За что становится довольно трудно следовать, что может привести к неожиданным ошибкам.

Смежные вопросы