ПредишенСледващото

Как да напиша ефективни методи (превод на статията)

Тази статия - част от курса за напреднали Java (Advanced Java.) Нашата академия
Този курс е предназначен да ви помогне да се възползват от Java по-ефективни. Обсъждат по-разширени теми като създаване на обекти, паралелизация, сериализация, размисъл и повече. Това знание ще бъде ориентир за пътуването си до висините на Java умения.

курса Съдържание

1. Въведение
2. Методите за подпис
3. тяло метод
4. претоварване на метод
5. Замяна
6. интеграция
7. рекурсия
8. Референтен метод
9. Постоянството
10. Метод документиране
11. параметрите на метода и стойности за връщане
12. Метод входната точка в прилагането на
13. Каква е следващата стъпка
14. изтегляне изходния код

1. Въведение

В този раздел на урока, ние ще прекарат известно време в обсъждане на различните аспекти, свързани с проектирането и изпълнението на методи в Java. В предишната част на урока може да бъде сигурен, че методите за писане на Java - много проста, но има много неща, които могат да направят вашия метод по-разбираеми и ефективни.

2. подпис метод

Както вече знаете, Java - обектно-ориентиран език. По същество, всеки метод Java се отнася до всяка част от един клас (или към класа в случай на статистически метод). Той има право видимостта (или достъпност), може да бъде обявена за абстрактна или окончателно, и така нататък. Въпреки това, може би най-важната част от метода - това е неговият подпис: типа на връщане и аргументи, както и списък на проверените изключения изпълнението на всеки метод, който може да бъде изхвърлен (но тази част са били използвани рядко, а още по-рядко в наши дни). Да започнем с един малък пример.

Основният метод приема масив от низове, само като аргументи аргумент и връща нищо. Би било много хубаво - да върши такива прости методи като основен. Но в действителност, подписването на метод може да стане недостъпна. Нека да разгледаме следния пример:

Първото нещо, което прави впечатление, че символите, първоначално използвани в имената на методите на Java, като setTitleVisible.Imya добре подбрани и се опитват да се опише това, което методът има право на това.
На второ място, казват име на аргумент (или поне намек) за целите си. Това е много важно, за да намерят най-подходящия, разумни имена за метод аргументи, вместо вътр аз, String ите, булев е (в много редки случаи, обаче, че има смисъл).
На трето място, методът има само три аргумента. Въпреки че Java е с много по-висок лимит резолюция на броя на аргументите, е силно препоръчително да не надвишава броя на аргументи е по-голяма от 6-напреднали, която прави подписа трудно да се разбере.
Тъй като Java 5 е бил освободен, техники могат да имат различен списък от същия тип аргументи (наречени varargs - променливи аргументи) и да използват специален синтаксис, например:

Следващият пример показва използването на изключенията като част от подписването на метод. В миналото, изключенията не се показват, тъй като полезни, тъй като се приема, че е в резултат на кода на шаблон се използва за записване на повече от за решаване на проблемите.

3. тяло метод

