Пособие по практике программирования


Пример 1.12 - часть 2


В следующем примере проверки високосности года по его номеру в использовании скобок нет жесткой необходимости:

? lеар_уеаг = у % 4 == 0 && у % 100 ! = 0 | | у % 400 == 0;

но с ними фрагмент станет гораздо проще для понимания:

lеар_уеаг = ((у%4 == 0) && (у%100 != 0)) | (у%400 ==0);

Мы убрали здесь некоторые пробелы: группировка операций с самым высоким приоритетом помогает читателю быстрее разобраться в структуре программы.

Разбивайте сложные выражения. Языки С, C++ и Java имеют богатый и разнообразный синтаксис, поэтому многие увлекаются втискиванием всего подряд в одну конструкцию. Приведенное выражение весьма компактно, однако в нем содержится слишком много операторов:

*х += (*xp=(2*k < (n-m) ? c [k+1] : d[k--]));

Если разбить это выражение на несколько, оно станет гораздо более удобочитаемым:

if (2*k < n-m)
*хр = c[k+1j;
else
*xp = d[k--];
*x += *xp;

Будьте проще. Безудержная энергия программистов иногда направляется на то, чтобы написать наиболее краткий код или достичь результата самым хитрым и красивым способом. Иногда, впрочем, эти таланты тратятся впустую: настоящая задача в том, чтобы написать код попроще, а не похлеще. Вот, к примеру, что делает это замысловатое выражение?

? subkey = subkey » (bitoff - ((bitoff » 3) « 3));

Самое внутреннее выражение сдвигает bitoff на три бита вправо. Результат сдвигается обратно влево, при этом три сдвинутых бита замещаются нулями. Затем результат вычитается из первоначального значения, оставляя три младших бита bitoff, которые используются для сдвига subkey вправо.

Таким образом, приведенная конструкция эквивалентна

subkey = subkey » (bitoff & 0x7);

Над первой версией приходится гадать некоторое время, чтобы понять, что там происходит; со второй же все просто и ясно. Опытные программисты записали бы ее еще короче:

subkey »= bitoff & 0x7;

Некоторые конструкции кажутся специально созданными для того, чтобы сбить читателя с толку. Например, применение оператора ? : может привести к появлению абсолютно загадочного кода:




- Начало -  - Назад -  - Вперед -



Книжный магазин