beerdy
@beerdy
https://vk.com/beerdy

Зачем в ruby — public, protected и private методы?

Я нашел ответ на мой вопрос тут:
ответ
Но есть вопрос к одному из ответов. А конкретно чего я не могу понять:
Ответ Виктор Ablebeam :
Protected - это те методы, которые доступны потомкам (классам, что наследуют), но не доступны внешним классам. Грубо говоря, удобно, когда вы знаете, что от класса А будут наследовать много-много разных классов, и у этих классов будет один (или много, не важно) общий метод. Который, однако, совершенно не нужен внешним классам. Если бы не было протектеда, было бы 2 пути - сделать метод, который должен быть у всех потомков - публичным. Это плохо, потому что это лишняя информация для внешних классов. Или же - дублировать одинаковые методы в каждом классе потомке. Это плохо, потому что не DRY.
Мой вопрос:
Если он будет унаследован, то кто узнает что он вообще существует? Т.к. человек который нашел данный класс наверняка его искал по конечному методу который ему необходим. Да даже если тот, кому понадобился какой-то public метод этого класса, узнает о существование protected метода найденного класса, навернека не будет его использовать. Отсюдого вывод - почему бы просто не использовать тот public метод который не документирован возможностями класса или же просто в документации указан как вспомогательный и его, соответственно не трогать, тем самым мы экономим строчку кода в виде объявления типа метода и устраняем путанницу в интернете, связанную с этими частыми вопросами об определение типа методов. Не так ли?
  • Вопрос задан
  • 2150 просмотров
Решения вопроса 1
DevMan
@DevMan
мы экономим строчку кода в виде объявления типа метода
победа побед, поздравляю.

и устраняем путанницу в интернете, связанную с этими частыми вопросами об определение типа методов
путаницу устраняет документация. а если ее нету то публичный метод или приватный/защищенный никакого рояля не играет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Если он будет унаследован, то кто узнает что он вообще существует?
Тот, кто использует приличную IDE.

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

Ну а всё, что написано дальше мне совершенно непонятно - какие-то недокументированные возможности, строчки кода...
Ответ написан
beerdy
@beerdy Автор вопроса
https://vk.com/beerdy
Вот опять читаю ветку которую указал выше и нашел ответ того же автора Виктор Ablebeam звучит след. образом:
Я бы сказал, что в руби по определению не может быть нормальной области видимости, т.к. все определяется в рантайме. В итоге, все эти нотации имеют больше документальный характер. И, по крайней мере когда-то, использовать в контроллерах и хелперах protected - считалось как минимум хорошим тоном
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы