Връщайки се на OOP, привидно е по- лесно, особено за неучили математика, защото имаме синтаксис, подобен на (основни заслуги на Java):
subject.verb(object);
Което е много близко до немските езици, какъвто е и английския в сърцевината си (макар, че има много френски думи в себе си).
// The bear is eating the pear
// Der Bär frisst die Birne | Der Bär isst die Birne
// Мечката яде круша
bear.eats(pear);
За нас не, но за англо и немско говорящите ООП е по- близко до конструкцията на езика им, което им дава предимството да пишат програми мислейки ги на собствения си език.
В контраст, фунцкионалното е математика, което се учи след изучаването на основния (майчин език) и самото математическо мислене иска дисциплина, докато се придобие.
// корен квадратен
n -> n * n
T.e., OOP привидно следва да е по- близка абстракция до лексиката и логиката изградена върху лексиката, отколкото до математиката и по- лесна за възприемане от масите. Когато абстракцията порасне, вече влизаме в едни много гадни филми, но причината за това може да е лошото мислене и планиране, а не точно, че OOP не става.
Другият филм е с immutable state. Но можем да имаме и OOP с immutable state.
От тук следва въпроса, как може човек да дефинира 2? С човешки език може да се обърка. С математика може да бъде по- успешен.
2 e по- голямо от едно, то е сборът на едно плюс едно, и т.н.
С ламбда е по- лесно
0 = f => x => x
1 = f => x => f(x)
2 = f => x => f(f(x))
3 = f => x => f(f(f(x)))
4 = f => x => f(f(f(f(f(x))))
Но определено ми е по- трудно да го чета. Докато светът е написан на математика, собственото ми съзнание го обработва много по- добре с лексика.