Как отметить логические разделы кода в комментариях Java?

Классы Java обычно делятся на логические "блоки". Существует ли конвенция для обозначения этих разделов? В идеале это будет поддерживаться основными IDE.

Я лично использую этот метод:

//// Section name here ////

Однако некоторые редакторы, похоже, имеют проблемы с этим.

В качестве примера в коде Objective-C вы можете использовать этот метод:

#pragma mark -
#pragma mark Section name here

Это приведет к появлению меню в XCode, которое выглядит так:

alt text

Ответ 1

Я лично использую разделители строк 80-х символов, например:

public class Client {

    //================================================================================
    // Properties
    //================================================================================

    private String name;
    private boolean checked;

    //================================================================================
    // Constructors
    //================================================================================

    public Client() {
    }

    public Client(String name, boolean checked) {
        this.name = name;
        this.checked = checked;
    }

    //================================================================================
    // Accessors
    //================================================================================

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

}

Конечно, это может показаться немного излишним для такого небольшого POJO, но поверьте мне, это оказалось очень полезным в некоторых огромных проектах, где мне приходилось просматривать большие исходные файлы и быстро находить интересующие меня методы. также помогает понять структуру исходного кода.

В Eclipse я создал набор настраиваемых шаблонов (Java → Редактор → Шаблоны в диалоговом окне настроек Eclipse), которые генерируют эти бары, например.  - sepa (SEParator для аксессуаров)  - sepp (SEParator для свойств)  - sepc (SEParator for Constructors)  - и т.д.

Я также модифицировал стандартный шаблон "новый класс" (Java → Стиль кода → Шаблоны кода на экране настроек Eclipse)

Кроме того, есть старый плагин Eclipse, называемый Coffee-bytes, который улучшил способ сглаживания частей кода Eclipse. Я не знаю, работает ли он все еще, но я смогла определить произвольные складные зоны, добавив специальные комментарии, например // [SECTION] или что-то еще. Он может по-прежнему работать в последних версиях Eclipse, поэтому посмотрите.

Ответ 2

Для студии intellij/android есть удивительное решение.
Начните с:
//region Description
и закончите с:
//endregion

Ярлык для этого находится в меню, которое вы можете открыть с помощью Command + Alt + T (Mac) или Ctrl + Alt + T (Windows)

Вы также можете добавить свою собственную линию для дополнительного визуального разделения, если вам это нужно. Область может быть сокращена и расширена по желанию с помощью кнопок +/- как любая функция. Вы также можете перемещаться между областями с помощью Command + Alt + Period (Ctrl + Alt + Period)

Источник.

Пример:

//region Parceler Implementation
//---------------------------------------------------------------------------------------
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeParcelable(this.die, 0);
    dest.writeParcelable(this.dieSprite, 0);
}

private DieVm(Parcel in) {
    this.die = in.readParcelable(Die.class.getClassLoader());
    this.dieSprite = in.readParcelable(Sprite.class.getClassLoader());
}

public static final Parcelable.Creator<DieVm> CREATOR = new Parcelable.Creator<DieVm>() {
    public DieVm createFromParcel(Parcel source) {
        return new DieVm(source);
    }

    public DieVm[] newArray(int size) {
        return new DieVm[size];
    }
};
//---------------------------------------------------------------------------------------
//endregion

Ответ 3

Eclipse определяет аннотацию @javadoc (прокрутите до раздела с надписью "Поддержка категорий" ), которая позволяет фильтровать по категориям в виде схемы. Не совсем то, что вы хотите. Я удивлен, что никто не написал плагин Eclipse, который предлагает представление, подобное экрану экрана.

Ответ 4

Мне тоже понравилось, когда я использовал xcode. Для eclipse я использую ctrl + o (быстрый контур) для навигации по классу Java.

Ответ 5

Использование ненужных комментариев/маркеров в коде, чтобы помочь работать, может быть не очень хорошей практикой. У меня мало идеи о разработке xcode и java, но вся основная поддержка IDE, обнаруживающая членов с любыми специальными маркерами, такими как eclipse, показывает методы и члены, использующие общий вид, который может быть запущен с помощью ctrl+O, Intellij (который я предпочитаю использовать больше на mac и также имел редакцию сообщества) имеет ту же концепцию контура и может быть быстро доступен с помощью (ctrl + f12). Поэтому моя точка зрения заключается в том, что в коде не используется лишняя отметка, так как все (или atleast good/sane) IDE могут делать это автоматически.

Ответ 6

Насколько я знаю, нет такой вещи, как поддерживаемая спецификация для группировки членов класса вместе. Вы можете использовать любое соглашение о комментариях, которое вам нравится, но, скорее всего, он не будет поддерживаться никаким инструментом.

Лучше группировать связанные члены в отдельный класс через наследование или агрегацию. Это считается хорошим стилем ООП

Ответ 7

Современная среда IDE позволяет просматривать ваш код разными способами и даже реорганизовывать его. Eclipse даже позволяет вам просматривать определение кода, на котором курсор находится на другой панели.

Любая автоматическая реорганизация вашего кода приведет к поломке такой разметки.

Если вы хотите группировать, подумайте о том, чтобы положить вещи, принадлежащие одному классу, и вещи, не принадлежащие друг другу в разных классах.

Ответ 8

Если вы можете сгруппировать свои методы, сделайте еще один класс специально для этой концепции, которую вы хотите захватить в разделе. Идем дальше, создавая файлы бесплатно.

Ответ 9

В дополнение к предоставленному Андрею, чтобы использовать //region//endregion, мы вставляем [BigAscii letters] [1] в основные разделы кода. При быстрой прокрутке это действительно выделяется. Один из недостатков этого подхода заключается в том, что я не могу его искать, поэтому вам нужно добавить поисковый запрос чуть ниже "баннера", как показано ниже.

Blockquote

//    _      _____          _____                  _   _
//   | |    |  __ \   /\   |  __ \      /\        | | | |
//   | |    | |  | | /  \  | |__) |    /  \  _   _| |_| |__
//   | |    | |  | |/ /\ \ |  ___/    / /\ \| | | | __| '_ \
//   | |____| |__| / ____ \| |       / ____ \ |_| | |_| | | |
//   |______|_____/_/    \_\_|      /_/    \_\__,_|\__|_| |_|
//
//   Search here with: LDAP Auth

[1]: http://patorjk.com/software/taag/#p=display&c=c%2B%2B&f=Big&t=LDAP Auth

Ответ 10

Для IntelliJ мне нравится:

        public void ________________INIT__________________() {};

выглядит довольно в структуре файлов!