Skip to content

Instantly share code, notes, and snippets.

@zverok
Created July 20, 2023 20:09
Show Gist options
  • Save zverok/c0de06b1d9b1b4b721220015f395e136 to your computer and use it in GitHub Desktop.
Save zverok/c0de06b1d9b1b4b721220015f395e136 to your computer and use it in GitHub Desktop.

Some small additions/comments to an article by Kevin Newton "Ruby operators"

% - The modulo operator. This is usually only found on numeric types.

And Ranges :)

(1..30) % 5
# => ((1..30).%(5)) -- an ArithmeticSequence

!= - The inequality operator. This is found on almost all types, and is used to check basic inequality.

Maybe deserves mentioning that it can be defined individually or, if not, (like !~) breaks down to negating ==.

=== - The case equality operator. This method is used as the backend for case statements.

Also grep and any?/all?/none?.

[] - The element reference operator.

Maybe these usages deserve mentioning:

  • Array::[]
  • Proc#[]

Truthiness operators

My favorite pet peeve :) (1, 2)

I believe they deserve splitting into "boolean arithmetics" operators (&&/||) and "control flow" operators (and/or), and I don't think the latter deserve being described as "alias with no difference," as they have completely different precedence, and (as you most probably know :)) in allowed to use by parser in different contexts:

# allowed
foo = fetch_foo or return
@error = find_error and raise

# not allowed
foo = fetch_foo || return
@error = find_error && raise

(I believe "control flow and/or" were inherited from Perl.)

I would honestly say that &&/|| deserve to be in their own section (boolean math), while and/or's deserved place in this "Control flow" section.

Also, it seems like case is missing from "Conditional operators" section, or you don't consider it an "operator" (unlike if; I am not sure if the if and friends should be treated as "opertors" either, though).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment