О точности языков
Saturday, 2 Nov 2013
Недавно я в одном дружественном журнале увидел ремарку, объясняющую термин из предыдущей фразы. Типа:
Элементарная логика (наука об общих законах развития объективного мира и познания) …
только слово там было чуть позаковыристей. Деревянные игрушки тяжелого детства приучили меня к тому, что незнакомые слова можно смотреть в словаре. У меня даже электронного волка с яйцами не было, я развлекался исключительно картинками из Брокгауза, поэтому энциклопедия всегда была под рукой. В результате я бегло читаю на дореформенном и тяготею к переносу в активный словарный запас максимального количества малоупотребительных терминов. С ними речь становится не только сочнее, но и гораздо точнее. Мысль допускает меньшее количество толкований.
Внезапно понял, что эта черта характера сильно повлияла на мой стиль программирования. Я не терплю невнятности изложения мысли, зачастую принося в жертву мифическую «читаемость» кода. Чтобы не ходить далеко за примером: вчера потребовалось выполнить разные действия в зависимости от того, с чего начинается строка. Нормальный человек не решает эту задачу перебором:
if str.start_with? 'a'
puts 'String starts with “a”'
elsif str.start_with? 'b'
puts 'String starts with “b”'
else
raise 'Shit happens!'
end
Я имею в виду, что в реальной жизни мы не станем проверять, а не ананас ли перед нами, увидев скорпиона. Цепочка рассуждений выглядит так: «скорпион
Поэтому мой вариант решения этой задачи оказался вот таким:
_start_with = lambda { |sample, string| string.start_with? sample }
case string
when _start_with.curry['a'] then puts 'String starts with “a”'
when _start_with.curry['b'] then puts 'String starts with “b”'
else raise 'Shit happens!'
end
Так и вижу толпу пуристов с копьями, которые хотят меня распять на шарпе. Попытаюсь объяснить. Второй вариант, наверное, потребует на три миллисекунды больше, чтобы понять, что хотел сказать автор. Но как только понимание пришло, оно уже никуда не денется. В этом коде не запутаешься. Тут проложены только те пути, которые соответствуют задаче: глазами пробежал по дорожке «string
В продакшене в реальном времени так писать, разумеется, нельзя (бенчмарки показывают, что мой вариант в 20 раз медленнее, и я знаю это). На научно-популярных лекциях тоже неразумно злоупотреблять терминами из приложения к основному словарю. Но если целью является чистота и внятность кода (речи), а такое, поверьте мне, бывает гораздо чаще, чем кажется — я буду использовать весь доступный мне арсенал внятности. Такие мелочи иногда очень помогают быстро ухватить нюансы. Протагонист — это гораздо больше, чем главный герой, если вы вдруг писали выпускное сочинение по Зюскинду.
Я вообще нахожу неестественным предложение «быть проще, ибо люди потянутся». Считайте меня социопатом.