Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby 2.0 Walkthrough: The Best Bits
Search
Peter Cooper
February 25, 2013
Programming
67
11k
Ruby 2.0 Walkthrough: The Best Bits
A quick overview of a few of the best bits in Ruby 2.0.
Peter Cooper
February 25, 2013
Tweet
Share
More Decks by Peter Cooper
See All by Peter Cooper
The Future of Code
peterc
0
120
Redis Steady Go (Nov 2012)
peterc
18
1.1k
I Choo-Choo Choose The Web: A History of the Web and JavaScript 1945-2012
peterc
1
170
Redis Steady Go
peterc
31
2.2k
Other Decks in Programming
See All in Programming
DevinとCursorから学ぶAIエージェントメモリーの設計とMoatの考え方
itarutomy
0
150
Azure AI Foundryのご紹介
qt_luigi
1
210
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
280
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
870
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
960
Swiftコンパイラ超入門+async関数の仕組み
shiz
0
180
良いユニットテストを書こう
mototakatsu
11
3.6k
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
mkmk884
6
1.4k
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
390
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
10
5.2k
functionalなアプローチで動的要素を排除する
ryopeko
1
220
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
1.9k
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
170
14k
It's Worth the Effort
3n
183
28k
Side Projects
sachag
452
42k
Making Projects Easy
brettharned
116
6k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Adopting Sorbet at Scale
ufuk
74
9.2k
GitHub's CSS Performance
jonrohan
1030
460k
BBQ
matthewcrist
85
9.4k
Scaling GitHub
holman
459
140k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
A Tale of Four Properties
chriscoyier
157
23k
Transcript
RUBY 2.0 WALKTHROUGH
The Best Bits THE RUBY 2.0 RUNTHROUGH
A sprint, not a stroll
BIG PARTS
Refinements Experimental scope-limited monkey patching
module FloatDivision refine Fixnum do def /(other); self.to_f / other;
end end end class MathFun using FloatDivision def self.ratio(a, b) a / b end end p MathFun.ratio(6, 8) THE OLD IDEA (no longer works)
module FloatDivision refine Fixnum do def /(other); self.to_f / other;
end end end class MathFun using FloatDivision def self.ratio(a, b) a / b end end p MathFun.ratio(6, 8)
module FloatDivision refine Fixnum do def /(other); self.to_f / other;
end end end using FloatDivision class MathFun def self.ratio(a, b) a / b end end p MathFun.ratio(6, 8) Main context is OK
Keyword Arguments definitely a: “pretty”, good: “addition”, to: “the language”
def some_method(options = {}) defaults = { x: 10, y:
20, z: 30 } options = defaults.merge(options) p options end some_method x: 1, y: 2
def some_method(x: 10, y: 20, z: 30) p x, y,
z end some_method x: 1, y: 2, z: 3
def some_method(x: 10, **rest) p x, rest end some_method x:
1, y: 2, z: 3, c: “x”
Enumerator::Lazy Lazy enumeration, finally made easy.
infinite_range = (0..Float::INFINITY) infinite_range.select { |num| num % 74 ==
0 }
infinite_range = (0..Float::INFINITY) e = infinite_range.lazy.select { |num| num %
74 == 0 } puts e.next puts e.next puts e.next
Module#prepend
module Bar def my_method "inside the module" end end class
Foo include Bar def my_method "inside the class" super end end x = Foo.new p x.my_method 1 2
module Bar def my_method "inside the module" super end end
class Foo prepend Bar def my_method "inside the class" end end x = Foo.new p x.my_method 1 2
INCLUDE PREPEND Foo class Bar module x object NEITHER Foo
class x object Object class Object class Foo class Bar module x object Object class
DETAILS
ABI Breakage Changes to the Application Binary Interface
Regex engine changed From Oniguruma to Onigmo
%{this\r\nis\n\ncool\vhello!}.gsub(/\R/, '')
RubyGems 2.0 Lots of refactoring, initial support for stdlib gemification,
gem search is now remote, arbitrary metadata support & more.
RDoc 4.0 Adds Markdown support & ri can now show
pages (e.g. READMEs with ri rdoc:README)
%i and %I To form arrays of symbols, like %w
does for words and arrays
%i{a b c} == [:a, :b, :c] %I{ #{(rand(26) +
65).chr} } == [:Y]
UTF-8 is default source encoding No more # encoding: utf-8
(if you don’t want)
Bitmap garbage collector Faster, more efficient
CSV.load and CSV.dump gone Not considered such a good idea
in light of the early 2013 YAML vulnerabilities
String#chars, #lines, #codepoints, etc. Now return arrays rather than enumerators.
Use #each_char, #each_line, etc. instead if you need enumerators.
TracePoint A more object oriented alternative to set_trace_func
tracer = lambda do |event, file, line, id, binding, klass|
to_display = [event, File.basename(file), line, klass, id] puts "%10s in %s at line %-2d %s:%s" % to_display end set_trace_func tracer # .. normal code here ..
tracer = TracePoint.new do |tp| to_display = [tp.event, File.basename(tp.path), tp.lineno,
tp.defined_class, tp.method_id] puts "%10s in %s at line %-2d %s:%s" % to_display end tracer.enable # .. normal code here ..
respond_to? respond_to? against a protected method now returns false
Method transplants with define_method Now accepts UnboundMethods
module M def foo; "foo"; end end define_method :foo, M.instance_method(:foo)
p foo
Array#bsearch Range#bsearch Binary search for monotonic collections
[1, 4, 9, 13, 14, 22, 40].bsearch { |i| p
i; i >= 6 } # 13 # 4 # 9 # => 9 (1..1000).bsearch { |i| i > 372 }
__dir__ Like __FILE__ but for the current source file’s directory
Equivalent to File.dirname(File.realpath(__FILE__))
to_h and Hash() A new convention. The hash equivalent to
#to_a A key use is with Struct and OpenStruct
User = Struct.new(:name, :age, :status) me = User.new("Peter", 31, :admin)
me.to_h ENV.to_h Hash(nil) # => {} Hash([]) # => {}
FIN https://cooperpress.com/