Skip to content

Instantly share code, notes, and snippets.

@luislavena
Created December 2, 2017 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luislavena/4096693021ca38f6be4c7539625716a3 to your computer and use it in GitHub Desktop.
Save luislavena/4096693021ca38f6be4c7539625716a3 to your computer and use it in GitHub Desktop.
require "benchmark"
class Foo
getter query : String?
def initialize(@query)
end
def method1
@query if @query && !@query.try(&.empty?)
end
def method2
if (query = @query) && !query.empty?
query
end
end
def method3
@query.try do |query|
query unless query.empty?
end
end
end
empty_query = Foo.new("")
with_query = Foo.new("something")
without_query = Foo.new(nil)
pp empty_query.method1
pp empty_query.method2
pp empty_query.method3
pp with_query.method1
pp with_query.method2
pp with_query.method3
pp without_query.method1
pp without_query.method2
pp without_query.method3
puts "-" * 10
Benchmark.ips do |x|
x.report("empty_query.method1") { empty_query.method1 }
x.report("empty_query.method2") { empty_query.method2 }
x.report("empty_query.method3") { empty_query.method3 }
end
puts "-" * 10
Benchmark.ips do |x|
x.report("with_query.method1") { with_query.method1 }
x.report("with_query.method2") { with_query.method2 }
x.report("with_query.method3") { with_query.method3 }
end
puts "-" * 10
Benchmark.ips do |x|
x.report("without_query.method1") { without_query.method1 }
x.report("without_query.method2") { without_query.method2 }
x.report("without_query.method3") { without_query.method3 }
end
empty_query.method1 # => nil
empty_query.method2 # => nil
empty_query.method3 # => nil
with_query.method1 # => "something"
with_query.method2 # => "something"
with_query.method3 # => "something"
without_query.method1 # => nil
without_query.method2 # => nil
without_query.method3 # => nil
----------
empty_query.method1 495.7M ( 2.02ns) (± 1.36%) fastest
empty_query.method2 495.59M ( 2.02ns) (± 1.27%) 1.00× slower
empty_query.method3 495.47M ( 2.02ns) (± 1.25%) 1.00× slower
----------
with_query.method1 496.48M ( 2.01ns) (± 1.13%) 1.00× slower
with_query.method2 494.55M ( 2.02ns) (± 1.82%) 1.01× slower
with_query.method3 497.21M ( 2.01ns) (± 1.30%) fastest
----------
without_query.method1 494.91M ( 2.02ns) (± 2.06%) 1.00× slower
without_query.method2 496.92M ( 2.01ns) (± 0.84%) 1.00× slower
without_query.method3 497.06M ( 2.01ns) (± 0.85%) fastest
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment