ruby struct

14
Ruby’s Struct Class Ken Collins metaskills.net typdef struct { int id; char *name; } Awesome; Monday, November 14, 11

Upload: ken-collins

Post on 03-Jul-2015

2.075 views

Category:

Technology


1 download

DESCRIPTION

Using Ruby's Struct Class.

TRANSCRIPT

Page 1: Ruby struct

Ruby’s Struct Class

Ken Collinsmetaskills.net

typdef struct { int id; char *name; } Awesome;

Monday, November 14, 11

Page 2: Ruby struct

A Struct is a convenient way to bundle a number of attributes

together, using accessor methods, without having to

write an explicit class.

Monday, November 14, 11

Page 3: Ruby struct

Ad Hoc ExampleLanguage = Struct.new(:name, :class_based)

ruby = Language.new "Ruby", truejs = Language.new "JavaScript", falseobjc = Language.new "Objective-C"

ruby # => #<struct Language name="Ruby", class_based=true>js # => #<struct Language name="JavaScript", class_based=false>

ruby.class_based # => truejs.class_based # => false

objc.class_based = trueobjc.class_based # => true

Monday, November 14, 11

Page 4: Ruby struct

Sub Class Example

class MyObject < Struct.new(:id, :name, :key) end

o = MyObject.new # => #<struct MyObject id=nil, name=nil, key=nil>

o.id # => nilo.name # => nil

o.id = 12345o.name = "Test Object"

o # => #<struct MyObject id=12345, name="Test Object", key=nil>

Monday, November 14, 11

Page 5: Ruby struct

But Why Structs?class MyObject attr_accessor :id, :name, :key def initialize(*args) @id, @name, @key = args end end

o = MyObject.new 12345, "Test Object"

o.id # => 12345o.name # => "Test Object"

Monday, November 14, 11

Page 6: Ruby struct

But Why Structs?

Monday, November 14, 11

Page 7: Ruby struct

But Why Structs?Convenient Alternative.

Monday, November 14, 11

Page 8: Ruby struct

But Why Structs?Convenient Alternative.Attribute Methods With [] & []= Can Be Powerful. Not ivar based.

Monday, November 14, 11

Page 9: Ruby struct

But Why Structs?Convenient Alternative.Attribute Methods With [] & []= Can Be Powerful. Not ivar based.Easy Enumeration Of Attribute Data.

Monday, November 14, 11

Page 10: Ruby struct

But Why Structs?Convenient Alternative.Attribute Methods With [] & []= Can Be Powerful. Not ivar based.Easy Enumeration Of Attribute Data.Default Equality On All Attributes.

Monday, November 14, 11

Page 11: Ruby struct

Attribute Accessorsclass Person < Struct.new(:name) def name parts = self[:name].to_s.split(' ') capped_parts = parts.map { |x| x.capitalize } capped_parts.join(' ') end end

p = Person.new "KEN coLLins"p.name # => "Ken Collins"p[:name] = 'mETAskiLLs'p.name # => "Metaskills"

Monday, November 14, 11

Page 12: Ruby struct

Easy EnumerationCustomer = Struct.new(:name, :address, :zip)

joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)

joe.each { |x| x } # >> Joe Smith# >> 123 Maple, Anytown NC# >> 12345

joe.each_pair { |name, value| puts("#{name} => #{value}") }# >> name => Joe Smith# >> address => 123 Maple, Anytown NC# >> zip => 12345

Monday, November 14, 11

Page 13: Ruby struct

Default Attribute Equality

Customer = Struct.new(:name, :address, :zip)

joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)joejr = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)jane = Customer.new("Jane Doe", "456 Elm, Anytown NC", 12345)

joe == joejr #=> truejoe == jane #=> false

Monday, November 14, 11

Page 14: Ruby struct

Thanks!Ken Collins

metaskills.net

Monday, November 14, 11