On Thu, 08 May 2014 09:15:13 +0000 amehat via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:
> Hello everyone, > > in java, you can have exceptions on methods. > Thus we can write: > public static void control (String string) throws > MyException {} > > Is that possible in D and if so how does it work? If I write this > D: > > public void testMe () throws MyException {} > > The compiler refuses to compile. > > What is the proper behavior for this D? > > thank you At this point, the programming community at large seems to have decided that while checked exceptions seem like a good idea, they're ultimately a bad one. This article has a good explanation from one of the creators of C# as to why: http://www.artima.com/intv/handcuffs.html At this point, Java is the only language I'm aware of which has checked exceptions (though there may be a few others somewhere), and newer languages have learned from Java's mistake and chosen not to have them. What D has instead is the attribute nothrow. Any function marked with nothrow cannot throw an exception. e.g. auto func(int bar) nothrow {...} It's similar to C++11's noexcept except that it's checked at compile time (like Java's checked exceptions), whereas noexcept introduces a runtime check. If a function is not marked with nothrow, then the only ways to know what it can throw are to read the documentation (which may or may not say) or to read the code. There are obviously downsides to that in comparison to checked exceptions, but the consensus at this point is that it's ultimately better. - Jonathan M Davis