Pull to refresh
0
0
Send message

В данном примере мы исходим из того, что наши классы If и GreaterThan immutable by design и решают только одну задачу.
Реализация этого на ruby могла бы выглядеть примерно так:


class GreaterThan
  def initialize(a, b)
    @a = a
    @b = b
  end

  def call
    @a > @b ? @a : @b
  end
end

class If
  def initialize(condition, a, b)
    @condition = condition
    @a = a
    @b = b
  end

  def call
    @condition.call ? @a : @b
  end
end

a = 1
b = 2
chain = If.new(GreaterThan.new(a, b), a, b)
chain.call # => 1

Ок, мы устали писать new, ведь наши классы все равно решают только одну задачу:


class GreaterThan
  def self.call(a, b)
    a > b ? a : b
  end
end

class If
  def self.call(condition, a, b)
    condition ? a : b
  end
end

a = 1
b = 2
If.(GreaterThan.(a, b), a, b) # => 1

В чем кардинальные отличия этого подхода от FP?


def _if(condition, a, b)
  condition ? a : b
end

def greater_than(a, b)
  a > b ? a : b
end

a = 1
b = 2
_if(greater_than(a, b), a, b) # => 1

Information

Rating
Does not participate
Registered
Activity