Урок 17. Циклы и методы в Java (часть 2)

Методы в Java

Что же такое метод в Java? Метод – это совокупность переменных и выражений, расположенных в определённой последовательности. Метод, по сути, выполняет какое-то действие и количество таких действий неограниченно. Мы с вами уже использовали методы в нашем приложении, просто мы не заглядывали внутрь.

 

Структура метода

Первая часть метода, с которой мы с вами познакомимся – объявление метода (signature). Выдуманный пример:

public boolean shootLazers(int number, string type)

Добавьте после объявления метода знакомую нам пару – открывающуюся и закрывающуюся фигурные скобки {}, добавьте код между скобками, и вы получите готовый метод.  Еще один пример:

private void setCoordinates(int x, int y){
//код для установки координат
}

После этого мы можем использовать этот метод в другой части кода нашего приложения:

//Какой-то код
setCoordinates(4,6);//используем метод setCoordinates
//И снова какой-то код

В том месте, где мы вызываем метод setCoordinates выполнение нашей программы будет переходить к коду, который содержится в этом методе и будет выполняться до тех пор, пока не достигнет конца или не будет возвращен (return). Затем код продолжится со следующей строки после вызова метода.

Вот пример метода, который вернет (return) значение коду, который его вызвал:

int addAToB(int a, int b){
        int answer = a + b;
        return answer;
        }

Вызов использования этого метода может выглядеть вот так:

int myAnswer = addAToB(2,4);

Естественно, нам нет нужды создавать методы, которые будут складывать две переменные, но предыдущий пример помогает нам немного прояснить суть методов. Сперва мы передаём значения 2 и 4. В объявлении (signature) метода значение 2 передаётся переменной a типа int, а значение 4 передаётся переменной b типа int. Внутри тела метода переменные a и b складываются и используются для инициализации новой переменной answer типа int. Строка return answer; возвращает значение, хранящееся в переменной answer коду, который вызвал метод addAToB и, следовательно, присваивается переменной myAnswer. Теперь myAnswer хранит в себе значение 6.

Обратите внимание на то, что объявление методов в предыдущих примерах немного отличается. И причиной этому служит то, что объявление метода в Java достаточно гибко и позволяет нам создавать именно те методы, которые нам потребуются.

Теперь разберёмся с объявлением метода. Разобьём его на части и изучим каждую часть отдельно:

Модификатор доступа | возвращаемый тип | имя метода (параметры)

Вот примеры, которые нам уже знакомы, чтобы вам легче было определить, что к чему относится:

Часть объявления Пример
Модификатор доступа public, private и т.д.
Возвращаемый тип int, boolean, float, или же Java-объект,выражение,тип
Имя метода shootLazers, setCoordinates, addAToB и т.д.
Параметры (int number, string type), (int x, int y), (int a, int b) и т.д.

 

Модификатор доступа

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

//Большая часть кода меня увидит
public int a;
//Код в других классах меня не увидит
private string secret = "Shhh, I am private";

Модификаторы доступа являются важной темой в Java, но поближе мы с ними познакомимся после того, как пройдём урок по Объектно-Ориентированному подходу в программировании.

 

Возвращаемый тип (return)

Следом идёт возвращаемый тип. Как и модификатор доступа, возвращаемый тип не является обязательным, хотя он более используемый. Мы уже знаем, что методы могут сделать все, что угодно. Но что если нам нужен результат от того, что они сделали? Самый простой пример возвращаемого типа, который мы видели до сих пор, это:

int addAToB(int a, int b){
int answer = a + b;
return answer;
}

В этом фрагменте возвращаемый тип выделен – int. Метод addAToB возвращает обратно (return) коду, который вызвал этот метод, значение, которое поместится в переменную типа int.

Возвращаемым типом может быть любой тип данных Java, с которыми мы уже встречались. Метод, однако, не обязан возвращать значение. На этот случай мы в объявлении метода должны использовать ключевое слово void в качестве возвращаемого типа. Когда мы используем ключевое слово void тело метода не должно пытаться вернуть значение, поскольку это вызовет ошибку компилятора. Однако допускается использование слова return без значения. Ниже приведены некоторые комбинации возвращаемого типа и допустимые значения ключевого слова return:

void doSomething(){
//наш код
//метод отработал свою задачу. Пора возвращаться к коду, который вызвал метод
//return не требуется
}

Комбинация с использованием return:

void doSomethingElse(){
//наш код, который выполняет какую-то задачу
//нам не нужно возвращать какое-то определённое значение
return;
}

Еще одно сочетание void и return:

void doYetAnotherThing(){
        //какой-то код
        if(someCondition){
               //если someCondition - true, то возвращаемся к вызвавшему нас коду
               //до завершения всего тела метода
        return;
        }
        //еще какой-то код, который может будет исполнен, а может и нет
        return;
        //так как этот return находится в самом конце метода
        //а возвращаемый тип метода - void
        //то он особо и не нужен здесь,
        //но зато сразу ясно, что метод заканчивается тут
        }

String joinTogether(String firstName, String lastName){
        return firstName + lastName;
        }

Теперь можем вызвать каждый из предыдущих методов в другом коде:

//настало время использовать наши методы
doSomething();
doSomethingElse();
doYetAnotherThing();
String fullName = joinTogether("Glob","Jefferson");
//fullName теперь = Glob Jefferson
//исполнение кода продолжится отсюда

 

Имя метода

Когда мы разрабатываем собственный метод – то имя может быть дано произвольно, но существует негласная договорённость использовать глаголы, которые вносят ясность в то, для чего этот метод создан. Другая договорённость заключается в том, чтобы первая буква первого слова в имени начиналась со строчной (маленькой), а первые буквы в каждом последующем слове с прописной (большой). Это называется «верблюжийРегистр». К примеру следующий код абсолютно законен и будет выполнен:

XGHHY78802c(){
//какой-то код
        }

Теперь рассмотрим примеры именования согласно договорённости:

doSomeVerySpecificTask(){
//код здесь
        }

getMySpaceShipHealth(){
//код здесь
        }

startNewGame(){
//код здесь
        }

Так гораздо понятнее для чего создан метод. Перейдём к параметрам.

Параметры

Мы уже знаем, что метод может вернуть какой-нибудь результат коду, который его вызвал. Что делать если этот метод нужно не только вызвать, но и передать ему какую-то информацию? Для этой цели мы используем параметры, с помощью которых мы передаём значения методу. Мы уже видели пример метода с параметрами, взглянем на него еще раз:

int addAToB(int a, int b){
        int answer = a + b;
        return answer;
        }

Параметры в этом примере выделены. Обратите внимание на то, что в теле метода мы используем  a + b так, как будто они уже были объявлены и инициализированы. На самом деле так и есть. Параметры в объявлении метода – это и есть их объявление, а код, который вызывает метод как раз их инициализирует:

int returnedAnswer = addAToB(10,5);

Более того, int — это не единственный тип данных, с которым мы можем иметь дело в параметрах метода. Мы можем задействовать в параметрах любые типы данных Java, даже те, что будем разрабатывать собственноручно. Мы можем смешивать их и использовать в любом количестве, которое нам нужно для решения нашей проблемы:

void addToAddressBook(char firstInitial, String lastName, String city, int age){
//теперь всем параметрам переданы значения
//объявленными и инициализированными переменными
//теперь можно с ними манипулировать
        }

Тело метода

До этого момента в теле метода мы с вами писали лишь комментарии. По сути вы и так уже знаете, что нужно делать. Любой синтаксис Java будет работать в теле метода.

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