Проблема с синтаксисом Java: почему я должен поставить там зажимы? - PullRequest
0 голосов
/ 01 июня 2011

Я посетил вопрос по этому вопросу: Парсер Android SAX не получает полный текст между тегами потому что у меня была похожая проблема. Я решил свою проблему с одним из утверждений на этой стороне, но я не понимаю смелые зажимы.

String chars = -> ( new String(ch).substring(start, start + length) ) <- </strong>;

Кто-нибудь может мне помочь? Потому что утверждение можно использовать и без них.

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Как упомянул SRM, они являются круглыми скобками. В этом конкретном случае они не добавляют никакой ценности, кроме возможных улучшений читабельности кода. Есть случаи, когда скобки меняют значение. Соотнесите это с порядком операций по математике.

1 голос
/ 01 июня 2011

Скобки можно использовать, даже если в этом нет необходимости. Иногда это может прояснить ситуацию, иногда нет.

Например, 1 + 2 * 3 совпадает с 1 + (2 * 3). Круглые скобки, если они введены правильно, могут использоваться без изменения значения выражения, чтобы кто-то, читающий код, мог понять выражение, особенно когда выражение намного сложнее. Обратите внимание: если вы поставите круглые скобки другим способом, например (1 + 2) * 3, это будет означать что-то, отличное от двух предыдущих выражений.

В вашем примере кода эта скобка не обязательна.

Лично я бы не сказал, потому что это требует дополнительных нажатий клавиш, и это может привести к тому, что программа чтения человеческого кода снова будет сканировать эту строку, задаваясь вопросом, сложнее ли это, чем кажется, только чтобы узнать, что это не так, и тратить много маленьких пакетов. времени. Если кто-то сталкивается с таким количеством ненужных скобок, он может замаскировать существенные скобки и неправильно понять выражение позже. Просто мое личное, субъективное мнение.

String chars = (new String(ch).substring(start, start + length));

и

String chars = new String(ch).substring(start, start + length);

оба означают одно и то же.

так делают эти

String chars = ((new String(ch).substring(start, start + length)));
String chars = (((new String(ch).substring(start, start + length))));
String chars = (new String((ch)).substring(start, start + length));
String chars = (new String(ch).substring((start), start + length));

Попробуй увидеть рисунок. IMO - это нехорошо учить тому, что нужно изучать синтаксис программирования интуитивно с помощью «сопоставления с образцом», поэтому вам следует взглянуть на некоторые книги по Java, как то, что предлагал SRM.

Вы можете сделать это?

String (chars) = new String(ch).substring(start, start + length);

Вы, вероятно, скажете "нет", что правильно.

Но почему? Если вы не можете ответить почему, вам будет полезно узнать.

(Я не смеюсь над тобой, мне просто хотелось много печатать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...