А потом во входном потоке появится русская "e" в yes, и тестировщик сломает мозги, разбираясь, что не так работает.
Выражать логические переменные через строки - мерзость изначальная.
Вот доработкой такой херни сейчас занимаюсь.
Комментов - где-то 1 на пару тысяч строк кода. Документация вида
"функция создания пользователя позволяет создать пользователя; функция вывода списка на страницу выводит список на страницу".
У меня, очевидно же, вопрос не к синтаксису, а к логике.
odd и even - нечётное и чётное, варианты - тру/фолз. И тут резко автор говорит, что делаем всё резко наоборот в отношение нечётных. Чётные не трогаем. А потом полагаясь на чётность-нечётность выполняем действия.
С этими yes/no вспомнилась история, от которой до сих пор горю. Решил познакомиться с CentOS, при установке выбрал русскую раскладку клавиатуры, первая перезагрузка и... Появляется запрос, типа, если хотите продолжить работу, нужно согласиться с лиц. соглашением. Согласны? Введите "y" или "n". Весь диалог происходит на русском, раскладка тоже на русском, переключение на латиницу не работает, перепробовал все комбинации клавиш, даже caps lock, "д" или "н" не принимается, даже залогиниться и поправить раскладку невозможно. "Удалить виртуальную машину?" -> "YES"
Это частный случай использования текстовых ключей для выражения состояния чего-либо (коды ошибок, например).
А чтобы тестеровщик не ломал голову - нужно проверять все возможные ключи и ругаться в логи, если не один не подошел, а не надеяться на else.
И каждый этот частный случай - мерзость.
Состояние, выражаемое через конечные множества - выражаются перечислениями, логический тип - частный случай этого.
В нормальных языках есть изначально полноценные средства для работы с перечислениями.
Это специально сделано для того, чтобы были встроенные механизмы контроля целостности и соответствия на уровне компиляции (или интерпретации, не суть важно).
И использовать текстовые представления оных требуется только в одном случае - для выдачи в интерфейс пользователю.
Но завязывать логику, формируя обработку перечислимых типов через текстовые представления, используя текст "унутре" - за это недопрограммисты будут гореть в геене.
Если какой-либо недоязык не может корректно работать с перечислениями - используют глобальные индексные массивы в общем пространстве имён, где обрабатывается индекс.
Т.е., для логических типов 0/1 - как отсылка к false|true.
Это тоже нехорошо, но ошибок уже много меньше потенциально...
А если вы внутри логики строку передаёте как состояние перечислимого типа, то контроль целостности и соответствия вам придётся проводить каждый раз. На входе блока. И организовывать обработку исключений. А потом удивляемся, куда девается производительность...
Перечисления сделаны для взаимодействия со сторонними приложениями с сохранением человекочитаемых названий полей и кодов ошибок. Классический пример - протокол HTTP. Там все поля запроса и ответа в заголовке являются текстовыми, включая дату. И да, контроль соответствия проводится каждый раз. Добро пожаловать в реальный мир за пределами коробки helloworld.
Короче этот кусок кода конвертирует слова с регистром "Yes" и "YES" в обычный вид без регистров("yes"). Типа программист поставил защиту от людской тупости невнимательности.
Но кто-то решил конвертировать слово "yES" (такая ситуация возникает, когда у человека включён капс, но он не знает об этом и пишет "Yes", но получает "yES") . Эта ситуация не предусмотрена в коде, и программа думает, что там написано "no".
Пока не увидел что string с маленьких букв, а названия функций с заглавных, думал что это Java и не мог понять, как вообще этот код может работать корректно.
One morning you wake up find out you have access to God’s developer console. What’s the first thing you do with this power?
Discussion
♦ 154 + W 479 & Share
^ BEST COMMENTS ▼
I like forks • 5h
hehe3301 • 7h
sudo rm -rf oceans/*/contents/
*.plástic
sudo rm -rf people/*/*.cáncer sudo rm -rf v
Выражать логические переменные через строки - мерзость изначальная.
Комментов - где-то 1 на пару тысяч строк кода. Документация вида
"функция создания пользователя позволяет создать пользователя; функция вывода списка на страницу выводит список на страницу".
Не совсем понимаю, что тут принципиально некорректного.
odd и even - нечётное и чётное, варианты - тру/фолз. И тут резко автор говорит, что делаем всё резко наоборот в отношение нечётных. Чётные не трогаем. А потом полагаясь на чётность-нечётность выполняем действия.
А чтобы тестеровщик не ломал голову - нужно проверять все возможные ключи и ругаться в логи, если не один не подошел, а не надеяться на else.
Состояние, выражаемое через конечные множества - выражаются перечислениями, логический тип - частный случай этого.
В нормальных языках есть изначально полноценные средства для работы с перечислениями.
Это специально сделано для того, чтобы были встроенные механизмы контроля целостности и соответствия на уровне компиляции (или интерпретации, не суть важно).
И использовать текстовые представления оных требуется только в одном случае - для выдачи в интерфейс пользователю.
Но завязывать логику, формируя обработку перечислимых типов через текстовые представления, используя текст "унутре" - за это недопрограммисты будут гореть в геене.
Если какой-либо недоязык не может корректно работать с перечислениями - используют глобальные индексные массивы в общем пространстве имён, где обрабатывается индекс.
Т.е., для логических типов 0/1 - как отсылка к false|true.
Это тоже нехорошо, но ошибок уже много меньше потенциально...
А если вы внутри логики строку передаёте как состояние перечислимого типа, то контроль целостности и соответствия вам придётся проводить каждый раз. На входе блока. И организовывать обработку исключений. А потом удивляемся, куда девается производительность...
if(str.size() == 2)
return "no";
return "yes";
А меж тем все ест да ест.
Отвернись — он пол-Расеи
Заглотнет в один присест!
сорри за капитанство.
Спасибо, капитан!
>получил "no"
Но кто-то решил конвертировать слово "yES" (такая ситуация возникает, когда у человека включён капс, но он не знает об этом и пишет "Yes", но получает "yES") . Эта ситуация не предусмотрена в коде, и программа думает, что там написано "no".
NO || nO || No || no
else
yes