December 11th, 2020

Индусский код

Под названием "индусский код" обычно понимают программу, написанную таким образом, что она работает, но совершенно неочевидно, как, что чрезвычайно затрудняет отладку и дальнейшую поддержку такого кода. Мне тут попался хороший пример, и я не могу удержаться от того, чтобы его не процитировать.
Итак, это будет код на javascript (Ура!) И еще с использованием библиотеки jQuery (уже не так чтобы ура, но допустим). Итак, вот собственно оно:

function showDialog(id){
  if($.inArray(id, ["Строка1", "Строка2"])) {

    alert(1);

  } else {

    alert(2);

  }
}

Для тех, кто не особо сталкивался с программированием - здесь все предельно просто. Есть функция, в которую передают название диалога в виде строки. В начале проверяется, является ли эта строка одной из двух - "Строка1" или "Строка2". Можно было бы написать два сравнения - и между ними оператор "или", т.е.
if ((id==="Строка1")||(id==="Строка2")) {
Но программист выбрал другой подход - он проверяет наличие строки id в массиве из двух строк с помощью функции inArray. Зачем? Наверное, чтобы проще было добавить еще строку для сравнения, если потребуется. Довольно типичный подход.
Далее, для простоты, я указал вывод сообщений - цифру 1, если в скобках после if'а будет true, и цифру 2, если false.
На самом деле, здесь должен быть разный вывод диалога, в зависимости от того, какой айдишник диалога был передан.
Все так?

Тогда скажите, какой будет результат, если на вход передать какую-нибудь другую строку, например, "Строка3"?
После беглого взгляда на этот код приходит очевидный ответ: любая строка, кроме "Строки1", и "Строки2", выводит "2".
Это есть очевидный, и... неправильный ответ!

Collapse )
promo beliberden june 15, 2017 00:46 36
Buy for 10 tokens
Здравствуйте, всяк случайно, или не случайно, но попавший все-таки в мой журнал читатель! Приветствую - и предлагаю взаимную ЖЖешную дружбу. Френдленту, по-возможности, читаю, что-то комментирую, в общем, все как обычно. Некоторые предлагают "100% взаимофренд", как я знаю. У меня - почти тоже.…