Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend safe navigation docs about long &. chains #947

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -325,32 +325,34 @@ foo&.bar

=== Safe navigation

Avoid chaining of `&.`. Replace with `.` and an explicit check.
Avoid long chains of `&.`. The longer the chain is, the harder it becomes to track what
on it could be returning a `nil`. Replace with `.` and an explicit check.
E.g. if users are guaranteed to have an address and addresses are guaranteed to have a zip code:

[source,ruby]
----
# bad
user&.address&.zip
user&.address&.zip&.upcase

# good
user && user.address.zip
user && user.address.zip.upcase
----

If such a change introduces excessive conditional logic, consider other approaches, such as delegation:
[source,ruby]
----
# bad
user && user.address && user.address.zip
user && user.address && user.address.zip && user.address.zip.upcase

# good
class User
def zip
address&.zip
end
end
user&.zip
user&.zip&.upcase
----

=== Spaces and Braces [[spaces-braces]]

No spaces after `(`, `[` or before `]`, `)`.
Expand Down