12 points

Is ruby the new Perl?

permalink
report
reply
10 points

That deserves an “always has been” meme… But IMO, Ruby outperled Perl since the beginning.

Perl doesn’t let you redefine the syntax so that you can write the same program multiple ways. All it does is to encourage multiple programs to have the same meaning.

permalink
report
parent
reply
4 points

I never looked at Ruby, but that doesn’t seem like it would be great for readability (although maybe productivity).

permalink
report
parent
reply
3 points

People mostly refrain from using it.

Much like people used to create an idiom in Perl and stick to it.

permalink
report
parent
reply
1 point

And lets you easily write metal languages due to the way you can pass around blocks. Think configuration as code type stuff.

permalink
report
parent
reply
4 points
*

The liberty to not name things that are obvious.

and that’s yet another way to end up with hard to read code.

Variables hold values that have meaning. Learn how to name things and you’ll write good code.

permalink
report
reply
0 points

This makes me want to write a function for you to add to numbers where the variables are leftumber and rightnumber, instead of x and y.

permalink
report
parent
reply
1 point

if “left” and “right” were relevant for addition, they would indeed be better names

permalink
report
parent
reply
1 point

Are you against using a single letter variable like e for element in iterating over things?

permalink
report
parent
reply
3 points

Damn, I wish rust had that

permalink
report
reply
12 points

It wouldn’t be as relevant, since passing a function or method instead of a closure is much easier in Rust - you can just name it, while Ruby requires you to use the method method.

So instead of .map(|res| res.unwrap()) you can do .map(Result::unwrap) and it’ll Just Work™.

permalink
report
parent
reply
4 points

Except when Type::Method takes a reference, then it doesn’t just work

permalink
report
parent
reply
-1 points
*

Well, that’s to be expected - the implementation of map expects a function that takes ownership of its inputs, so you get a type mismatch.

If you really want to golf things, you can tack your own map_ref (and friends) onto the Iterator trait. It’s not very useful - the output can’t reference the input - but it’s possible!

I imagine you could possibly extend this to a combinator that returns a tuple of (Input, ref_map'd output) to get around that limitation, although I can’t think of any cases where that would actually be useful.

permalink
report
parent
reply
1 point
*

In the case of your example we’d do .map(&:unwrap) in Ruby (if unwrap was a method we’d actually want to call)

Notably, these are not the cases _1 and _2 etc are for. They are there for the cases that are not structurally “call this method on the single argument to the block” e.g. .map{ _1 + _2 } or .map { x.foo(_1) }

(_1 is reasonable, because iterating over an enumerable sequence makes it obvious what it is; _1 and _2 combined is often reasonable, because e.g. if we iterate over a key, value enumerable, such as what you get from enumerating a Hash, it’s obvious what you get; if you find yourself using _3 or above, you’re turning to the dark side and should rethink your entire life)

permalink
report
parent
reply
11 points

I’m glad it doesnt.

permalink
report
parent
reply
3 points

Swift does, though using the dollar sign rather than underscores

permalink
report
parent
reply
1 point

I sincerely doubt Rust would ever add something like this.

permalink
report
parent
reply
2 points

I do think the unnumbered variant of such anonymous parameters is useful, if you’ve got a team of devs that knows not to misuse them.

In particular, folks who are unexperienced will gladly make massive multi-line transformations, all in one step, and then continue blathering on about it or similar, as if everyone knew what they were talking about and there was no potential for ambiguity.

This is also particularly annoying, because you rarely read code top-to-bottom. Ideally, you should be able to jump into the middle of any code and start reading, without having to figure out what the regional abbreviations or it mean.

permalink
report
reply
1 point

Is it just me or does it feel kinda unclean for it to just support 1 through 9?

permalink
report
reply
2 points

tbf positional arguments are already bad enough. Now if you’re using over 9 positional args… just take a break, go for a short walk, and maybe you’ll come back with a better plan

permalink
report
parent
reply
1 point
*

I mean 4 is probably too many, 8 definitely is, but also what about splat-args like zip or min. Why not stop at 4? Why not stop at 8 since its a power of two? Any hand-picked limit just feels pretty bleh to me. Either support everything or dont support it at all IMO

permalink
report
parent
reply
1 point
*

Why overthink it. Stopping at the highest single digit decimal number is a fine choice. I’m more unsettled by the sequence starting at _1 instead of _0 if anything.

permalink
report
parent
reply
1 point

If you need a lambda with 10 parameters you might consider aggregating those parameters into a struct or a hash instead. lambda are meant to be short functions

permalink
report
parent
reply

Programming

!programming@programming.dev

Create post

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person’s post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you’re posting long videos try to add in some form of tldr for those who don’t want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



Community stats

  • 3.1K

    Monthly active users

  • 1.8K

    Posts

  • 30K

    Comments