Ruby - Colorado School of Mines
Download
Report
Transcript Ruby - Colorado School of Mines
and other languages…
Array literals/initialization
a = [1,2,3]
a2 = [-10..0, 0..10]
a3 = [[1,2],[3,4]]
a4 = [w*h, w, h]
a5 = []
empty = Array.new
zeros = Array.new(5, 0)
Arrays are heterogeneous
length and size return # of elements
Access beyond end of array returns nil
Elements can be accessed similar to strings
Arrays can be dynamically resized (can assign past the end
of the array)
Use | and & for union and intersection
Compare to Java/C++
words
= %w[here we go again] =>
[‘here’,’we’,’go’,’again’]
Use
<< to append
Useful functionality
alphabet = ('A'..'Z').to_a
alphabet.each {|c| print c }
Not
covered: lots of methods, like clear,
empty?, compact!, sort, sort!, pop, push,
reverse, etc.
Immutable, interned
string (only one copy)
Colon-prefixed, e.g., :one
Commonly used as hash key
Also stores names of classes, methods and
variables in symbol table – more efficient than
storing as string, can be used with reflection
If your code is using a string as a unique
identifier, consider using a symbol instead
Methods available to convert between string
and symbol
Get used to symbols, they’re used a lot
Aka
maps, associative arrays
colors = { :Cyndi => "orange", :Karyl => "purple" }
colors2 = { "Cyndi" => "orange", "Karyl" => "purple" }
colors3 = { Cyndi: "orange", Karyl: "purple" }
puts colors3[:Cyndi]
colors.each do |key, value|
puts "#{key}'s favorite color is #{value}"
end
Best
Not
to use immutable objects as keys
covered: hash codes
Required sometimes, e.g., Python
Hashes supported directly in Perl, Python (dictionary) and
Ruby and in class libraries of Java, C++ and C#
Which
is better if need to access items in
order?
Which is useful for direct access?
Hash: useful for “paired” data
Purpose
• determine if a value is in or out of range
• iteration
Can
be any value that implements <=> function
(like CompareTo… why is this needed?)
1..10 includes 10
1…10 excludes 10
coldwar = 1945..1989
coldwar.include? birthdate.year
(1..3).to_a parentheses required, else just applies to 3
Subrange introduced in Pascal, also used in Modula-2
and Ada. Others?
TrueClass
singleton, write as true
FalseClass singleton, write as false
nil means no value. Test directly (o ==
nil) or with nil?
true
!= 1, false != 0
Compare to Java/C++/C
FixNum. Int
operations that fit in a
machine word.
BigNum. Used for larger ints (FixNum will
be converted automatically)
Float. Floating point values
Complex. real + imaginary
Rational. e.g., 2/3
Language
Concepts
• Array
Heterogeneous?
Array operations
Fixed or dynamic size
• Hash
key restrictions
• Range
operations
• Boolean
0/1?
Ruby
• Arrays
new
each
• Symbols
• Hashes
• Range
• Boolean