Java. Урок 17. Функции

Уроки для начинающих   18 января 2013  Автор статьи:  

В данном уроке мы научимся создавать свои функции. Что такое функция? Это некоторая подпрограмма, которая имеет свое имя и которую можно применять в выражениях. Из чего состоит функция? Функция состоит из некоторого набора команд, которые будут выполнены при ее вызове. Для чего нужно использовать функции? Обычно их используют для того, чтобы сделать код более читаемым. Когда следует создавать функцию?

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

Рассмотрим сигнатуру функции:

ТипВозвращаемогоЗначения имяФункции(параметры функции){
тело функции;
}

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

Для того, чтобы из тела функции вернуть значение используется ключевое слово return.
Напишем простую функцию, которая будет возводить некоторое число a в степень b. Понятное дело, что для того, чтобы функции возвести число a в степень b, как минимум она должна знать эти значения. Поэтому у этой функции будет два параметра целочисленное a и целочисленное b. Кроме того, наша функция должна вернуть результат, очевидно, что он будет целочисленного типа. Название функции должно отражать смысл того, что она делает:

int pow(int a, int b) {
int result = 1;//переменная в которой будет содержаться результат
for (int i = 0; i < b; i++) { result *= a; } return result;//возвращаю его }

Для того, чтобы возвести числа a в степень b достаточно написать:

int temp = pow(3,4);

Если вы попытаетесь вызвать функцию pow из метода с main у вас ничего не получится, необходимо, чтобы модификаторы совпадали. В данном случае необходимо дописать public static вначале нашей функции:

public class test {
public static int pow(int a, int b) {
int result = 1;
for (int i = 0; i < b; i++) { result *= a; } return result; } public static void main(String[] args) { int temp = pow(3+2,4*1)+5;//применение функций! } }

Как вы могли заметить я использовал функцию pow внутри выражения. Таким образом функции можно комбинировать с другими операциями.
Теперь мы можем понять, что значит заголовок main:

public static void main(String[] args)

void означает, что функция с именем main не возвращает ничего. Также мы видим, что она имеет один параметр с именем args, который является массивом строк.
Напишем функции readArray(), которая будет возвращать массив целых чисел, считанный с клавиатуры:

public class test {
public static int[] readArray() {
int[] a;//массив целых чисел
int n;//количество элементов в массиве
Scanner in = new Scanner(System.in);
n = in.nextInt();
a = new int[n];
for(int i = 0; i < n; i++) { a[i] = in.nextInt(); } return a; } public static void main(String[] args) { int[] array = readArray(); } }

Давайте еще напишем функцию printArray, которая будет распечатывать массив в консоль:

import java.util.Scanner;

public class test {
public static int[] readArray() {
int[] a;//массив целых чисел
int n;//количество элементов в массиве
Scanner in = new Scanner(System.in);
n = in.nextInt();
a = new int[n];
for (int i = 0; i < n; i++) { a[i] = in.nextInt(); } return a; } public static void printArray(int[] a) { for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } public static void main(String[] args) { int[] array = readArray(); printArray(array); } }

Очевидно, что функция printArray() не должна возвращать никакого значения и должна принимать на вход единственный параметр массив, который следует распечатать.

Рекурсивные функции

Рекурсивные функции - это такие функции, которые вызывают сами себя. Понятное дело, что такие функции содержат некоторые ограничения, которые не позволяют им работать вечно. Напишем рекурсивную функцию вычисления факториала:

public static int factorial(int n) {
if(n==0)
return 1;
return n*factorial(n-1);
}

После возвращения результата функции, т.е после выполнения операции return остальные команды не выполнятся. Как вы могли заметить факториал от 0 это 1, а факториал любого другого значения можно посчитать как это число умноженное на факториал предыдущего числа. Например факториал 7 это 7 * факториал 6, а 6 в свою очередь это 6 * факториал 5 и так далее вплоть до 0, а факториал нуля уже известен.
Рекурсия применяется во многих алгоритмах и не всегда так просто, как в примере с факториалом, который проще было реализовать через цикл.


Функции в C++
Функции в Delphi

  • Алексей

    Спасибо за доступную подачу материала!:)

  • Сергей Гапонов

    Функции — методы ?

    • Функции внутри классов = методы

  • Сергей

    В ООП нет функций и процедур. Только методы, только хардкор)
    Сделать метод вне класса невозможно.

    • В ООП нету, а в языках программирования есть, поэтому и объясняю, что называется методом=)

  • chuchundra

    lf

Научиться программировать

  • на Delphi

  • на Java

  • на C++