На этом шаге мы рассмотрим понятие трюка.
Трюками мы называем необычные приемы программирования. Трюк должен быть лаконичным и давать выигрыш в быстродействии или в объеме программы; каждый трюк несет в себе элемент неожиданности.
Отношение к трюкам может быть различным. Некоторые уравновешенные люди признают, что в этом что-то есть, но избегают фокусов, дабы не усложнять жизнь. Другие получают в трюках эстетическое удовольствие и восхищаются ими настолько, что забывают о назначении программы. Третьи находят прямую связь между трюками, трюкачеством и "бит-жонглерством" и считают все это безусловно вредными привычками плохо воспитанных программистов.
Вероятно, в каждом из этих мнений есть что-то от истины. Однако мы считаем, что к месту употребленный трюк, снабженный, когда надо, комментариями, ничего, кроме пользы, принести не может. Некоторые трюки, входя в обиход, становятся привычными и воспринимаются как нормальные приемы программирования. В большинстве случаев чистый выигрыш от них невелик, но бывают ситуации, когда время работы программы жестко ограничено и только трюк может спасти положение. Наконец, знакомство с трюками полезно и тем, кто их не использует, так как позволяет глубже осознать особенности компьютера и чувствовать себя свободно. Из-за своей необычности трюки, как правило, реализуются только на языках ассемблерного типа или непосредственно в машинных кодах.
Однако никогда не используйте трюков там, где можно использовать простые методы. Заметим, что элегантное решение задачи - это такое решение, которое одновременно и просто и оригинально. Простые решения всегда желательны, но вопрос о том, всегда ли приемлемы оригинальные решения (трюки), остается открытым.
Под оригинальностью решения подразумевается его неочевидность.
Кстати, Оксфордский словарь английского языка определяет элегантность как "утонченное изящество; корректность; искусная простота; изысканность..."
Возникающие при использовании трюков проблемы можно проиллюстрировать на следующем "модельном" трюке: A:=A+B; B:=A-B; A:=A-B; .
Здесь две переменные меняются значениями без промежуточного копирования значения одной из переменной. Этот прием используется системными программистами в том случае, когда при перемене мест содержимого регистров важно сэкономить дополнительный регистр.
Оригинальность очевидна, но элегантным этот прием можно считать, лишь принимая во внимание особенности конкретной задачи. Он, очевидно, не эффективен, когда используется вне рассматриваемого контекста, например для перестановки элементов многомерного массива в обычной программе, и к тому же может привести к ошибке округления, если А и В описаны как вещественные числа. Например, попробуйте выполнить этот трюк при следующих значениях (A=1, B=1.5E25) и проанализируйте полученные результаты.
Итак, никогда не используйте трюки только для того, чтобы продемонстрировать свои умственные способности!
На следующем шаге мы обсудим организационные приемы.