DEA7H
@DEA7H
.NET/C#/ASP.NET MVC Developer

Правила объявления интерфейсов. «I» или «!I»?

Всем привет.

Кто может адекватно объяснить почему стоить объявлять интерфейсы с буквой "I":
interface IDisposable
{
}


Или почему НЕ стоит этого делать:
interface Disposable {
}


Я .NET Developer и случайно в команде Java-еров смотря на их код сказал: "ОМГ, как можно объявить интерфейс без буквы `I`?". После этого пользуясь численным приемуществом они меня благополучно смешали с дерьмом... =*(

Так вот, как же все-таки правильнее? И желательно основываться не на своих предпочтениях а как-нить обосновать.

Заранее благодарен.
  • Вопрос задан
  • 2922 просмотра
Решения вопроса 1
pi314
@pi314
Президент Солнечной системы и окрестностей
Никакой "официальной" жесткой конвенции на этот счет нет. Как уже указал RGV, какую конвенцию использовать - личное дело команды / фирмы / техдира.
Я сам в свое время пришел к Java из Pascal и .NET, и тоже придерживаюсь нотации с I, т.к. это позволяет в коде визуально отличить интерфейс от класса. Просто для примера:
...
  IProducer simpleProducer = new Producer();
  IProducer sofisticatedProducer = new SpecialProducer();
...
  public void produceSomething(IProducer producer);

При взгляде на такой код сразу понятно, кто из ху, без всяких дополнительных кликов, наведения курсора и прочих пританцовываний с IDE.
И хотя это никак явно не помешает креативному балбесу влепить класс там, где нужно использовать интерфейс, это поможет проводящему ревью заметить грабли невооруженным глазом :) С моей точки зрения цена такого удобства в 1 (один !) доп. символ в имени вполне оправдана.
Ответ написан
Пригласить эксперта
Ответы на вопрос 8
clx
@clx
В C#:
1. Соглашение об именовании для C# от Майкрософта, которое все используют
2. Чтобы отличать от классов

Как делается в яве - знают явисты и думаю у них есть причины делать как они делают(в том числе, я не знаю правы ли конкретно ваши явисты или нет), однако нет никакой причины, чтобы явисты соблюдали соглашения об именовании от c# и наоборот.
Ответ написан
zencd
@zencd
Как-то все бессознательно... Стойкое неприятие джава-стайла имеется, а "почему" - ни одной мысли?! Джаверы смешали вас с дерьмом тоже, видать, тоже безо всякого обоснования. Давайте сами - вот вам самому зачем вам эта буква? Как она помогает?
Ответ написан
@Power
Из опыта: в java не используются элементы венгерской нотации, в том числе, имя интерфейса не имеет префикса "I". При реализации интерфейса классам иногда даётся суффикс "Impl" (но не всегда; скорее всего, только тогда, когда единственное назначение класса - это реализация интерфейса).
Как обосновать, я не знаю, скорее всего, так исторически сложилось. Есть некоторые общие coding conventions от Sun, но их используют скорее как рекомендации, а не как строгие правила. Ну и все нормальные IDE (по крайней мере, для java) способны показать тип любого идентификатора, так что указывать это в имени избыточно.
Ответ написан
Это просто стиль написания кода. Идеология, которой придерживается команда. Не более.
Ответ написан
В нашей команде префикс «I» не используют. Все правильно говорят: это соглашение имеет плюсы и минусы и в целом дело личного вкуса. Есть много очень хороших проектов, где I используют, и где I не используют. Главное, чтобы это не превращалось в религию. Если вас на работе смешивают с дерьмом, подумайте, нужна ли вам такая работа :-)
Ответ написан
HaJIuBauKa
@HaJIuBauKa
  1. Действительно для отличия интерфейса от класса. Так как классы зачастую называются подобным образом.
    List - IList
  2. При вводе удобно. "I" + Ctrl + space
  3. Читабельно. В том числе и просто контекстно соответствует в большинстве случаев. IHasGenerator - Я Имею Генератор
Ответ написан
kivsiak
@kivsiak
software engineer
Ну явист явисту рознь. Для меня например авторитет Java api. А там префиксы не используются.

Да и сам я считаю что отличать визуально интерфейсы от классов в java смысла нет и даже вредно. Иногда конечно обзываю *Impl но это от лени. Название должно четко описывать реализацию.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
WB—Tech Москва
от 140 000 до 160 000 ₽
от 3 500 до 4 000 $
Itiviti Санкт-Петербург
До 230 000 ₽
06 мар. 2021, в 02:23
120000 руб./за проект
06 мар. 2021, в 00:29
500 руб./за проект
05 мар. 2021, в 23:28
1200 руб./за проект