Всеки метод има своя собствена реализация и целта на съществуването си. Въпреки това, има няколко общи препоръки, които наистина помагат да пиша ясни и разбираеми методи.
Може би най-важният принцип - принципът на отговорност на звеното: необходимо е да се опита да приложи метод по такъв начин, че всеки един метод за правене на едно нещо, и го прави добре. Следвайки този принцип, вероятно покачване на броя на методи на клас, както и че е важно да се намери правилният баланс.
Друго важно нещо в процеса на кодиране и дизайн - се осъществява методи правят кратки. За кратко метод е лесно да се разбере причината, поради която те са направени, както и те обикновено се побере на екрана, и по този начин бързо да бъде разбран от читателя на кода си.
Последният (но не и по важност) съвет е свързан с помощта на изявление замяна. Ако методът връща стойност, опитайте се да се намали броят на местата, където върнатата стойност биха били дължими (някои хора отиват още по-далеч и препоръчват използването на само една стойност завръщане във всички случаи. Колкото повече върнатата стойност е метод, така че тя става все по-трудно да се следват своята логика и променяте (или оптимизирано) прилагане.

4. претоварване на метод

методи технологии претоварване често използвани за осигуряване на специализиран вариант на метода за различни видове аргументи, или техни комбинации. Въпреки че името на метода на един и същ компютър избира точния алтернатива да се впуснете в настоящите стойности на аргументите на поканата (най-добрият пример е Java дизайнери претоварване на: името винаги е едно и също, но с различни аргументи), или предизвиква грешка при компилирането, ако не бъде намерен такъв вариант на метода. Например:

Метод претоварване е отчасти подобен на генеричните лекарства (повече информация относно генеричните лекарства могат да бъдат намерени в част 4 на урока Как и кога да се използва Generics (Как и кога да се използват генерични продукти)), но претоварването се използва в случаите, когато подход за използване на генеричните лекарства не работи добре и всички или по-голямата типа аргументи, които са родово, изискват специализирани приложения. Въпреки това, комбиниране на двата метода за родово и задръстванията може да бъде много продуктивна, но често това не е възможно в Java, тъй като видът е изтрита (повече подробности в част 4 на урока Как и кога да се използва Generics (Как и кога да се използват генерични продукти)). Нека разгледаме един пример:

Въпреки че тази част от кода може да се пише без използването на генерични лекарства, не е важно за нашите демонстрационни цели. Интересното е, че методът е претоварена numberToString специална имплементация на BigDecimal и генеричните лекарства версия е предназначена за всички останали числа.

5. Замяна

Ние говорихме много за методи първостепенни в част 3 на урока (Как да се изработи класове и интерфейси (Как да се изработи класове и интерфейси). В този раздел, за които вече знаем претоварване методи, ние ще покажем защо използването на анотации @Override толкова важно. Нашата пример показва тънката разлика между подтиснатия метод и метода претоварване по прост йерархия клас.

Родител клас има само един метод toObject. Нека създадем един подклас на този клас, и се опитват да излезе с версия на метода на преобразуване на числа в низове (вместо груби обекти).

Въпреки това, методът на подпис toObject в новия клас не е много по-различно (виж Covariant видове метод за връщане (видове Covariant връщане методи) за повече подробности), а тя не го отмени от суперкласа в класа, на Java компилаторът не издава някакви грешки и предупреждения. Сега, нека да добавите друг метод на класа с дете.

Отново има само малка разлика в подписването на метод (Double вместо номер), но че в този случай, претоварен вариант на метода, не отрича първостепенни майка. Това е, когато на върха на компилаторът на Java и @Override пояснителните бележки се припокриват: метода анотиран с последния пример с @Override ще предизвика грешка при компилирането.

6. интеграция

Вграждане - Тази оптимизация се извършва с помощта на Java JIT (точно навреме) компилатор за отстраняване на специфичен метод разговор и да го замени с директното прилагане на метода. Използването на компилатора евристики СЕР зависи от две неща - колко често този метод се нарича в момента, както и начина, по който е голям. Методи, които са твърде големи, не могат да бъдат ефективно интегрирани. Вграждане на код може да осигури значителен прираст в производителността и се възползват от водене методи къси, както обсъждахме в раздел Метод тяло (метод на тялото) на.

7. рекурсия


Рекурсия в Java - техника, при метода нарича себе си чрез извършване на изчисленията. Например, нека разгледаме следния пример, който обобщава броя на масив:

Това е много неефективно изпълнение, но това показва, рекурсията е достатъчно добър. Налице е добре известен проблем с рекурсивни метод: в зависимост от това колко дълбоко веригата на повикване, те могат да прелее стека и да причини StackOverflowError изключение. Но не е толкова зле, колкото изглежда, защото там е техника, която може да премахне препълване на стека, наречен оптимизация опашка повикване (оптимизация на повикване на опашката). Той може да се прилага, ако методът е опашката рекурсивно (опашка-рекурсивни методи са методи, при които всички рекурсивни повиквания са опашка го нарича). Например, нека да пренапише предходната алгоритъм с помощта на опашката рекурсия:

За съжаление, в този момент Java компилатор (и JIT компилатор JVM) не поддържа опашка обаждане за оптимизиране оптимизиране на опашката, но все пак това е много полезна техника, както и че е необходимо да се знае и да се вземат предвид, когато пишете рекурсивни алгоритми в Java.

8. Референтни методи

В Java 8 направи огромна крачка напред с въвеждането на функционални концепции на езика Java. Базата, която се занимава с методите на данните, концепция, която не се поддържа на езика преди (въпреки това, тъй като Java 7 е освободен, JVM и стандарт Java библиотека вече е някои постижения, за да стане това възможно). За щастие, с референтните методи, сега е възможно.

Нека да разгледаме един малък пример за това как методът може да се използва и в други методи като аргументи.

Последният ред на основния метод използва препратка към println метод за отпечатване на всеки елемент от колекция от низове към конзолата, то се предава като аргумент на друг метод, forEach.

9. Постоянството

Всяка покана LocalDateTime обект, за да променя състоянието си връща нова инстанция LocalDateTime и запазва оригиналния непокътнати. Това е голяма промяна в парадигмата на дизайн API в сравнение със стария календар, и дата, (което, меко казано, не са много приятни за употреба, и са причинили много главоболия).

10. Метод документиране

Това е доста многословен документация за такъв прост метод като The направи разбор, но той показва няколко полезни функции, предлагани от инструмента за инструмент Javadoc, включително връзки към други класове на фрагменти проби и напреднали форматиране. Ето как това се отразява в документацията на методите за Eclipse, един от най-популярните Java IDE.
Просто погледнете в снимката по-горе, всеки Java разработчик от младши до високо равнище може да разбере целта на метода и да го използвате правилно.

11. параметрите на метода и стойности за връщане

Документиране на вашите методи - това е нещо голямо, но, за съжаление, той не издава предупреждение при метод се нарича използване на невярно или неочаквано ценности аргументи. Поради това, като правило, всички публични методи трябва да потвърдят своите аргументи и никога не трябва да бъдат сигурни, че по всяко време ще бъдат определени точните стойности (моделът известен като проверки по (санитарна инспекция)) в поканата.
Връщайки се към нашия пример от предишния раздел, метод на синтактичен анализ трябва да заверява само им аргумент, преди да направи нещо с тях:

Java е друг вариант на проверките за инспекция и коректност, с помощта на отчета за тях поддържали. Въпреки това, тези, които биха могли да се изключи по време на работа и не може да се извърши. За предпочитане е винаги извършват такава проверка и се обадете на съответното изключение.
Дори и с документирани методи и проверка на техните аргументи, бих искал да направя няколко забележки, свързани с връщането стойност. Преди тя има Java 8, най-лесният начин да се каже, че методът по това време не е от значение за него да се върне просто ще се върне нула. Ето защо Java е толкова лошо да се получи NullPointerException. Java 8 се опитва да реши този проблем с въвеждането на Факултативния клас. Нека разгледаме следния пример:

По желание предоставя много полезни методи, както и напълно елиминира необходимостта да се върне в метода на нула и замърсяват всички ваши проверки код за нула. Единственото изключение, може би, е колекцията. Всеки път, когато методът се връща колекция, винаги е по-добре да се върне нула вместо нула (и дори по избор), например:

12. Метод входната точка в прилагането на

Дори ако сте просто един разработчик писмено заявление във вашата организация или участник в един от най-популярните рамка Java или библиотеката, дизайнерските решения, които правите, играят много важна роля в това как ще се използва кода си.
Докато препоръки методическа API дизайн са няколко книги, в тази част на урока се занимава с много от тях (като методите на API са входна точка), така че прави преглед ще бъде много полезно:
• Използвайте подходящи имена за методи и техните аргументи (метод на подписи)
Опитайте се да запазите броя на аргументи, за да бъде по-малко от 6 (раздел Метод подписи)
• Пазете методи кратък и разбираем (раздел Метод тяло и Вграждането)
• Винаги се документира публичните методи, включително предварителни условия и примери, ако има смисъл (раздел Метод документация)
• Винаги проверявайте аргументите и проверки по (раздел Метод параметри и се връщат стойности)
• Опитайте се да се избегне нула, тъй като връщането стойност (Раздел Метод параметрите и стойностите на връщане)
• Всеки път, когато има смисъл да се опита да се изработи постоянни методи (които не засягат вътрешното състояние, раздел неизменност)
• Използвайте правилния популярността и достъпността за покриване на методите, които не трябва да са публични (част 3 урок, Как да създадем класове и интерфейси)

13. Каква е следващата стъпка

Тази част на урока се казва по-малко за Java като език, но повече за това как ефективно да използват Java езика, по-специално, писане четене, чисти, zadokumentirovanyh и ефективни методи. В следващия раздел ще запазим същата основна идея и да се обсъдят основните принципи на програмирането, които имат за цел да ви помогне като програмист на Java, за да получите по-добре.

14. изтегляне изходния код

Това беше урок се фокусира върху това как ефективно да пиша методи. Можете да изтеглите изходния код тук: напреднали Java-част-6

Свързани статии

Подкрепете проекта - споделете линка, благодаря!