Подтвердить что ты не робот

Встроенные комментарии в Ruby

Можно ли Ruby понять комментарии в строке, например:

my_array = ['first', /* 'second', */ 'third', 'fourth']

?

Update:

Я спросил не о том, что является /* */в Ruby и почему я получаю сообщение об ошибке, но о наличии встроенных комментариев в любой доступной форме вообще. /* */были даны только как пример встроенных комментариев, которые мне известны.

4b9b3361

Ответ 1

Нет, Ruby не имеет встроенных комментариев.

Комментарии этого стиля имеют тенденцию уменьшать читаемость, поскольку они затрудняют выполнение кода.

В вашем случае было бы лучше разделить элементы массива на отдельные строки и прокомментировать одну строку.

my_array = ['first',
#           'second',
            'third',
            'fourth']

Ответ 2

Я хотел бы добавить, что встроенный конструктор документации rdoc - Ruby - может использовать комментарии в вашем коде для создания исходного набора документации. Из того, что я понял в своем недавнем чтении, "Ruby way" предполагает, что ваш код должен быть читабельным и понятным, но эти комментарии являются ценным и простым способом создания документации на ранней стадии разработки, прежде чем отправлять проект на надлежащая группа документации.

В отношении встроенных комментариев мой пример использования заключается в том, что я обнаружил, что работаю над длинными однострочными в irb, прежде чем передавать их в правильно отформатированные исходные файлы. Возможно, многие люди не против работать с перерывами в своей среде разработки, но с моими ограниченными знаниями о наборе инструментов на данный момент мне очень сложно повторять предыдущие команды. Я почти уверен, что это связано с тем, что я не смог найти инструменты под рукой, будь то irb, pry и what-have-you. На данный момент я обматываю любой код, который я хочу прокомментировать внутри строкового объекта, который я должен удалить позже или "раскомментировать", удалив оболочку строк.

Возьмите его или оставьте, но это мои два цента! Продолжайте рубинг!

Приложение:

Платит читать документ pry! Метод pry привязан к каждому объекту, включая main. Вызов его выполняет под-оболочку в текущем приглашении, что позволяет анализировать любой объект в текущей области. Он доступен в любом контексте, включая приглашение main pry. В сочетании с командами amend-line, edit, hist, play в Pry это подтверждает мое желание встроенных комментариев, хотя я до сих пор не знаю о какой-либо функции в pry, которая будет загружать предыдущую команду в текущий ввод ввода для редактирования.

Вызов текстового редактора имеет тенденцию отвлекать меня от справедливого бита не только потому, что он удаляет содержимое буфера оболочки из видимости на одном дисплее (например, ноутбук), но тем более, что он удаляет все полезные вкладки pry завершений и команд. Я хотел бы видеть pry или другой REPL, который позволяет использовать курсор на нескольких строках, так как я все еще нахожу необходимость использовать однострочные.

Ответ 3

Прочитайте все это прежде, чем вы проголосуете :)

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

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

Я наткнулся на этот вопрос, потому что я обрабатываю уродливые API наших клиентов. Запрос JSON, обработанный для кода Ruby, выглядит примерно так

api_response = {
  headers: ["uniq_id", "email", "description"]
  rows: [
    [2345, '[email protected]', 'first item'],
    [9876, '[email protected]', 'second item']
  ]
} 

Итак, в моем скрипте я хочу собрать все уникальные идентификаторы:

JSON.parse(api_response)
  .fetch('rows')
  .collect { |application_row| application_row.at(0) }

было бы неплохо иметь возможность прокомментировать, что вызывает at(0). Подобно тому, как sawa предлагает в своем комментарии, если бы существовал %c{}, я мог бы сделать что-то вроде этого:

JSON.parse(api_response)
  .fetch('rows')
  .collect { |application_row|  %c{uniq_id}; application_row.at(0) }

... но потом я понял, что просто глуп Код Я должен сам объяснить мое намерение

uniq_ids = JSON.parse(api_response)
             .fetch('rows')
             .collect { |application_row| application_row.at(0) }

В некоторых случаях это не вариант, поэтому, возможно, это поможет:

JSON.parse(api_response)
  .fetch('rows')
  .collect { |application_row| uniq_id = application_row.at(0) }

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

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

Решение для этого может быть

my_array =  ['first']
# my_array += ['second']
my_array += ['third', 'fourth']

Это уродливо? Да, общая мысль заключается в том, что вы должны заново учесть это перед фиксацией, заставляя вас удалять некрасивый код и удалять ненужные вещи, прежде чем начинать работу.


обновление 2019 05

Я вижу, что этот ответ сейчас -1, он был опубликован в 2014 году. Это 2019 год, и я по-прежнему придерживаюсь того же мнения :) Если вы пишете комментарий, вам не удалось написать код, который четко отображает намерение :)

Есть определенно случаи, когда комментарии необходимы. Но правильной реакцией разработчика должно быть: "Боже мой, есть комментарий! Мне нужно обратить внимание!"

В настоящее время я 12 лет профессионального опыта в этой области. И видел это снова и снова в проектах: если во всем есть код, разработчики перестанут видеть комментарии как ценную информацию и просто не будут читать их.

Но в принципе не существует единственного варианта использования "позвольте разместить комментарий здесь", который не может быть решен с помощью хорошего проекта кода/архитектуры :)

Просто процитирую Мартина Фаулера:

Любой дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, который могут понять люди.