(no title)
cycomachead | 3 years ago
* `a ||= b` is not just `a = a || b`, but `a || a = b`
* The distinction between defaults arguments and hash arguments in functional signatures has many edge cases -- but it's much much better in Ruby 3.
* There are still 2 pieces of syntax for hashes (`{a: 1}` and `{:a => 1}`) They are the same.
* Curly bases show up a fair bit for a language that's not a braces language. :) They're in hashes, blocks, and % strings. e.g. `%w{a b c}` is the same as `%w|a b c|`. They're also used in string interpolation, e.g. `"Hello, #{name}"`.
* There are sometimes many ways to do the same thing. There's Procs, blocks, and lambdas. % strings work with many characters.
* `unless` for `if not...` and get wonky.
* Overusing "surprise if" e.g. `do_thing if other_thing` can be hard to read.
* It's so easy to monkey-patch and extend primitive classes, you might not realize when libraries do it.
All of these are features that I actually find nice to use in the right contexts. But they can pop up when you don't expect, and they can definitely make Ruby a challenge to learn. That said with a little discipline (or just a linter ;)), I find a lot of Ruby code a joy to read and write.
IshKebab|3 years ago
Yeah I don't get why you would deliberately make the flow control confusing and backwards like that. Python list comprehensions are the same. They make the information flow backwards.
This also has the effect of making nesting really confusing.
gls2ro|3 years ago
It might be that I am not an english speaker, but for example when I say to someone a list of instructions I usually say it like this:
"Add more water if the dough is dry"
and I don't usually say
"If the dough is dry add more water"
The same for saying for example:
"stop mixing if the dough is starting to tear"
or
"put the bread in the oven when it is ready"
greenpeas|3 years ago
> Yeah I don't get why you would deliberately make the flow control confusing and backwards like that.
I like to use this as function guards, where the first lines in the body of a function can be:
example: https://github.com/rails/rails/blob/f95c0b7e96eb36bc3efc0c5b...mypalmike|3 years ago
do_thing unless other_thing
Which of course you find in many Ruby codebases.
Python list comprehensions seem less painful to me because they read almost like the WHERE clause in SQL simple SELECTs. Definitely not the most straightforward thing one encounters in Python though.
greenpeas|3 years ago
Jabbles|3 years ago