Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

basically that's how it works in Kotlin (and Dart and others) already. String? is String|null and it's a compiler error to reference a member without a prior null check.

In Kotlin (and others) it's extremely ergonomic, too. You just say foo?.bar and coalesce with ?: so

val baz = foo?.bar ?: "foo or bar is null"

In certain cases the Kotlin compiler will infer non-nullable type after an explicit null check just like in your example such that

fun bestFunction(foo : String?) {

    if(foo == null) return
    foo.baz <- //now legal to call without .?

}


Not really. The gp is complaining about the lack of semantics about what a missing value means. `String?` still doesn't tell me what not having a string means. `String|NotProvided` or `String|NotFound` or `String|InvalidInput` all have the same functionality as `String|null` but tells me something about what the missing value is indicating.


I mean, generally I would love (more) union types, unfortunately so few languages have them.

For Ops requirement I think it's too specific for a language level feature. In Kotlin you'd just use a sealed type in the cases were you really need to know why function can't produce a value. Works like a charm.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: