Ситуация, очевидная для любого, усвоившего основы программирования, которая все же может показаться довольно сложной для начинающих
Разберем пример с картинки выше:
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