Вечный памятник человеческой неспособности договориться даже о бинарном флаге.
Попытавшись поменять пол на HTML-формочке сайта, мы обнаружили гениальную фичу в проприетарной закрытой либе, которую удалось вытащить только декомпилятором: пол человека может задаваться в трех кодировках, и все они примерно одинаково популярны:
1) Строка, содержащая в себе единственную букву: «M» и «F»
2) Числовой код: 1 или 2
3) Строка, содержащая в себе одну цифру: «1» или «2»
4) В обоих строковых случаев, вместо валидной строки может быть пустая ссылка (null), либо некорректное значение.
Между ними написаны конвертеры. Код конвертинга между «числами» такой:
если исходныйПол = 2, то результирующийПол = 1
если исходныйПол = 1, то результирующийПол = 2
Как видим, три человека не сошлись в мнении о правильном обозначении пола, каждый из них набрал себе много сторонников (ну или накодил говнокода как не в себя), и тут битва началась!
Еще интересный факт: поскольку про ООП все внезапно забыли, то нельзя сделать метод, спрашивающий «а в какой же кодировке у нас пол».
Вместо этого повсеместно используюется следующий выбиратор (не спрашивайте, как это реализовано на нединамической Яве в самопальном веб-фреймворке — ужасно, запостив это я должен был бы всем участникам треда новые глаза):
если исходныйПол это Строка("М","Ж"), то кодировка = 1
если исходныйПол это Строка("1","2"), то кодировка = 2
если исходныйПол это Число, то кодировка = 3
Приправьте это добрым слоем проверок на невалидные ссылки и строки и закапывайте!
зы: язык — Java, название либы под NDA, но вы с 99,9% с ней никогда не встретитесь.