1. Ruby / Говнокод #4913

    −98

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    def non_blank_attrs_amount
        return_value = 4
        return_value = return_value + 1 if (!country.blank?)
        return_value = return_value + 1 if (!address.blank?)
        return_value = return_value + 1 if (!phone.blank?)
        return_value = return_value + 1 if (!email.blank?)
        return_value = return_value + 1 if (!skype.blank?)
        return_value = return_value + 1 if (!site.blank?)
        return_value = return_value + 1 if (!comment.blank?)
        return_value.to_s
      end

    Запостил: Dreamfall, 13 Декабря 2010

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

    • и в чем говно? в отсутсвии ++ (а он там есть вообще?)
      Ответить
    • На сколько я понял это штука применяется для валидации.
      Не считая того, что в Ruby on Rails имеется куча своих гибких валидаторов, этот код можно было в любом случае сильно упростить (хотя лучше убрать с глаз долой) :)

      И да, в руби ++ нет, зато есть += :)
      Ответить
      • А в Паскале и += не нужно:
        return_value := 4 + ord(not country.blank) + ord(not address.blank) + ord(not phone.blank) + ord(not email.blank) + ord(not skype.blank) + ord(not site.blank) + ord(not comment.blank);

        Кстати, в руби можно данный пример реализовать циклом?
        Ответить
        • В теории, если немного постараться, то да.
          Но дело в том, что это настолько сферический говнокод в вакууме, что нет смысла его нормальной реализации :) я не знаю, зачем он нужен был пердыдущему кодеру :)

          Это одни из полей модели. Если их где-то объявить как массив в классе, то потом можно спокойно по нему итерироваться. типа
          def non_blank_attrs_amount
              rv = 4
              our_attributes_array.each do |a|
                rv += 1 if self.try(a).blank?
              rv
            end

          Причем "try(a)" это наверное кривой способ. У меня слишком маленький опыт разработки на руби, чтобы быть уверенным в моем коде :)
          Ответить
    • # абстрактно в вакууме
      def non_blank_attrs_amount
      always_non_blank_attributes_quantity = 4
      %w{country address phone email skype site comment}.count{|attribute_name| self.send(attribute_name).present?} + always_non_blank_attributes_quantity
      end

      # для active record
      def non_blank_attrs_amount
      self.attributes.values.count(&:present?)
      end
      Ответить

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