Найти тему

Вложенные вызовы методов в Java

Ситуация, очевидная для любого, усвоившего основы программирования, которая все же может показаться довольно сложной для начинающих

Разберем пример с картинки выше:

int a = module(parseValue(getFromInput())) + 50;

Здесь мы объявляем переменную с именем
a типа int и в этой же строке инициализируем ее некоторым значением. Задача среды исполнения, в нашем случае JVM, - выделить память под хранение этого значение и, собственно, вычислить само значение. Как это происходит?

Справа от знака равно у нас два слагаемых - пока еще неизвестное возвращаемое значение метода
module и число 50

С правым слагаемым все понятно, поэтому среда исполнения начинает вычислять левое слагаемое:

1️⃣ Для того чтобы вызвать метод
module, мы должны передать ему значение аргумента (все что находится в скобках)
2️⃣ Значение аргумента так же в свою очередь является возвращаемым значением метода
parseValue
3️⃣ Переходим к методу
parseValue и выясняем что тут аналогичная ситуация — для его вызова, нам необходимо сначала получить результат вызова метода getFromInput

Собственно с этого момента вызовы методов начинают 'разворачиваться':

1️⃣ Сначала идет вызов
getFromInput без параметров
2️⃣ Далее результат вызова метода
getFromInput передается в качестве аргумента в вызов функции parseValue
3️⃣ В конце-концов, результат вызова метода
parseValue передается в качестве аргумента в вызов функции module, которая является корнем цепочки

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

int a = 5 + 50;

Полный код программы⬇️
https://gist.github.com/pyshinskiy/565ccc3ae29c20d22ce48772124c6a2b