Функции (методы)

Одна и та же идея – выделять повторяющиеся действия в отдельные именованные куски кода – есть во всех языках.

Когда программа становится больше, одних main и нескольких строк кода уже мало.
Хочется разбить задачу на аккуратные шаги: «прочитать данные», «посчитать сумму», «вывести результат» – и каждый шаг оформить отдельно.

Для этого в Java есть методы (функции внутри класса).
Метод – это именованный кусок кода, который можно вызвать по имени.

int s = sum(2, 3);   // вызов метода sum

Основное

Общий вид метода:

тип_результата имяМетода(параметры) {
    // тело метода
    return значение;  // если тип_результата не void
}

Вызов метода:

тип_результата переменная = имяМетода(аргументы);

Простейший пример:

static int sum(int a, int b) {
    return a + b;
}

Зачем нужны методы

Основные причины:

  • не копировать один и тот же код много раз;
  • сделать программу понятнее: каждый метод отвечает за одну маленькую подзадачу;
  • упростить отладку: ошибку легче искать в небольшом методе, чем в огромном main.

Пример без методов – всё в одном месте:

int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();

int sum = a + b + c;
System.out.println(sum);

С методом:

static int sum3(int x, int y, int z) {
    return x + y + z;
}

// ...

int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();

int sum = sum3(a, b, c);
System.out.println(sum);

Метод с результатом (return)

Метод может вычислить значение и вернуть его через return.

static int sum(int a, int b) {
    int s = a + b;
    return s;
}

Использование в main:

int x = 7;
int y = 5;

int s = sum(x, y);            // вызываем метод
System.out.println(s);        // 12

Здесь:

  • int перед sum – тип результата (метод возвращает int);
  • a и b – параметры (локальные имена для входных данных);
  • return s; – место, где метод отдаёт результат обратно.

Можно записать короче:

static int sum(int a, int b) {
    return a + b;
}

Важно: тип после return должен совпадать с типом результата (int здесь).


Метод без результата (void)

Иногда метод ничего не возвращает, а только что‑то делает: печатает, изменяет массив и т.п.
В этом случае вместо типа результата используется void, а return либо не пишут, либо пишут return; без значения.

static void printLine(String text) {
    System.out.println(text);
}

Вызов:

printLine("Привет");
printLine("Java");

Такой метод вызывают как отдельную команду, его нельзя присвоить переменной:

// так нельзя:
// String s = printLine("Привет");

Параметры и аргументы

В объявлении метода в скобках указаны параметры – имена для входных данных метода.

static int square(int x) {
    return x * x;
}

Вызов:

int a = 5;
int b = square(a);      // a – это аргумент

При вызове:

  • значение аргумента копируется в параметр;
  • внутри метода используется именно параметр x.

Если параметров несколько, они перечисляются через запятую:

static double average(double a, double b, double c) {
    return (a + b + c) / 3.0;
}

Примеры методов

Проверка чётности

static boolean isEven(int x) {
    return x % 2 == 0;
}

Использование:

int n = in.nextInt();

if (isEven(n)) {
    System.out.println("Чётное");
} else {
    System.out.println("Нечётное");
}

Минимум из двух чисел

static int min(int a, int b) {
    if (a <= b) {
        return a;
    } else {
        return b;
    }
}

Подсчёт суммы элементов массива

static int sumArray(int[] a) {
    int sum = 0;
    for (int i = 0; i < a.length; i++) {
        sum = sum + a[i];
    }
    return sum;
}

Вызов:

int[] a = {1, 2, 3, 4};
int s = sumArray(a);
System.out.println(s);    // 10

main как пример метода

Метод main – тоже обычный метод (только со специальной сигнатурой), с которого Java начинает выполнение программы:

public static void main(String[] args) {
    // здесь начинается выполнение
}

Пока в наших программах все вспомогательные методы будут static и находиться в том же классе, что и main.
Вызывать их можно просто по имени: sum(...), isEven(...), sumArray(...).


Что нужно запомнить

Метод – это именованный кусок кода, который можно вызывать по имени:

static int sum(int a, int b) {
    return a + b;
}

