Skip to content

Commit

Permalink
Extend safe navigation docs about long &. chains
Browse files Browse the repository at this point in the history
  • Loading branch information
fatkodima committed Oct 20, 2024
1 parent c72e8dc commit b845209
Showing 1 changed file with 7 additions and 5 deletions.
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

0 comments on commit b845209

Please sign in to comment.