CocoaDev

Edit AllPages

http://rubycocoa.sourceforge.net/doc/

http://www.rubycocoa.com

Ruby is a dream language to write Cocoa code in – you get automatic garbage collection and an algol syntax, eg:

box = [[NSBox alloc] initWithFrame:NSZeroRect]; [box setEnabled:NO];

would be written in Ruby as:

box = NSBox.alloc.initWithFrame(NSZeroRect)

box.setEnabled(false)

And all of the benefits of Ruby, plus automatic conversion of data types between Foundation and Ruby’s core data types (NSDictionary <-> Ruby hash, etc). Both Ruby and Objective-C are derived from SmallTalk, so they’re more culturally compatible than (say) Ruby and C++.

[I deleted the old blurb copied from the web site – go there for a more recent version].

Shall we start a list of applications written with RubyCocoa? I’ll plug mine: RubyCocoa Test Runner A graphical TestRunner for Ruby’s Test::Unit. It provides an interface similar to jUnit’s for running ruby unit tests. http://rubyforge.org/projects/crtestrunner/ –StevenNewton


Why is this a “dream” syntax? How do you translate [myObject doSomethingWithWeight:a arterySize:b]?

myObject.doSomethingWithWeight_arterySize(a,b)

or (Ruby has more than one way to do it)

myObject.doSomethingWithWeight(a, :arterySize, b)

One thing is you don’t have to type ‘self’ so much. self.myMethod can be written as simply myMethod.


At the moment, I agree that Ruby’s way is less readable. They’re actually working to correct this in Ruby 2, and the proposed syntax that I’ve heard is actually clearer than ObjC’s: myLad.kiss(kissee:girl, withLipstick:false), with the arguments able to go in any order as long as the argument’s id is included.

Hey! Ruby 2 stole my syntax! I was (and still am) planning to use that basic idea for method calls in my programming language, as soon as I get around to writing it. :) –JediKnil

Yes, because dot notation is quite unique to you and Ruby. Damn those thieves! ;-)

dot notation sux0rs

Umm, no, I meant passing named arguments. Which, as I discovered, also exists elsewhere, but not in many OO languages. –JediKnil


To a limited extent, named arguments exist in C# and VB (both classic and .NET, IIRC.)