• ,

Как писать методы эффективно (перевод статьи)

Исходная статья лежит по адресу:
http://www.javacodegeeks.com/2015/09/how-to-write-methods-efficiently.html#download

учебник

Опубликовано: Andrey Redko ( Андреем Редько) в Core Java (Java Ядро) 18 сентября 2015г

Эта заметка — часть курса Advanced Java (Продвинутый Java.) нашей академии
Этот курс создан, чтобы помочь вам сделать использование Java более эффективным. Здесь обсуждаются более сложные темы, как создание объектов, распараллеливание, сериализация, рефлексия и многое другое. Эти знания будут гидом для вашего путешествия к вершинам мастерства Java.

Оглавление курса
1. Введение
2. Сигнатура методов
3. Тело метода
4. Перегрузка метода
5. Переопределение метода
6. Встраивание
7. Рекурсия
8. Ссылки метода
9. Неизменность
10. Документирование метода
11. Параметры метода и возвращаемые значения
12. Метод как точка входа в приложение
13. Что дальше
14. Загрузка исходного кода

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

2. Сигнатуры методов
Как вы уже знаете, Java — это объектно-ориентированный язык. По существу, каждый метод Java относится к какой-то части класса (или к самому классу в случае статистического метода). Он имеет правила видимости (или доступности), может быть объявлен абстрактным или финальным и так далее. Однако возможно наиболее важная часть метода — это его сигнатура: тип возвращаемого значения и аргументов, плюс список проверяемых исключений реализации каждого метода, который может быть выброшен (но эта часть раньше использовалась не часто, и еще менее часто в наши дни). Начнем с маленького примера.
1	public static void main( String[] args ) {
2	    // Some implementation here
3	}

Метод main принимает массив строк только как аргумент args и ничего не возвращает. Это могло бы быть очень приятно — делать все методы такими простыми как main. Но в реальности сигнатура метода может стать нечитаемой. Давайте взглянем на следующий пример:
1	public void setTitleVisible( int lenght, String title, boolean visible ) {
2	    // Some implementation here
3	}

Первое что здесь заметно, что условные обозначения изначально используются в названиях методов Java, например setTitleVisible.Имя хорошо подобрано и пытается описать, что в методе полагается сделать.
Второе, имена аргументов говорят (или по крайней мере намекают) насчет их цели. Это очень важно найти правильные, толковые имена для аргументов метода, вместо int i, String s, boolean f(в очень редких случаях это, однако, имеет смысл).
Третье, метод имеет только три аргумента. Хотя Java имеет гораздо больший предел разрешенного числа аргументов, настоятельно рекомендовано не превышать количество аргументов больше 6. Выход за эти рамки делает сигнатуру тяжело понимаемой.
С тех пор как была выпущена Java 5, методы могут иметь различный список аргументов одинакового типа (названный varargs — переменные аргументы) и использовать специальный синтаксис, например:
1	public void find( String … elements ) {
2	    // Some implementation here
3	}

Внутренне, компилятор Java конвертирует переменные аргументы в массив соответствующих типов и, таким образом, переменные аргументы могут быть приняты для реализации метода.
Интересно, Java также разрешает декларировать varargs используя параметры типа generic. Однако, потому что тип аргумента неизвестен, компилятор Java хочет быть уверенным что varargs используются правильно и советует методы final снабжать комментариями с пометкой @SafeVarargs(более детальная информация содержится в части 5 учебника, How and when to use Enums and Annotations (как и когда мы используем Перечисления и Комментарии). Например: