My personal thought, though it may seem strange, is that the best argument for it lies in the single word sentence at the bottom of your email. You write "Thoughts?" -- and that is very expressive in English in just the way that you mean above in your examples. I don't know enough other languages to really know if the parallels are universal, but it's pretty clear to me what it means why "file?.close()" and "os.Open(filename)?" are "punctuated" as they are -- where the question is. I feel like you're asking this compiler, "is there anything about this value that you need to tell me?" I like that.
The long (crazy long!) discussion of error handling has among its many branches an analysis from the Go team about '?' and this kind of postfix interrogation. I'm watching it all with a bit of wonder, but I wanted to speak up and say how your human-language phrasing matches your idea of computer-language phrasing. That seems a powerful kind of naturalness to take advantage of in this issue and future ones. On Sat, Jun 29, 2019 at 2:56 PM Andrey Tcherepanov < xnow4fippy...@sneakemail.com> wrote: > Hello mighty fighters of errors! > > Here comes my half-thought idea of another way to express error handling: > > *Add a postfix '?' that checks value for **emptiness (nil, 0, "") **AND > an error for nil. * > > (Denis have shred it to pieces already in > https://github.com/golang/go/issues/32852. Thank you Denis.) > > I am not good with expressing my inner talk, so there are couple examples > > original , Go 1 function > > func stat(filename string) (os.FileInfo, error) { > > var info os.FileInfo > { > var a1 *os.File > if a1, err := os.Open(filename); err != nil || a1 == nil { > return _, err > } > var a2 os.FileInfo > if a2, err := a1.Stat(); err != nil || a2 == nil { > return _, err > } > info = a2 > } > return info, nil > } > > > And with "?", trying to avoid original try() proposal handle leak > > // would return _, err, but since there is no err in signature, will return > default value in case of error > // uses ? on func call that returns (value, error) > func stat2(filename string) (os.FileInfo) { > file := os.Open(filename)? > defer file.Close() > return file.Stat()? > } > // would return error too, uses ? as "not nil" on a variable too > func stat3(filename string) (_ os.FileInfo, err error) { > var file *os.File > defer file?.Close() > file := os.Open(filename)? > return file.Stat() > } > > > Thoughts? > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/b7520ffe-ec38-4157-8f95-92844dcb0d0f%40googlegroups.com > <https://groups.google.com/d/msgid/golang-nuts/b7520ffe-ec38-4157-8f95-92844dcb0d0f%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- *Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.com>* -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CALoEmQzmBveHCvSDtdZY8Et1xgvuL0N-xwcNXJ5PfUeXa6CVFQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.