=()= / Говнокод #1047 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
sub trim_string
{
    my($sref) = $_[0];

    $$sref =~ s/^\s+//g;
    $$sref =~ s/\s+$//g;
}

Написано владельцем одной известной говнокомпании, который утверждает, что программировать может каждый.

Запостил: guest guest, (Updated )

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

  • Уважаемый, а в чем говнокод заключается, если не секрет ?
    Ответить
  • Не представлюсь:
    1). В избыточности лексической переменной $sref и модификатора "g". Все то же самое можно было написать так:

    sub trim_string {
    $$_[0] =~ s/^\s+//;
    $$_[0] =~ s/\s+$//;
    }

    Или так:

    sub trim_string {$$_[0] =~ s/^\s+|\s+$//g}

    2). Ну, а если бы говноатор знал о Perl чуть больше, чем ему подсказывала интуиция, то передавать скалярную переменную по ссылке в функцию trim_string() не стал бы вообще, ограничившись модификацией первого элемента @ARG.
    Ответить
    • Ну вообще использовать вместо $_[0] именованную переменную - является скорее хорошим тоном в программировании, чем ошибкой
      Ответить
    • Два регекспа в данном случае отработают быстрее, чем один с "|".
      Ответить
  • саминезнаетекто:
    Дайте я угадаю - вы одинокий псих-неудачник, склонный к истерикам или к занудству.
    Ответить
  • klem4:
    [quote]1). В избыточности лексической переменной $sref и модификатора "g". Все то же самое можно было написать так:[/quote]

    И что ваша первая функция выдаст на строке
    my $s = "  я  \n  строк  \n  ка  \n  ";

    без модификатора g ? Выдаст она неверный результат.

    Безусловно бело зависит от контекста. ИМХО не говнокод это.
    Ответить
  • Не представлюсь:
    [quote=klem4]И что ваша первая функция выдаст на строке

    1.my $s = " я \n строк \n ка \n ";[/quote]

    Чтобы результат совпал с ожиданиями надо поставить фигурные скобки вокруг $_[0], вот так: ${$_[0]} Это я не доглядел. А модификатор "g" здесь не нужен.
    Ответить
  • >>Это я не доглядел.
    Вы даже не неудачник - Вы быдлокодер, который не проверяет свой код!
    Ответить
  • [quote=klem4]без модификатора g ? Выдаст она неверный результат[/quote]
    она и с g не даст результата, надо еще m
    Ответить
  • Черт, хотел обругать постера этого кода, а тут уже за меня все сделали.
    Ответить
  • Я бы счел это говнокодом только за то, что он модифицирует значение by reference. Очень нечитабельно. Что плохого просто в:

    sub trim_string { my ($ref) = shift; return $ref =~ s/^\s+|\s+$/; }
    Ответить
    • Это плохо если передается большой кусок текста, а так ничем впринципе
      Ответить
    • Модификатор g здесь нужен.
      Просто s/^\s+|\s+$/; удалит только пробелы в начале строки, в конце не удалит.
      Просто встретит первое попавшееся и удалит и закончит на этом работу.
      Ответить
    • sub trim_string
      {
      my $ref = shift;
      s/^\s+//, s/\s+$// for $ref;
      return $ref;
      }

      1. Забрать параметр явно
      2. В перле так можно делать и читается неплохо вроде
      3. Явно отдать параметр

      P.S. Читабельно в одну строчку написать не получиться. Так что 1 и 3 нужны по любому.
      Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8