Рубиновый эквивалент C ++ Const? - PullRequest
1 голос
/ 20 апреля 2009

В свободное время я изучаю Ruby, и у меня есть вопрос о языковых конструкциях для констант. Есть ли в Ruby эквивалент ключевого слова const в C ++, чтобы не изменять переменные? Вот пример кода:

first_line   = f.gets().chomp()
column_count = first_line.split( %r{\s+} ).size()
print column_count, "\n"

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

Ответ на комментарий:

'Наиболее вероятная причина "случайного" перезаписи переменных, я думаю, длинные блоки кода.' Я согласен с духом вашей точки зрения, но не согласен с письмом. Ваша идея о том, чтобы избегать длинных блоков кода и ненужного состояния, является хорошей, но для констант также может быть полезна при описании дизайна кода внутри реализации. Большая часть значения const в моем коде связана с указанием, какие переменные я ДОЛЖЕН изменить, а какие - нет, чтобы у меня не было соблазна изменить их, если я вернусь к своему коду в следующем году. Это то же самое чувство, которое предполагает, что код, который использует короткие комментарии из-за хороших имен переменных и четких отступов, лучше, чем неловко написанный код, объясняемый подробными комментариями.

Другим вариантом является метод #freeze в Ruby, который мне тоже нравится. Спасибо всем за ответы.

Ответы [ 3 ]

4 голосов
/ 20 апреля 2009

Ruby переменные в общем, переменные.

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

Наиболее вероятная причина «случайного» перезаписи переменных, я думаю, длинные блоки кода. В конце концов, если вы измените значение переменной в пятистрочном методе, это будет довольно очевидно! Если вы обычно пишете блоки кода длиннее, скажем, 10 строк, то эти фрагменты, вероятно, делают слишком много вещей, и я настоятельно рекомендую вам приложить усилия, чтобы разбить их (увеличить сплоченность ). Локализуйте переменные настолько, насколько это возможно, чтобы минимизировать вероятность непредвиденных побочных эффектов (уменьшите сцепление ).

4 голосов
/ 20 апреля 2009

По соглашению, константы в ruby ​​обычно пишутся заглавными буквами, такими как COLUMN_COUNT. Но, как было указано, все переменные, начинающиеся с заглавной буквы, являются константами.

3 голосов
/ 20 апреля 2009

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

first_line   = f.gets().chomp()
Column_count = first_line.split( %r{\s+} ).size()
print Column_count, "\n"

Теперь вы получите предупреждение, если попытаетесь изменить Column_count.

...