I Love Ruby
Transcript of I Love Ruby
![Page 1: I Love Ruby](https://reader036.fdocuments.in/reader036/viewer/2022080211/5590cfd31a28ab07398b46d1/html5/thumbnails/1.jpg)
Document generated by Confluence on Sep 18, 2008 09:45 Page 1
Keith Bennett : What I Love About Ruby
This page last changed on Sep 17, 2008 by kbennett.
What I Love About Ruby
Keith Bennett
kbennett .at. bbsinc .dot. biz
Simplicity of Creating Instance Variables with Accessors and Mutators in Ruby
class Y attr_accessor :aend
...creates an instance variable a, and an accessor and mutator.
Concise Idiom for Conditional (and Lazy) Initialization
@var ||= some_expensive_initialization
...means if var is undefined, define it, and if nil, do the initialization.
Numeric Constants Thousands Separators Supported
irb(main):002:0> 1_000_000=> 1000000irb(main):003:0> 1_000_000.class=> Fixnum
Actually, all underscores are stripped, even if they do not separate thousands.
Shell Integration
A shell command enclosed in backticks will be run, and the value returned by the backticked commandwill be the text the command sent to stdout:
irb(main):008:0> `mkdir a b c d`=> ""irb(main):009:0> `touch b/foo d/foo`=> ""irb(main):010:0> emptydirs = `find . -type d -empty`=> "./a\n./c\n"irb(main):011:0> puts emptydirs./a./c=> nil
Logical Syntax:
1.upto(10) { |i| puts i }
(100..200).each { |n| puts n }
![Page 2: I Love Ruby](https://reader036.fdocuments.in/reader036/viewer/2022080211/5590cfd31a28ab07398b46d1/html5/thumbnails/2.jpg)
Document generated by Confluence on Sep 18, 2008 09:45 Page 2
vs., in Java, for the first example:
for (int i = 0; i <= 10; i++) { System.out.println(i) ;}
Ability to Specify Arrays (and Hashes) as Literals
and the Ease of Iterating Over Them
irb(main):018:0> ['collie', 'labrador', 'husky'].each { |breed| puts "Hi, I'm a #{breed}, and I know how to bark."}Hi, I'm a collie, and I know how to bark.Hi, I'm a labrador, and I know how to bark.Hi, I'm a husky, and I know how to bark.=> ["collie", "labrador", "husky"]
Also:
%w(collie labrador husky)
can be used to create the array instead of:
['collie', 'labrador', 'husky']
A Hash:
irb(main):063:0> favorites = { :fruit => :durian, :vegetable => :broccoli }=> {:fruit=>:durian, :vegetable=>:broccoli}
Ranges
water_liquid_range = 32.0...212.0=> 32.0...212.0irb(main):010:0> water_liquid_range.include? 40=> trueirb(main):011:0> water_liquid_range.include? -40=> false
Note: Ranges are not arrays; any number n, not just integers, such that 32.0 <= n < 212.0, is includedin the range.
Converting Ranges to Arrays:
irb(main):043:0> ('m'..'q').to_a=> ["m", "n", "o", "p", "q"]
Blocks Used to Automatically Close Resources
File.open 'x.txt', 'w' do |file| file << 'Hello, world'
![Page 3: I Love Ruby](https://reader036.fdocuments.in/reader036/viewer/2022080211/5590cfd31a28ab07398b46d1/html5/thumbnails/3.jpg)
Document generated by Confluence on Sep 18, 2008 09:45 Page 3
end
The file is automatically closed after the block completes. If no block is provided, then the open functionreturns the file instance:
irb(main):001:0> f = File.open 'x.txt', 'w'=> #<File:x.txt>irb(main):002:0> f << "Pleaaase, delete me, let me go..."=> #<File:x.txt>irb(main):003:0> f.close=> nilirb(main):004:0> puts IO.read('x.txt')Pleaaase, delete me, let me go...=> nil
Simple File Operations
file_as_lines_array = IO.readlines 'x.txt'file_as_single_string = IO.read 'x.txt'
Clean and Simple Syntax
puts Array.instance_methods.sort
Regular Expressions
irb(main):027:0> 'ruby' =~ /ruby/=> 0irb(main):028:0> 'rubx' =~ /ruby/=> nilirb(main):029:0> 'ruby' =~ /Ruby/=> nilirb(main):030:0> 'ruby' =~ /Ruby/i=> 0
Arrays:
irb(main):001:0> nums = [1,2,3,4,5]=> [1, 2, 3, 4, 5]irb(main):006:0> nums.include? 3=> trueirb(main):004:0> nums.collect { |n| n * n }=> [1, 4, 9, 16, 25]irb(main):002:0> nums.reject { |n| n % 2 == 0}=> [1, 3, 5]irb(main):003:0> nums.inject { |sum,n| sum += n }=> 15irb(main):052:0\* distances_in_miles = [10, 50]=> [10, 50]irb(main):053:0> distances_in_km = distances_in_miles.map { |n| n * 9.0 / 5.0 }=> [18.0, 90.0]irb(main):016:0\* twos = (0..10).map { |n| n * 2 }=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]irb(main):017:0> fours = (0..5).map { |n| n * 4 }=> [0, 4, 8, 12, 16, 20]irb(main):018:0> twos - fours=> [2, 6, 10, 14, 18]irb(main):019:0> twos & fours
![Page 4: I Love Ruby](https://reader036.fdocuments.in/reader036/viewer/2022080211/5590cfd31a28ab07398b46d1/html5/thumbnails/4.jpg)
Document generated by Confluence on Sep 18, 2008 09:45 Page 4
=> [0, 4, 8, 12, 16, 20]irb(main):020:0> fours * 2=> [0, 4, 8, 12, 16, 20, 0, 4, 8, 12, 16, 20]irb(main):021:0> twos + fours=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 0, 4, 8, 12, 16, 20]
Built-in String Operations
• Case Conversions, Capitalization• Left, Right, Sub• Strip, Justify, Center• Search and Replace (gsub)• Insert, Delete