Метод с типом результата (int, double, boolean и т.п.) должен возвращать значение через return.
Метод с типом void ничего не возвращает, его вызывают как отдельную команду.

Параметры – это «места» для входных данных метода, аргументы передаются при вызове.
В первых программах достаточно уметь писать простые static‑методы в том же классе, что и main, и вызывать их по имени.

В C++ функция – это именованный кусок кода, который можно вызвать по имени. В отличие от Java, функции часто пишут просто в файле (не внутри класса).

int s = sum(2, 3); // вызов функции sum

Основное

Общий вид функции:

тип_результата имяФункции(параметры) {
    // тело функции
    return значение; // если тип_результата не void
}

Простейший пример:

int sum(int a, int b) {
    return a + b;
}

Функция с результатом (return)

int sum(int a, int b) {
    return a + b;
}

Использование:

#include <iostream>
using namespace std;

int sum(int a, int b) {
    return a + b;
}

int main() {
    int x = 7;
    int y = 5;
    int s = sum(x, y);
    cout << s << "\n"; // 12
    return 0;
}

Функция без результата (void)

#include <iostream>
using namespace std;

void printLine(const string& text) {
    cout << text << "\n";
}

int main() {
    printLine("Привет");
    printLine("C++");
    return 0;
}

Параметры и аргументы

Параметры задаются в скобках, при вызове передаются аргументы.

int square(int x) {
    return x * x;
}

Использование:

#include <iostream>
using namespace std;

int square(int x) {
    return x * x;
}

int main() {
    int a = 5;
    int b = square(a);
    cout << b << "\n"; // 25
    return 0;
}

Примеры функций

Проверка чётности

bool isEven(int x) {
    return x % 2 == 0;
}

Сумма элементов массива (через vector)

#include <iostream>
#include <vector>
using namespace std;

int sumArray(const vector<int>& a) {
    int sum = 0;
    for (int i = 0; i < (int)a.size(); i++) {
        sum = sum + a[i];
    }
    return sum;
}

int main() {
    vector<int> a = {1, 2, 3, 4};
    cout << sumArray(a) << "\n"; // 10
    return 0;
}

В Python функция – это именованный кусок кода, который можно вызвать по имени. Функции объявляются словом def.

s = sum2(2, 3)  # вызов функции sum2

Основное

Общий вид функции:

def имя_функции(параметры):
    # тело функции
    return значение  # если нужно вернуть результат

Простейший пример:

def sum2(a, b):
    return a + b

Функция с результатом (return)

def sum2(a, b):
    return a + b

x = 7
y = 5
s = sum2(x, y)
print(s)  # 12

Функция без результата

Если return не написан, функция просто заканчивает работу.

def print_line(text):
    print(text)

print_line("Привет")
print_line("Python")

Параметры и аргументы

def square(x):
    return x * x

a = 5
b = square(a)
print(b)  # 25

Примеры функций

Проверка чётности

def is_even(x):
    return x % 2 == 0

print(is_even(10))  # True
print(is_even(7))   # False

Сумма элементов списка

def sum_array(a):
    s = 0
    for x in a:
        s = s + x
    return s

a = [1, 2, 3, 4]
print(sum_array(a))  # 10

В Java функции называются методами и всегда находятся внутри класса. Чтобы вызывать метод из main без создания объекта, его делают static.

В C++ функцию можно написать прямо в файле и вызывать её из main без дополнительных слов вроде static.

В Java и C++ тип результата и типы параметров задаются явно (int, double, boolean и т.п.). В Python типы обычно не пишут, поэтому проще начать, но больше ошибок можно заметить только во время запуска.

В Java return обязателен для методов с типом результата, а для void значения не возвращают. В C++ и Python правило то же самое по смыслу: если нужен результат, его возвращают.

Передача аргументов: в Java примитивные типы (int, double, boolean, char) передаются как значение, а для объектов передаётся ссылка (сам объект не копируется). В C++ и Python есть разные варианты, но на старте достаточно помнить: чаще всего передаём значения, а большие структуры стараемся не копировать без необходимости.