x = 1; y = 3

z = x + y

puts z #<= z = 4

Since z depends on x and y, what will happen when we update value of x or y. z remains same as 4 because z is already computed and stored using the values of x and y. Now if the values of x and y changes z will still remain the same.

But what if you want z to get adjusted depending upon x and y. This is more common problem in everyday programming than we think. Imagine you have to update the GUI based on what is changing in underlying model (MVC?) or take an example of spreadsheet where changing a value in a cell recalculates some other cell based on a formula.

Here is a very simple example of Reactive Programming in Ruby using EventTarget.

Here in this example value of z is x + 2. We evaluate z by setting an initial value for x and then later we change value of x and observe the value of z changed as well.

require 'EventTarget'

module Rx

class Change

attr_accessor :old, :new

end

class ObservableValue

include EventTarget

def initialize(value, on_change)

add_event_listener(:change, &on_change)

self.value = value

end

def value=( v )

change = Change.new

change.old = @value

change.new = v

@value = v

evt = Event.new( :change, change )

dispatch_event( evt )

end

end

end

if $0 == __FILE__

z = 0

on_change = Proc.new {|e| z = e.change.new + 2}

x = Rx::ObservableValue.new(3, on_change)

puts "Initial value of z is #{z}" #<= z=5

x.value = 5

puts "Current value of z is #{z}" # <= z=7

end

This is a very simple and contrived example of Reactive programming but I hope this illustrates the point. The concept is way more powerful and is (Functional Reactive Programming) available in a lot of functional languages like Haskell. Take a look at Reactive Framework in .Net and Javascript, Traits, Trellis in Python or Cells in Common Lisp for more understanding of how Reactive Programming works.

Let me know your thoughts and happy hacking :)

## 6 comments:

寂寞又無聊 看到你的BLOG 加油喔!!........................................

只用微笑說話的人，才能擔當重任..................................................

Learn wisdom by the follies of others. ......................................................

您的部落格文章真棒!!有空我一定會常來逛!! ........................................

Thx ur share........................................

開懷幸福的生活，是每個人的夢想~~希望大家都能夠實現！..............................

Post a Comment