top | item 44658763

(no title)

aeonflux | 7 months ago

Types are helpful in large codebases, but in Web Apps they tend to get into the way more than they help. You can still use semi-typed constructs in Ruby, but you have the freedom to choose where you need them.

After moving to writing web in Go (from Ruby) I am still baffled how much more boiler plate there is and how much slower things move because of this. Types are great when you want to refactor some things, but thats just part of the job.

In Ruby I loved how can you just quickly jump into REPL or just do inline breakpoint to inspect state: `scope.map(&:names).last.tally.sort_by(&:last).reverse.first(10)`

Something like this is such a chore in Go that I simply skip it more often than not.

> it uses a lot of special characters, which makes writing the code slower

I don't get this part. What special characters?

discuss

order

oleksandr_dem|7 months ago

Unfortunately I don't have much experience with Go, I did try it for the sake of trying it, and I see your point, it is a bit more complicated to write code compared to JS/TS (two languages I know very well) or even Java (disclaimer: I think Java sucks).

> I don't get this part. What special characters?

For example let's look at this code:

```

class ProductsController < ApplicationController before_action :set_product, only: %i[ show edit update destroy ]

  def index
    @products = Product.all
  end
...

```

You can see a bunch of special characters: < : , % [] @

For example, if I wanted to write the same code in Typescript, based on my setup I might just need do something like this:

```

instance.get("/products", () => ProductsRepository.find());

```

Where instance is my router instance (fastify, express, whatever) and ProductsRepository is a TypeORM repository. My before_action might just be a middleware I pass to the callbacks chain or register as global middleware

Lio|7 months ago

You're mostly comparing frameworks here. For example, using the Roda framework instead of Rails you can define a route like this:

  r.get "products" { ProductsRepository.all }
which is pretty close to your Express example.

You don't say what set_product should do but with any Rack application like Roda or Rails you can also set middleware as you suggest for Express.

With regard for special characters vs reserved keywords, that seems to be mostly about personal preference and familiarity.

e.g. I know that in a class declarion in Ruby < means the same thing as extends in JavaScript. I don't really notice the difference day to day.

Same for @products vs this.products. This doesn't seem like a conceptually big differnce to me.

As for %i[] to define an array of symbols, the typescript equivalent would be:

  const symbols: symbol[] = [Symbol("show"), Symbol("edit"), Symbol("update"), Symbol("destroy")];
Personally I always use [:show, :edit, :update, :destroy], it's more obvious IMHO. I use Rubocop to autoconvert that in any code I inherit.

What makes me love Rails is all the little trivial methods like one to quickly format arrays into gramatically correct sentences. Or the Array() wrap method when dealing with APIs.

Or the way Rails handles dates and times like 1.business_day.from_now

Or any number of other little utilities that are easy enough to write yourself but add friction when they're missing.

Rails gives me a well supported fullstack of what I need and I know that it and Ruby are constanly improving because its backed by some massive companies.

I don't think there's any need for you to adopt it though. That podcast is just about why DHH loves Ruby and Rails that doesn't invalidate what you're already happy with.

There is more than one way to do things.