Many thanks to Tristan Morris for creating a beautiful illustrated hardcover print edition of the site

tcc-case-title

Ныне пути Йывень и Хвайды пересекаются лишь изредка из-за того, что всё время Йывень занято созданием своеобразного шарфа. Поэтому беспокойная Хвайда стала исследовать те немногие части Храма, о которых она ещё не знала.

Скитания привели её к залам аббатства, где обитал клан Горького Дыхания Волка, монахи которого в чёрных одеяниях выполняли всё интеграционное тестирование в Храме. Разработчикам было запрещено появляться в этом месте, хотя никто и никогда не говорил Хвайде почему. Как и все тайны, эта беспокоила её. Она пряталась в тени перегородок и дверей, надеясь узнать некий шокирующий секрет Храма, но всё, что она слышала от монахов в чёрных одеяниях, было громкими шутками на счёт тех разработчиков, чей код содержал ошибки. Большинство этих разработчиков были из клана Паука, клана Хвайды.

“Это бесит меня больше всего”, - услышала она жалобу одного из монахов клана Горького Дыхания Волка. - “Я устанавливаю состояние заказа в ‘Неизвестно’, отправляю форму и всё выглядит хорошо. Но когда я возвращаюсь к этой форме, то возникает сообщение о некорректном состоянии заказа. А разработчик клянётся, что ничего не менял на странице!”

“Так всегда происходит с кланом Паука”, - вздохнул другой голос. - “Если что-нибудь попадает к ним в руки, то они заворачивают это в восемь слоёв JavaScript, калечат отзывчивость, высасывают всю полезность и заявляют, что этот дёргающийся труп - хорошо выполненная работа”.

Их смех преследовал Хвайду, пока она пробиралась к выходу из аббатства. “Я непременно должна с этим разобраться,” - подумала она, сжимая кулаки.

- - -

Позже Хвайда подошла к учителю Банзену с огнём праведного гнева в глазах и с распечатками в руках.

“Эта ошибка была привнесена монахом клана Следа Слона, а не нами. Он переписал метод, преобразующий каждую строку базы данных в объект, и его новый код содержит вот это”... - она постучала пальцем по строке со следующим кодом:

order.setStatusCode(rs.getInt(STATUS_CODE));

“А”, - сказал Банзен. - “Я до этого много раз видел такие ошибки. Это свойство имеет тип Integer, чтобы была возможность хранить null. Но в JDBC API метод getInt возвращает примитивный тип int и незаметно преобразует NULL из базы данных в 0, который незаметно преобразуется в объект при вызове метода setStatusCode и возвращается методом getStatusCode при заполнении формы. А поскольку нет такого состояния заказа 0, строка базы данных становится неверной”.

“Как будет наказан монах клана Следа Слона?” - спросила Хвайда.

“Ничего смертельного”, - сказал Банзен. - “Моё обычное наказание с использованием лодки, которую я держу для такого случая в южном ущелье. Монах вернётся в синяках и мокрым, а в будущем станет изучать API перед использованием более внимательно”.

Лицо Хвайды налилось кровью: “А как же честь клана Паука? Из-за этого монахи клана Горького Дыхания Волка открыто издеваются над нами в своём аббатстве!” Тут она замерла, осознав, что проговорилась о своём посещении запретной территории, но Банзен только вздохнул.

“Истинная вина лежит на авторах почтенного JDBC API и на каждом инженере сопровождения”, - сказал учитель. - “Они дали монаху удобную лодку с крепкими веслами, уже установленными в уключины. Должны ли мы погубить его только за то, что он не заметил, что левое весло слишком короткое? Нет... Хватит и того, что он вымокнет, когда лодку закрутит на порогах”.

Хвайда закусила губу, почтительно поклонилась и повернулась, чтобы уйти.

“Моя маленькая монахиня”, - сказал Банзен, подняв указательный палец, чтобы остановить её. - “Это не моя ошибка и я не могу предотвратить проблемы, которые она создаёт. Но я делаю так, чтобы и ошибка, и проблемы послужили великой цели”.

- - -

На ужине Йывень снова отсутствовала, но Хвайда заметила двух молодых учеников Банзена, сидящих вместе. Джишин и Сато согласились выслушать её жалобы на своего учителя.

“Кажется, Банзен решил терпеть эту ошибку до конца времён!” - раздраженно закончила Хвайда. - “Мы должны дать клану Следа Слона лучшую лодку!”

“Да ну!” - сказала Сато. - “Когда я узнала об этой ошибке, я предложила учителю переключиться на популярный ORM. Но у рефакторинга свои издержки, а у каждого инструмента свои опасности, поэтому код низкого уровня остаётся”.

“Тогда мы должны сделать наше собственное весло!” - сказала Хвайда.

“Да ну!” - сказал Джишин. - “Когда я узнал об этой ошибке, я написал подходящий вспомогательный метод getInteger. Но разработчики ищут только то, что как они думают им необходимо, и то, что они знают как искать, поэтому мой метод практически не используется”.

Хвайда погрузилась в отчаяние: “Таким образом, монах клана Следа Слона будет слегка наказан, а монах клана Горького Дыхания Волка не будет наказан совсем. По крайней мере, несчастная Хвайда была наказана. И сейчас я понимаю, почему запрещено входить в логово Волка: чтобы поддерживать гармонию между нашими кланами. Жалоба может стать оскорблением, только если она подслушана”.

Джишин сказал: “Вы воспринимаете движение вёсел над водой, но Ваш истинный курс определяется тем, что находится внизу”.

Сато продолжила: “Наш учитель знает, что Вы нарушили запрет. Но запрет не его и он не может предотвратить его нарушение неудержимым любопытствующим. Таким образом, он делает так, чтобы и указ, и его нарушения послужили великой цели”.

Сато положила по-товарищески руку на плечо Хвайда: “Приятного аппетита, сестра клана Паука! Ибо я опасаюсь, что твоё наказание только начинается”...