4

Example with a context (Java: A Beginner's Guide, 6th Edition by Herbert Schildt):

I noticed that read( ) returns –1 when the end of the file has been reached, but that it does not have a special return value for a file error. Why not?

While it's perfectly clear what the sentence says, I find this particular sentence pattern a bit confusing and somewhat unnatural. I don't know why though. Perhaps it is because that this kind of grammatical structure is not commonly used. From my experience, I can definitely say that I don't see this one very often. Every time I read this sentence, the sentence, for some reason, sounds incomplete, like there's information missing from it and my brain tries to add that missing information back in after the second clause to conclude the thought, like this:

I noticed that read( ) returns –1 when the end of the file has been reached, but that it does not have a special return value for a file error is very strange since similar functions in other programming languages do. Why not?

What can you say about this problem? Could you maybe do a grammar analysis of the sentence for me?

2
  • I don't think you've encountered a problem. The author didn't add that information in because they expect it to be clear to the reader. In other words it's expected that your brain will try to add the missing information in. So, the author has noted something they thought was strange, and you also realize it's strange. Great, you're on the same page.
    – DCShannon
    Jun 5, 2015 at 2:42
  • 1
    The information you're trying to add in isn't correct. The use of 'but' is not because this feature is present in most other languages, but because it goes against the philosophy expressed in the first clause. If you were comparing this to other languages, you might say "I noticed that in common with other languages, read( ) returns –1 when the end of the file has been reached, but unlike other languages, it does not have a special return value for a file error.
    – Steve Ives
    Jun 10, 2015 at 11:33

6 Answers 6

6

Try interpreting the grammar in the sentence like this:

I noticed that read( ) returns –1 when the end of the file has been reached, but I noticed that it does not have a special return value for a file error. Why not? I know that the repetition of 'that' in the original sentence doesn't sound very convincing but it's unavoidable in the case where the author wants to specify explicitly that he noticed this as well as that.

Let's take a look at a simpler example: 'I noticed that he did his maths homework but didn't do his physics homework.'

This sentence follows the pattern: ' I noticed that he did this but didn't do that.' Here, we can very comfortably say that 'I noticed that he' is for both the phrases, 'did this' and 'didn't do that'. That's because the sentence is short. Probably, the author thought that in the long sentence that he is framing, people will be left with the notion that 'he noticed this but not that' or that he noticed only the (first part of the sentence). By adding is very strange since similar functions in other programming languages do you aren't making the sentence look better because that extension is disturbing the 'noticed that this is ...but (noticed) that this isn't' structure. Hope that helps!

5
+75

The word "but" is simply acting as a conjunction between the two phrases:

that read( ) returns –1 when the end of the file has been reached

and

that it does not have a special return value for a file error

What may seem strange is that the "that" is repeated in both phrases, when, as a matter of style it could be rewritten as:

I noticed that read( ) returns –1 when the end of the file has been reached, but does not have a special return value for a file error. Why not?

In the above construction, the "that" is relocated to outside of the conjunction and no longer repeated. (The process is somewhat analogous to "factoring out" terms in mathematics)

2
  • There's more to it than that - you could not replace 'but' with 'and' and get the same meaning. It's 'but' because the 2 clauses indicate an inconsistent approach to file error handling.
    – Steve Ives
    Jun 11, 2015 at 14:10
  • 2
    @SteveIves My point is that the "unnaturalness" of the construction is that the construction joins two subordinate clauses ("that x does y, but that x does not do z"), when it could be combined into a single subordinate clause with a compound subject-verb section ("that x does y, but not z") Jun 11, 2015 at 16:48
2

Consider these alternatives:

I noticed [first] that read() returns –1 when the end of the file has been reached but [second] that it does not have a special return value for a file error.

I noticed that read() returns -1 when the end of the file has been reached, but I also noticed that it does not have a special return value for a file error.

The original sentence has a simple subject, "I".  It has a simple verb, "noticed".  It has a compound direct object.  The two elements in the compound are both nominative clauses which each begin with the word "that".  The conjunction which coordinates these two elements is "but".

 

There's an obvious reason for your confusion.  There's a comma before the "but".  There shouldn't be.

You see the comma and the coordinating conjunction.  You quite naturally expect a complete, independent clause to follow.  Instead, you find a subordinate clause.  Such a clause could serve as a subject, and it's positioned where you'd expect to find the subject of the following independent clause.  Alas, no such independent clause materializes.  The coordinate elements are merely subordinate clauses, and the conjunction requires no leading comma.

You may find the sentence easier to read once the misleading comma is removed:

I noticed that read() returns –1 when the end of the file has been reached but that it does not have a special return value for a file error. 

5
  • 1
    The comma is valid - in spoken English, you might pause after the first clause to make sure the person you are speaking to has taken it in, before going on to the 'but...' part of the sentence.
    – Steve Ives
    Jun 11, 2015 at 14:13
  • Regardless of whether the comma is an outright error or merely a poor style choice, it is confusing and misleading. OP wants to know why and how the sentence is so confusing. He even goes on to demonstrate that a second independent clause would not confuse him. So, why else is he expecting a second independent clause? Jun 11, 2015 at 19:06
  • 1
    We'll have to agree to disagree - the sentence isn't confusing and misleading (to a native English speaker). It's quite normal for someone to say "I noticed that an error is generated for an EOF <pause> but that there isn't for a read-error". The pause is to make sure that the person you are speaking has taken in the point you are making.
    – Steve Ives
    Jun 11, 2015 at 20:02
  • You said that "You see the comma and the coordinating conjunction. You quite naturally expect a complete, independent clause to follow." - that's no how a comma is used. A comma only indicates a pause. A semi-colon can be used as you describe, to separate 2 clauses that almost warrant 2 separate sentances.
    – Steve Ives
    Jun 11, 2015 at 22:50
  • First three hits for the search string "compound sentence comma conjunction: grammartips.homestead.com/compoundsentences.html englishplus.com/grammar/00000069.htm writing.wisc.edu/Handbook/CoordConj.html These and countless other sources indicate that that is, indeed, how a comma and coordinating conjunction are used. Jun 12, 2015 at 1:18
2

You're incorrectly trying to read the conjunction as if it's joining two independent clauses. This is very common with "and" and "but." Example:

  1. I eat rice, and I eat chicken.

Instead this should be read as a sentence with 1 subject and two conjoined predicates.

  1. I eat rice and chicken.

You're correction would be similar to "correcting" example 2 to:

  1. I eat rice and chickens eat corn.

Going back to your original sentence, the one subject/ verb is

I noticed

which can be completed with

that read( ) returns –1 when the end of the file has been reached.

or

that it does not have a special return value for a file error.

In this case the author chose to avoid mentioning himself twice unnecessarily when he noticed two things.

For further reference, I'd search for compound or conjoined predicates. You may also want to look at the use of parallelism. It's the parallel structure of the two phrases which indicates that they share the same function.

2

The 'but' is there because the second clause is at odds with the first clause. I.e. they put code in to deal with a EOF condition but they didn't put code in to deal with a read error.

You would have thought that having done the first thing, they'd also do the second thing.

Edit: If the sentence had read "I noticed that read( ) returns –1 when the end of the file has been reached, and that it does not have a special return value for a file error. Why not?", you might ask "What do you mean?" i.e that you are correct in thinking that the sentence is lacking information. However, because they use 'but', you know that the 'point' of the statement is the conflict between the 2 clauses and the differing reasoning behind them.

0
1

I noticed that read( ) returns –1 when the end of the file has been reached, but that it does not have a special return value for a file error. Why not?

There's only two things relevant to understanding this sentence. I've bolded the term in the first clause that it is referring to in the second clause. You're simply substituting read( ) returns –1 with it in the second part of the sentence.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .