Ruby entered my brain in 2004 when I bought a book about it. I was curious but obviously not curious enough to learn it so I basically don’t know a shit anymore and I’m sure I don’t even read the whole book (as always, hello scala!).
However, ruby is not so special if you already know another programming or scripting language and I started becoming interested again, so here we are:
assigning variables
Oh, see, converting between string and integer values is actually very easy. Just append .to_i or .to_s and you are done.
Arrays
Add elements to your array
getting user input
reading a file
writing to a file
It asks for your first name and writes it to /tmp/foobar. “cat” the file after executing this script. Your name will be in it. Easy peasy!
simple functions / methods
simple prototype based object orientation
executing this script could look like this:
a simple class
a little more advanced example of a class
The variables with the @-sign are properties or instance variables that are available inside the class. The example demonstrates their state inside the class. The “initialize” method is the constructor and is called whenever you create a new instance “audi = Car.new”.
get and setter methods
You can shorten that:
And even shorter…
“attr_reader :mileage” unfolds to:
“attr_writer :mileage” unfolds to
“attr_accessor :mileage” unfolds to
Inheritance
Outputs “awd”.
Inheritance with constants
However, ruby is not so special if you already know another programming or scripting language and I started becoming interested again, so here we are:
assigning variables
my_super_cool_variable = "some string value" puts my_super_cool_variable print "6^2 = "+(6**2).to_s
Arrays
cars = ["Audi","BMW","Mercedes","Lexus"] p cars puts cars[0] puts cars puts cars.length puts cars.reverse puts cars[0..cars.length] for run in (0..cars.length) puts cars[run] end
cars = ["Audi","BMW","Mercedes","Lexus"] p cars cars << "Saab" p cars
getting user input
car = gets print car
reading a file
file_contents = File.read("/etc/resolv.conf") print file_contents
writing to a file
print "enter your first name: " file_handle = File.new("/tmp/foobar", "w") first_name = gets file_handle.puts first_name file_handle.close
simple functions / methods
def foobar puts "foobar" end foobar # prints "foobar\n"
def greet(firstname, lastname) puts "Welcome "+firstname+" "+lastname end greet("Andreas","Schipplock")
def greet(*family) p family end greet("Oma","Opa","Tante","Cousine")
simple prototype based object orientation
car = Object.new def car.drive puts "driving along the road" end def car.speedup(speed) puts "speeding up to "+speed.to_s+" km/h" end def car.mileage return 120000 end def car.started? return false end def car.id return self.object_id end def car.add_features(*features) p features # p = print for arrays end def car.default_climate_value(temperature=20) return temperature end car.drive car.speedup(140) puts car.mileage.to_s puts car.started?.to_s puts car.id.to_s car.add_features("air cooling", "automatic transmission", "foobar") puts car.default_climate_value.to_s puts car.default_climate_value(25).to_s if car.respond_to?("turn_turbo_on") car.turn_turbo_on else puts "sorry, this car doesn't have a turbo" end print "what do you want the car to do now? -> " method = gets.chomp if car.respond_to?(method) car.send(method) else puts "sorry, the car can't do that" end
andreas_schipplock@andreas:~/projects/ruby$ ruby1.9.1 c2f.rb driving along the road speeding up to 140 km/h 120000 false 74485320 ["air cooling", "automatic transmission", "foobar"] 20 25 sorry, this car doesn't have a turbo what do you want the car to do now? -> drive driving along the road andreas_schipplock@andreas:~/projects/ruby$
a simple class
class Car def speedup return true end end audi = Car.new if audi.speedup puts "yo, dawg, I'm speeding up" else puts "eh, mother*, I'm an old lady" end
class Car def initialize(build_year,mileage) @build_year = build_year @mileage = mileage @ready = true end def speedup(speed) @current_speed = speed end def current_speed return @current_speed end def ready? return @ready end def age return (Time.new).year - @build_year end def mileage return @mileage end end audi = Car.new(1989,245000) if audi.ready? audi.speedup(140) puts audi.current_speed audi.speedup(220) puts audi.current_speed puts "age: "+audi.age.to_s puts "mileage: "+audi.mileage.to_s end
get and setter methods
class Car def initialize(mileage) @mileage = mileage end def mileage=(miles) @mileage = miles end def mileage @mileage end end audi = Car.new(245000) puts "old mileage: "+audi.mileage.to_s audi.mileage = 246000 puts "new mileage: "+audi.mileage.to_s
You can shorten that:
class Car attr_reader :mileage attr_writer :mileage def initialize(mileage) @mileage = mileage end end audi = Car.new(245000) puts "old mileage: "+audi.mileage.to_s audi.mileage = 246000 puts "new mileage: "+audi.mileage.to_s
And even shorter…
class Car attr_accessor :mileage def initialize(mileage) @mileage = mileage end end audi = Car.new(245000) puts "old mileage: "+audi.mileage.to_s audi.mileage = 246000 puts "new mileage: "+audi.mileage.to_s
def mileage @mileage end
def mileage=(miles) @mileage = miles end
def mileage=(miles) @mileage = miles end def mileage @mileage end
Inheritance
class Car def type @type = "rwd" end end class Audi < Car def type @type = "awd" end end my_car = Audi.new puts my_car.type
Inheritance with constants
class Car TYPES = ["AWD", "RWD", "FWD"] def type @type = self::TYPES[1] end end class Audi < Car def type @type = Car::TYPES[0] end end my_car = Audi.new puts my_car.type