Элементы програмирования
Любой нетривиальный язык программирования имеет:
1) элементарные выражения, представляющие наиболее простые элементы.
2) способы комбинирования первых.
3) механизм для абстрагирования сложных и комбинированных выражений под одним именем.
В Scala все выражения, и любое выражение должно превратиться в конце концов в конкретное значение. В Scala за это отвечает Substitution Model, задача этого модуля, циклически выполнять вложенные выражения в друг друга, пока из них не останется конкретное значение.
В функциональном программировании есть две стратегии выполнения(Evaluation Strategy)
1) Call By Value
2) Call By Name
Каждая из стратегий выгодна в разных конкретных случаях. Но чаще всего Scala используется СBV, в большинстве случаев этого оправдано.
Но когда в случае
Любой нетривиальный язык программирования имеет:
1) элементарные выражения, представляющие наиболее простые элементы.
2) способы комбинирования первых.
3) механизм для абстрагирования сложных и комбинированных выражений под одним именем.
В Scala все выражения, и любое выражение должно превратиться в конце концов в конкретное значение. В Scala за это отвечает Substitution Model, задача этого модуля, циклически выполнять вложенные выражения в друг друга, пока из них не останется конкретное значение.
В функциональном программировании есть две стратегии выполнения(Evaluation Strategy)
1) Call By Value
2) Call By Name
Каждая из стратегий выгодна в разных конкретных случаях. Но чаще всего Scala используется СBV, в большинстве случаев этого оправдано.
Но когда в случае
def someOperation(x: Int, y: Int): Int = 1 someOperation(1+2, loop)
Мы зациклимся на втором шаге. Но если второму параметру применить стратегию оценки СBN, то міы спокойно пройдем программу
Чтобы сменить дефолтовую стратегию на СBN, нужно интересуемый параметр объявить:
x: Int - СBV
x:=> Int - СBN
Поэтому предыдущее объявленеи нужно подредактировать:
def someOperation(x: Int, y: => Int): Int = 1 someOperation(1+2, loop)// так бесконечного цикла не будетВ зависимости от реализации функции может быть более выгодной та или иная стратегия.
Комментариев нет:
Отправить комментарий