Мантра «говори, что делаешь, и делай, что говоришь».
Если вы проверяете возвращаемое значение как особое значение, это ничего не говорит о том, почему вы проверяете это. В вашем примере:
for( int val = r.read(); val != -1; val = r.read()) {
doSomethingWith(val);
}
Означает ли это, что «если возвращаемое значение когда-либо становится -1, мы можем пропустить остальные», или «если возвращаемое значение равно -1, произошла ошибка», или «если возвращаемое значение когда-либо равно -1 , конец достигнут "? Напротив, hasNext
совершенно однозначно.
Кстати, мне действительно нравятся конструкции foreach
и map
, которые другие языки предоставляют (или позволяют писать) лучше, чем явные циклы.