From d3ac3327731f2e1c2f4ab648a1bece91238758c6 Mon Sep 17 00:00:00 2001 From: Sam Bostock Date: Mon, 21 Sep 2020 13:17:34 -0400 Subject: [PATCH] Add rule against memoizing possibly falsely values "Avoid using `||=` to initialize boolean variables" provides a good explanation about `false` not being safe to use with `||=`, but cases where the value can be `nil` (e.g. not found) should also be considered. --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 00055a06..801b76e9 100755 --- a/README.md +++ b/README.md @@ -373,6 +373,21 @@ documentation](https://docs.rubocop.org/rubocop/configuration.html#inheriting-co @enabled = true unless defined?(@enabled) ~~~ +* Avoid using `||=` to memoize possibly falsey (`false` or `nil`) values. + + ~~~ ruby + # bad - will repeat lookup each time if it returns nil + def existing_record + @existing_record ||= expensive_lookup_that_might_return_nil + end + + # good + def existing_record + return @existing_record if defined?(@existing_record) + @existing_record = expensive_lookup_that_might_return_nil + end + ~~~ + * Avoid spaces between a method name and the opening parenthesis. * Prefer the lambda literal syntax over `lambda`.