Предпочитаемый Ruby-ist способ объявления контроля доступа - PullRequest
2 голосов
/ 20 сентября 2010

Это простой вопрос стиля.Каков предпочтительный способ объявления контроля доступа в коде Ruby?

Пример A:


#!/usr/bin/env ruby

class MyClass
    def method1    # this is public by default
        #...
    end
    protected      # subsequent methods will be protected
        def method2
            #...
        end
    private        # subsequent methods will be private
        def method3
            #...
        end
    public         # subsequent methods will be public
        def method4
            #...
        end
end

или Пример B:


#!/usr/bin/env ruby

class MyClass
    def method1
        #...
    end
    def method2
        #...
    end
    def method3
        #...
    end
    def method4
        #...
    end
    public :method1, :method4
    protected :method2
    private :method3
end

Синтаксически, мне нравится Пример BA вводит неоднозначность между public методами, объявленными после protected / private методов, хотя я не вижу причин, почему вы не должны просто вызывать method1 после указания его как public.

Это не о том, что мне нравится.Какая отраслевая норма для этого?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

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

И вы очень редко видите использование «public»как и в первом методе, так как он используется по умолчанию, и люди просто определяют все свои открытые методы перед любыми объявлениями защищенных / частных лиц.

1 голос
/ 20 сентября 2010

Я думаю, это действительно зависит от вашего стиля кодирования.Если вы прочитали « Чистый код » Дяди Боба, вы (которого я лично любил), вам будет предложено написать методы или функции, которые вызываются друг другом близко друг к другу.В этом случае использование видимости метода, как в примере B, будет иметь смысл:

class Foo
  def method1
    method2
  end

  def method2
    ..
  end
  private :method2
end

Дядя Боб на самом деле хорошо объясняет близость методов, поскольку это предотвращает прокрутку в вашем коде.

...