Hacker News new | ask | show | jobs
by thomasahle 4210 days ago
For all the comments Go gets on its typesystem, I suppose

    	if rt, ok := dst.(ReaderFrom); ok {
    		return rt.ReadFrom(src)
    	}
Isn't the most terrible way anyone has seen pattern matching implemented.

At least it is better than Java's instanceof + cast.

4 comments

For even more similar look to pattern matching look at Go's type switch.

    switch i.(type) {
        case OptionalInterface1:
           // do some extra thing we allow
        case OptionalInterface2:
           // do some other extra thing we allow
    }
It's really good when you have a set of mutually exclusive interfaces or types.
You can do a passable impression of sum types that way too: http://www.jerf.org/iri/post/2917
You should use switch v := i.(type) so you can access v as the type in a case.
At least it is better than Java's instanceof + cast.

Except that in a language with generics you have to cast far less, so it is no surprise that Java is less optimized for type casting.

(The primary exception being the equals(Object) method, which most classes should have.)

I'm not sure I see how generics help at this particular problem. Functional languages have advanced type systems, but still use pattern matching all the time.
It certainly looks weird at first, but is there anything objectively wrong with it?