Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #11512
| From | Arved Sandstrom <asandstrom3minus1@eastlink.ca> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Blocks for scope control |
| References | <dBCQq.122$d%2.16@newsfe07.iad> <jev7op$j4k$1@news.albasani.net> <IRHQq.2650$2C.1194@newsfe20.iad> <jevoes$qru$1@news.albasani.net> |
| Message-ID | <2P3Sq.1782$lS6.832@newsfe20.iad> (permalink) |
| Organization | Public Usenet Newsgroup Access |
| Date | 2012-01-19 21:54 -0400 |
On 12-01-15 07:45 PM, Lew wrote: > Arved Sandstrom wrote: >> Lew wrote: >>> There are many, many idioms in Java that are woefully underused. > > Okay, not all that many, but some. > >>> 'assert' is the prime example. People don't understand it, even >>> excoriate it (strange as that seems), and it's been around about a >>> decade, since Java 1.4. Lack of use does not equate to lack of value. >>> >> Quite apart from (lack of) understanding as to how to apply assertions >> effectively and correctly, I believe that there are other reasons why >> they are not more widely used. Some are good, some not so good, some are >> neutral. >> >> I'm with you on this one, though. I like assertions and use them. > > I am curious as to the "good" reasons why they're not more widely used. > I can think of none I'd categorize as "good". > > There are good reasons not to use them in certain scenarios, e.g., they > are not intended nor should be used for checking arguments to public > methods, but that doesn't speak to why 'assert' isn't more widely used > for the intended use cases. > Lew, I had side-effects of assertions in mind when I wrote that, for one. I know, and you know, that Java docs on assertions clearly point out that assertions should not have side-effects, that you should be able to omit their execution and not affect the remaining code. However, good intentions and all, a widespread use of assertions by developers who haven't thoroughly checked the assertion logic to ensure its purity may lead to testing anomalies. As an example, what if the condition you wish to assert at a specific point has no immediately available variables to work with? It might be a temptation for a programmer to call some getters to obtain the values. As we know, many getters are not side-effect free, even ones that ought to be, and unless a coder religiously checks this out there may be a problem. A novice coder might not notice that a getter is synchronized, as an example, and simply note the fact that the getter itself does nothing but return a value. Perhaps not a "good" reason, but I'd call it a realistic one. Yes, the Java assertion documentation happens to use an example where a local variable is conveniently produced by a previous necessary piece of logic, and the following assertion can happily use that value. Not always so easy. Another decent reason, in my opinion, is if the management of them is not disciplined. An organization that doesn't even wonder whether they are disciplined enough to manage assertions in code isn't, and others that do ask the question may decide that they are not. What I mean by this is, assertions are easy to put in. They are not always correct when put in, and they have to be maintained in any case as code changes (or at least removed if necessary). Existing obsolete assertions need to be taken into account when adding new ones in the same class or package, because if you enable one then you may enable more. Or you remove old ones you don't understand, if you trust yourself to understand the business rules from 4 years ago well enough to classify the assertions as being defunct. Let me put it this way: I would feel good about looking at code that had assertions in it if I saw that they were also commented where necessary, including traceability notes where that makes sense, *and* were supported by unit tests that exercised the assertions. Again, you may wish to not think of this as a "good" reason. It's not really. It's another realistic reason. I've worked with a number of development teams that, if they were ever to read about assertions and get a wild hair about trying them, would either be useless with them or be obstructive with them. It may not be a "good" thing that they don't use assertions, but it's not a bad thing either. AHS -- ...wherever the people are well informed they can be trusted with their own government... -- Thomas Jefferson, 1789
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Blocks for scope control Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-15 11:50 -0400
Re: Blocks for scope control Robert Klemme <shortcutter@googlemail.com> - 2012-01-15 17:10 +0100
Re: Blocks for scope control Robert Klemme <shortcutter@googlemail.com> - 2012-01-15 17:32 +0100
Re: Blocks for scope control Lew <noone@lewscanon.com> - 2012-01-15 11:21 -0800
Re: Blocks for scope control Robert Klemme <shortcutter@googlemail.com> - 2012-01-16 07:59 +0100
Re: Blocks for scope control markspace <-@.> - 2012-01-15 09:57 -0800
Re: Blocks for scope control Lew <noone@lewscanon.com> - 2012-01-15 11:28 -0800
Re: Blocks for scope control Lew <noone@lewscanon.com> - 2012-01-15 11:00 -0800
Re: Blocks for scope control Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-15 17:49 -0400
Re: Blocks for scope control Lew <noone@lewscanon.com> - 2012-01-15 15:45 -0800
Re: Blocks for scope control Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-19 21:54 -0400
Re: Blocks for scope control Robert Klemme <shortcutter@googlemail.com> - 2012-01-20 08:41 +0100
Re: Blocks for scope control Lew <noone@lewscanon.com> - 2012-01-20 15:24 -0800
Re: Blocks for scope control Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-20 19:30 -0400
Re: Blocks for scope control Lew <noone@lewscanon.com> - 2012-01-20 15:54 -0800
Re: Blocks for scope control Robert Klemme <shortcutter@googlemail.com> - 2012-01-16 07:55 +0100
Re: Blocks for scope control Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-19 21:16 -0400
Re: Blocks for scope control Robert Klemme <shortcutter@googlemail.com> - 2012-01-21 13:25 +0100
Re: Blocks for scope control Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-21 10:41 -0400
Re: Blocks for scope control Robert Klemme <shortcutter@googlemail.com> - 2012-01-22 13:03 +0100
Re: Blocks for scope control Roedy Green <see_website@mindprod.com.invalid> - 2012-01-16 06:09 -0800
Re: Blocks for scope control Henk van Voorthuijsen <voorth@xs4all.nl> - 2012-01-16 07:03 -0800
Re: Blocks for scope control Arne Vajhøj <arne@vajhoej.dk> - 2012-01-17 18:43 -0500
Re: Blocks for scope control Lew <noone@lewscanon.com> - 2012-01-20 11:05 -0800
Re: Blocks for scope control Gene Wirchenko <genew@ocis.net> - 2012-01-20 12:11 -0800
Re: Blocks for scope control Arne Vajhøj <arne@vajhoej.dk> - 2012-02-06 21:24 -0500
csiph-web