Я скажу это снова здесь, в моем ответе: вы спрашиваете о функциональном программировании, но все, что вы описываете, происходит от ООП.
В общем, вы не спрашиваете, какие объекты может сделать в функциональном программировании.Вместо этого у вас есть известные функции, которые способны работать с известными типами ввода и возвращать известные типы вывода.
Некоторые функции первого порядка
const add = (x, y) =>
x + y
const mult = (x, y) =>
x * y
Абстракция данных первого порядка, число rational
module
const rational = (numer, denom) =>
[ numer, denom ]
const numerator = r =>
r [0]
const denominator = r =>
r [1]
Мы можем добавить функции в модуль
const string_of_rational = r =>
`(${numerator (r)} / ${denominator (r)})`
const add_rational = (r1, r2) =>
rational
( add ( mult ( numerator (r1)
, denominator (r2)
)
, mult ( numerator (r2)
, denominator (r1)
)
)
, mult ( denominator (r1)
, denominator (r2)
)
)
Пример программы, использующей наш модуль
const a = rational (1, 2)
const b = rational (1, 4)
const c = add_rational (a, b)
console.log (string_of_rational (c))
// (1 / 2) + (1 / 4) =
//=> (6 / 8)
Абстракция данных важна, поскольку она сохраняет нашу программу.функциональность, даже если базовое представление данных изменяется.
Выше мы использовали простой массив []
для хранения двух значений для наших рациональных чисел.Мы можем использовать другую реализацию, если хотим
const rational = (numer, denom) =>
({ numer, denom })
const numerator = r =>
r.numer
const denominator = r =>
r.denom
И наша программа все еще работает
const a = rational (1, 2)
const b = rational (1, 4)
const c = add_rational (a, b)
console.log (string_of_rational (c))
// (1 / 2) + (1 / 4) =
//=> (6 / 8)
Вам решать, как упаковать и реализовать ваши модули.В этом примере у нас есть все функции, связанные с нашими рациональными числами, в файле с именем rational.js
// import whatever you need from your module,
// and make sure the module exports it!
const { make, add, string_of } = require ('./rational')
// our program works the same
const a = make (1, 2)
const b = make (1, 4)
const c = add (a, b)
console.log (string_of (c))
// (1 / 2) + (1 / 4) =
//=> (6 / 8)
Я рекомендую Структура и интерпретация компьютерных программ, 2-е издание Джеральдом Джеем Суссманом и Гарольдом Абельсоном.Он научит вас, что важнее всего для функционального программирования, функции .Эта книга даст вам прочную основу для прохождения более продвинутых концепций на любом функциональном языке.