нормально ли использовать начало / конец в Ruby так же, как я бы использовал #region в C #? - PullRequest
5 голосов
/ 08 июля 2010

Я недавно перешел с C # на Ruby, и мне не хватает возможности создавать разборные, помеченные области кода. Мне просто пришло в голову, что должно быть нормально делать такие вещи:

class Example
  begin # a group of methods

    def method1
      ..
    end

    def method2
      ..
    end

  end

  def method3
    ..
  end
end

... но разве это нормально? Являются ли method1 и method2 тем же, что и method3? Или есть какая-то идиома Ruby для этого, которую я еще не видел?

Ответы [ 5 ]

6 голосов
/ 08 июля 2010

Как уже говорили другие, это не меняет определения метода.

Однако, если вы хотите маркировать группы методов, почему бы не использовать семантику Ruby для их маркировки? Вы можете использовать модули для разделения вашего кода на куски, которые принадлежат друг другу. Это хорошая практика для больших классов, даже если вы не используете модули повторно. Когда код расширится, будет легко разделить модули на отдельные файлы для лучшей организации.

class Example
  module ExampleGroup
    def method1
      # ..
    end

    def method2
      # ..
    end
  end
  include ExampleGroup

  def method3
    # ..
  end
end
6 голосов
/ 08 июля 2010

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

# region start AAA

some(:code, :here)

# region end AAA

И если вы разрешитеЯ должен быть саркастичным: вы должны знать, что Ruby намного более выразителен, элегантен и красив, чем C #, и есть вероятность, что нет никакого кода Ruby, который должен быть спрятан в первую очередь!;)

2 голосов
/ 16 апреля 2015

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

Здесь они говорят о навигации по регионам https://www.jetbrains.com/ruby/help/navigating-to-custom-region.html

#region Description 
Your code goes here... 
#endregion

Так что с вышеприведенным в вашем коде вы увидитениже:

Редактор кода Rubymine - с использованием примера метода с использованием областей развернутый Rubymine code editor - With a sample method using regions **un-folded**.

Редактор кода Rubymine - С использованием примера метода с использованием областей в сложенном виде Rubymine code editor - With a sample method using **regions** folded.

2 голосов
/ 08 июля 2010

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

class Example
  def method1
    ..
  end

  def method2
    ..
  end
end

# optionally put some other code here

class Example
  def method3
    ..
  end
end

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

1 голос
/ 08 июля 2010

Да, это нормально (это не меняет семантику вашего кода).

Однако это не обычный шаблон, и он может сбить с толку читателей вашего кода, которые не поймут, для чего предназначен блок begin ... end.

...