Skip to content

From java processing to ruby processing

Martin Prout edited this page Apr 3, 2015 · 28 revisions

Here are some the main differences moving from vanilla processing to ruby-processing:-

  1. You do not declare types in ruby vec = PVector.new instead of PVector vec = new PVector() for example, however in this case you should prefer to use Vec2D and Vec3D, which are ruby-processing alternatives to PVector (but with methods that are much more ruby-like, and have extended functionality).

  2. There are no void methods (what's evaluated gets returned without an explicit return)

  3. Everything is an object (this includes primitive types float, integer etc)

  4. Confusing for beginners and especially pythonistas there is often more than one way to do it

  5. Processing makes heavy use of java 'inner' classes (to make methods and values somewhat globally available) ruby-processing provides the Processing::Proxy mixin to somewhat mimic this behaviour see app.rb. An alternative to consider is to use delegator methods using extend Forwardable, requires require 'forwardable' see JRubyArt example.

In general you should try and code in regular ruby (in ruby-processing), only using processing shortcuts / methods when you need to (ie when ruby alternatives don't exist, many processing shortcuts just aren't needed in ruby). From 3. above you should prefer:-

  • a**b to pow(a, b)
  • theta.degrees to degrees(theta)
  • theta.radians to radians(theta)
  • x.abs to abs(x)
  • x.ceil to ceil(x)
  • x.round to round(x)
  • str.strip to trim(str)
  • str.hex to hex(str)
  • string.to_i(base=16) to unhex(str)

Other ruby methods to prefer:-

  • rand(x) to random(x)
  • rand(lo .. hi) to random(lo, hi)
  • puts val (or even just p val) to println(val)

Oddities to be aware of

The processing map(val, in_start, in_end, out_start, out_end) method has been implemented in ruby-processing, this is not to be confused with ruby map which is much used in ruby to map a function to an array.

You should prefer to use map1d(val, (range1), (range2)) where range1 could be (0..1) and range2 could be (0..255) to processing map.

Clone this wiki locally