Какое имя должно иметь метод, который возвращает количество вложенных объектов? - PullRequest
2 голосов
/ 25 февраля 2010

Предположим, у нас есть классы Gallery и Image. В одной галерее может быть много изображений.

Галерея должна иметь метод, который возвращает количество вложенных изображений. Мои предложения:

int getImagesCount ();

int countImages ();

int imagesCount ();

Я видел примеры каждого из этих 3 предложений в разных API (конечно, с другим существительным или даже без него, как метод size () в API коллекций).

Что бы вы предпочли и почему? (Одна из моих мыслей против countImages () заключается в том, что это имя может заставить пользователя думать, что этот метод выполняет некоторые сложные вычисления.)

Ответы [ 4 ]

2 голосов
/ 25 февраля 2010

Если вы думаете о том, чтобы иметь один метод, который возвращает размер, и другой, который возвращает n-й элемент, моя рекомендация в целом: Не делайте этого! Используйте всю мощь коллекций api! : создайте метод, который возвращает List<Image>. Таким образом, пользователь API может легче делать такие вещи, как перебирать изображения (используя расширенный цикл for вместо необходимости манипулировать индексами), сортировать их, объединять их в другие коллекции, ...

Это действительно легко реализовать:

  • Если изображения внутренне уже представлены в виде списка, вы можете просто вернуть его (опционально, обернутый в Collections.unmodifiableList).
  • И даже если вы не сохраните их в виде списка, выставить их как List<Image> так же просто, как написать небольшой подкласс AbstractList, просто переопределив size() и get(int), два метода, которыми вы были собирается реализовать в любом случае.
2 голосов
/ 25 февраля 2010

Я бы тоже исключил countImages () по той же причине.

Кроме этого, если в кодовой базе существует более или менее согласованное соглашение об именах, к которому принадлежит Gallery, я бы рекомендовал придерживаться его. В отсутствие четкого соглашения о проекте я лично склонялся бы к size().

2 голосов
/ 25 февраля 2010

Мое предложение:

public interface Gallery {

    int getNumberOfImages();

    //...
}

Я согласен, что countXX() создает впечатление, что вызов этого метода вызывает какие-то вычисления. Так что я бы здесь тоже не использовал.

0 голосов
/ 25 февраля 2010

Проблема с size() заключается в том, что не всегда понятно, возвращаете ли вы количество элементов (в данном случае изображений) или размер в байтах / килобайтах / мегабайтах коллекции. По той же причине я предпочитаю от getImageDimensions() до getImageSize(). В вашем случае мне нравится countImages(), потому что он понятен и лаконичен, но он не следует соглашениям об именах, если, например, существуют методы типа getImage(int). Поэтому мне придется идти с int getImagesCount() или лучше, int getNumberOfImages() или int getNumImages()

...