• @marcos@lemmy.world
      link
      fedilink
      109 months ago

      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.

        • @marcos@lemmy.world
          link
          fedilink
          29 months ago

          People mostly refrain from using it.

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

      • @exussum@lemmy.world
        link
        fedilink
        19 months ago

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

    • V H
      link
      fedilink
      19 months ago

      Ruby cribbed a whole lot of syntax from Perl from the very beginning. Most of the rest comes from Smalltalk, but Ruby got it’s multitude of two character “$” variables from Perl, it’s autosplit mode (-a -n -p switches, letting Ruby, like Perl “emulate Awk”), it’s regexp match captures going into $1, $2 etc. from Perl.

  • Eager Eagle
    link
    fedilink
    English
    4
    edit-2
    9 months ago

    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.

    • @exussum@lemmy.world
      link
      fedilink
      09 months ago

      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.

      • Eager Eagle
        link
        fedilink
        English
        19 months ago

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

    • @colonial@lemmy.world
      link
      fedilink
      129 months ago

      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™.

      • V H
        link
        fedilink
        2
        edit-2
        9 months ago

        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)

    • Eager Eagle
      link
      fedilink
      English
      29 months ago

      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

  • @Knusper@feddit.de
    link
    fedilink
    29 months ago

    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.