Remix.run Logo
slightwinder 8 days ago

> Is this what idiomatic Python has become?

What do you mean? Python has always been that way. "Explicit is better than implicit. [..] Readability counts." from the Zen of python.

> By contrast, here's the equivalent Ruby:

Which is awful to read. And of course you could write it similar short in python. But it is not the purpose of a documentation to write short, cryptic code.

pansa2 8 days ago | parent [-]

> Readability counts

Almost all Python programmers should be familiar with list comprehensions - this should be easy to understand:

    parts = [... if isinstance(item, Interpolation) else ... for item in template]
Instead the example uses an explicit loop, coupled with the quirks of the `match` statement. This is much less readable IMO:

    parts = []
    for item in template:
        match item:
            case str() as s:
                parts.append(...)
            case Interpolation(value, _, conversion, format_spec):
                parts.append(...)
> [Ruby] is awful to read

I think for someone with a basic knowledge of Ruby, it's more understandable than the Python. It's a combination of basic Ruby features, nothing advanced.

I don't particularly love Ruby's syntax either, though - I think the ideal implementation would be something like:

    fn stringify(item) =>
        item.is_a(Interpolation) then
            item.value.convert(item.conversion).format(item.format_spec)
        else item.to_string()

    fn f(template) => template.map(stringify).join()
slightwinder 7 days ago | parent [-]

> Almost all Python programmers should be familiar with list comprehensions

Being familiar doesn't mean it's readable. They can be useful, but readability is usually not on that list.

> I think for someone with a basic knowledge of Ruby, it's more understandable than the Python.

I know both, and still consider it awful. Readability is not about making it short or being able to decipher it.