1. Perl / Говнокод #4362

    −156

    1. 1
    2. 2
    3. 3
    if (ref($val) eq 'ARRAY') {
       # ...
    }

    Запостил: seonull, 13 Октября 2010

    Комментарии (11) RSS

    • хмм, вообще-то не говно
      Ответить
    • да ну. потому что "официально одобрено"?
      Ответить
    • Вообще то это стандартный прием на перле, так как в перл можно передавать в функцию неограниченное число параметров без всяких дополнительных ухищрений, параметры в функцию передаются через специальную встроенную переменную @_ которая является массивом, обращение к элементам этого массива $_[index], или можно считывать через оператор shift
      то очень часто одна функция на перле принимать может параметры записанные в разных формах,
      Например
      sub some_func{
      if(ref $_[0] eq 'HASH') {
      #параметр передан в виде ссылки на хеш , то есть что то типа структуры или класса если так понятнее
      }
      else {
      # Данные идут обычным списком
      }
      };

      А где то в коде вызовы
      some_func( {'name'=>'Vasya','age'=>15} );
      some_func('Petya',22);

      Одно из применений ref, так же через ref можно узнать название класса объекта.

      То что автор посчитал это говнокодом, просто свидетельствует о том что автор поверхностно знаком с перлом
      Ответить
      • а с чего вы взяли что я всего этого не знаю. то что это "стандартный прием" не отменяет говняность данного решения. вот вы хорошо знаете перл - можете объяснить зачем хранить тип переменной в виде строки и явно сравнивать строки каждый раз, вместо того чтобы установить где нибудь флаг размером в один байт, а для проверки предусмотреть функцию типа пхпшной is_array?
        Ответить
    • ref в основном применяется к ссылка, и возвращает тип данных на которые ссылается данная ссылка, в случае если ref применит к к обычной скалярной переменой, то будет возвращена пустая строка, если к объекту класса то название класса, если к ссылке на массив то 'ARRAY ' и тд и тп вот если интересно кому
      http://perldoc.perl.org/functions/ref.html
      Ответить

    Добавить комментарий