На Яві повинні приватні помічники переходити вище або нижче публічних методів? [зачинено]


24

Я помітив, що у колег і у мене є протилежні практики щодо впорядкування методів у наших класах Java. Один із нас розпочинає заняття з його основних публічних методів, а потім передає всіх приватних помічників. Інший із нас гарантує, що публічні методи знаходяться в самому кінці.

Зрозуміло, що це лише питання стилю, і правильної відповіді немає. Однак, перш ніж ми вирішимо, що ця справа є лише черговою боротьбою Yooks vs Zooks і просто вибрати один чи інший довільно, мені було цікаво, чи можливо, існує стандартна рекомендація керівництва в стилі Java чи якась практична причина, чому один підхід кращий за інший.


13
Це не має значення. Переверніть монету. Вибрати один. Дотримуйтесь його.

можливий дублікат розміщення Helper Methods
Kilian Foth

@KilianFoth - це запитання було задано на 3 місяці раніше і має більше відповідей. Хіба це не зробить це питання дублікатом цього питання?
Брендон Ярбро

Відповіді:


25

Хоча це нормально віддається перевагу, вам, безумовно, слід спробувати дотримуватися загального стандарту у вашій організації. Тож, що б ви не вирішили, виберіть стандарт і загально приймайте його.

Щодо того, що вибрати, якби ви дотримувались пропозицій, запропонованих у чистому кодексі , ви зможете прочитати файл зверху вниз, як газетна стаття, яка, природно, передбачає, що допоміжні методи з’являться після методів, якими вони є допомагаючи. Це призведе до максимальної читабельності структури коду. Тож якби ти мав

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

Ваш файл буде структурований як

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

Ще один побічний ефект цього полягає в тому, що ви виявляєте, що у ваших помічників є свої помічники, і це допомагає вам зрозуміти, що у вас є насправді - ще один клас, що живе у вашому файлі, і ви можете чисто рефактор витягнути його до власного класу, оскільки ці методи є вже згруповані в порядку. Але це вторинна вигода.


Рада, що ви сказали це, інакше я маю. Я запитав самого Боб Мартіна, як він замовляє речі, якщо в двох методах використовується 3-й метод. У цьому випадку він ставить третій нижче двох інших.
Даніель Каплан

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

@Sean, ну, як правило, я б намагався обмежити публічний API свого класу або залишити його як фасад, якщо це доречно, але потім перекинув помічників із реалізації вниз на співпрацівників. Тест, рефактор, витягнути, повторити. Але це, звичайно, залежить від того, як далеко ви хочете піти. Я віддаю перевагу своїм заняттям малим.
Ентоні Пеграм

11

Публічні методи - це інтерфейс класу. Хтось зацікавлений у використанні вашого класу буде дбати лише про інтерфейс. З точки зору користувача класу, корисно спочатку мати публічні методи для зменшення прокрутки.


5

У C і C ++, помічники часто ставляться на перше місце, оскільки тоді вам не потрібно декларації. Дуже багато людей перенесли цю звичку на інші мови, де це не має значення.

Я віддаю перевагу публічним методам зверху, тому що зазвичай, коли я відкриваю файл, шукаю його публічний інтерфейс. Мені не потрібно прокручувати всі деталі реалізації. Це також буває найпопулярнішим стилем, який я бачив, тож, що можна сказати для конвенції.


2

Мені подобається, щоб порядок методів у класі базувався на читабельності та контексті, а не на наочності.

тобто метод "відкритого", ймовірно, належить до "закриття". Якщо два публічні методи 'a' і 'b' називають приватні 'c', і вони єдині, хто називає це, то мені подобається, що 'c' буде поруч з ними.

Я не вважаю, що конвенція впорядкування методів, що базується на видимості, не є доброю справою.


1

Я, як правило, віддаю перевагу відвідувати свої класи, де учасники перераховані за важливістю / наочністю (тут я маю на увазі важливість, яка має прямий вплив на публічний інтерфейс).

Таким чином, приватні функції мають тенденцію до витіснення.

З цього є винятки, коли я також схильний групувати подібні функціональні функції разом, тому все ще можна знайти невеликі приватні функції, що переплутаються з загальнодоступними речами.

Це, як ви сказали, справа смаку.

Однак, працюючи над кодом, який не мій, я спробую дотримуватися будь-яких умов, які використовуються в проекті.

Я знайшов один із приємних способів відстежувати це - якщо припустити, що ви працюєте з Eclipse, створити конфігурацію форматування коду та експортувати його з джерелом проекту та зобов'язати його контролювати джерело. Таким чином, остання та найкраща угода про проект коду - це лише декілька клацань миші для налаштування та створення звички CTRL-SHIFT-F, тому що ви скористаєтесь, це запобіжить безлічі аргументів.

Додатковим бонусом від використання автоматичних форматорів є те, що ви можете робити речі за будь-якою умовою, яка робить вас щасливою, і просто відформатувати код перед фіксацією. YMMV залежно від конвенції та інструменту форматування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.