Яuбy / Говнокод #20088 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
module CoreExt; module Array

  # Check if all array members are instances of given class(es).
  #
  # @return [Boolean]
  # @param [Array, Class] klasses_allowed Array of classes, or a single class
  # @note Returns <tt>true</tt> if the array is empty.
  def is_array_of?(klasses_allowed)
    if klasses_allowed.kind_of? Array
      fail ArgumentError, "Array of Classes expected. Some members are not instances of Class." \
        unless klasses_allowed.is_array_of?(Class)
    elsif klasses_allowed.kind_of? Class
      klasses_allowed = [klasses_allowed]
    else
      fail ArgumentError, "Class or array of classes expected, #{klasses_allowed.class.name} given"
    end
    return true if self.empty?
    self.map(&:class).uniq.reject{ |klass| klasses_allowed.include?(klass) }.empty?
  end


  # @note Sums array members.
  #
  # @return [nil] If source array contains non-numeric values.
  # @return [Fixnum, Integer, Float]
  def sum
    return nil unless self.is_array_of? [Integer, Float, Fixnum]
    self.inject(0) { |sum, value| sum + value }
  end


  # Boil down values proportionally, to make their sum equal to <tt>target_sum</tt>.
  #
  # @param [Fixnum] target_sum
  # @return [Array] Array of pairs [old value, new_value].
  def reduce_to_sum(target_sum)
    current_sum = self.sum
    gap = current_sum - target_sum
    if gap < 0
      return nil
    elsif gap == 0
      return self.collect { |value| [value, value] }
    else
      reduced = 0
      result = self.collect do |value|
        x = (gap * value) / current_sum # Floats round here
        reduced += x
        [value, value - x]
      end
      # Second pass, as target sum is not reached yet due to rounding of floats
      (gap - reduced).times { |i| result[i][1] -= 1 }
      result
    end
  end

end; end


if defined? Array
  Array.class_eval do
    include CoreExt::Array
  end
end

https://github.com/gorodulin/assemblr/blob/master/lib/core_ext/array.rb

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

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

  • Для меня любой код на Ruby выглядит как говнокод. Я вообще не понимаю как можно работать с таким синтаксисом. Brainfuck и то логичнее.
    Ответить
    • Да, я тоже не понимаю как можно работать с таким синтаксисом. Это же чистое удовольствие, а не работа.

      А автор да, упорот. Вообще среди рубистов уж очень много говнокодеров в инете, видимо синтаксис развращает. Особенно запомнилось когда какой-то рубист спрашивал на SO как определить что все числа в массиве равны, вариант сравнить с первым ему в голову не пришел, зато всяких reduce и reject в избытке.
      Ответить
      • А если вы все рубисты такие умные, то почему проектов на руби вме меньше?
        Ответить
          • нет, правда

            руби симпатичный, его сообщество породило много хороших практик, там всякие континиус деливери, девопсы, rake, bdd, cocoa pods, chief, puppet. много чего


            почему же он в срне гвн скатился?
            Ответить
            • Я думаю что низкий порог вхождения виноват. Хотя в целом мне пофиг на чем там сайты пишутся, сам язык никуда не девается и в говно не скатывается, меня он вполне устраивает.
              Единственный вред который я видел от его веб-ориентированности - разработчики рубиниус даже не сочли нужным его под винду собирать, мол все равно среди них нет никого кто им под виндой пользуется. В итоге ололо-быстродействие и llvm только под линуксом.
              Ответить
                • Я то на нем игоры и скрипты пишу, нафиг мне виртуальная машина. К счастью, все годные гемы это понимают и винду поддерживают.
                  Ответить
              • Питон тоже ебаное прыщеговно,рабочего гуникорна под виндой тоже нет.
                Ответить
                • Потому что сигналов нет:)
                  Я запускал apache + mod_wsgi под винду вместо гуникорна и работало, как часы.

                  Сём, а ты словом "ебаное прыщеговно" называешь всё, в чем не разбираешься?
                  Ну например "квантовая мехника -- ебаное прыщеговно", да?
                  Ответить
                  • Прыщеговно - это то, что (нормально) работает только под прыщами, но по какому-то недоразумению называется кроссплатформенным софтом. Или же апинсорсное говно. При этом прыщечерви норовят пязднуть что-то на божественный пипиетарный софт просто потому что он пипиетарный, и похуй что он работает и делает что надо.
                    Ответить
            • проблема руби в том, что

              1 его ниша прочно занята питоном
              2 коммерческое использование рубей сводится рельсам, где таким MVC (и даже лучше) полным полно
              3 Матц перемудрил и придумал концепцию наименьшего удивления при условии, что ты знаешь язык. Хотя с одной стороны это имеет смысл (посмотрите на жс с его подводными камнями)
              Ответить
              • Ну вот почему питон занял? Они же вместе начинали!
                Ответить
                • потому что питорасты и выгвидки. Питон проще чем руби, вот школьниге и набижале
                  Ответить
              • Почему нишу перла занял не родственный ему руби, а питон?
                Ответить
                • Рубин-на-рельсах разве не попал в нишу? Имхо ещё как попал...
                  Ответить
                  • попал, но как-то стал там буксовать

                    в 2008м году про него говорили буквально все. А теперь процент его как-то очень сильно упал
                    Ответить
                      • Почему все норовят писать шкриптики на путхоне?

                        > chief, puppet
                        Кто такие?
                        Ответить
                        • Я тебе тока что привел пример двух неебических инфраструктур на рубях, а ты опять при питон)

                          Я не знаю поцчему питон выпёздывает руби. Может быть потому что явное лучше неявного. Может быть потому что хорошо портируется и ембеддится. Может быть потому что приятнее читать код когда есть один (а не двадцать один) способ сделать это. Может быть потому что пистон имеет огромный научный библиотек, всякиий там сайпай, пандас, вот это всё. Может потому что его гугол любит. Хз
                          Ответить
                        • >>Кто такие?
                          одни из первых популярных систем для управления инфраструктурами

                          их пиарили еще в эпическом "континиус деливери", на них девоспы дрочат

                          у питона тоже есть salt и fabric, просто рубийное сообщество было авангарде автоматизации
                          Ответить
              • > концепцию наименьшего удивления
                Какой скучный язык. То ли дело кресты. Больше 10 лет с ними работаешь, а всё ещё удивляешься.
                Ответить
                • так аффтар так именно и грил: дескать я 10 лет работаю с крестами и 10 лет удивляюсь
                  Ответить
      • len(set(list)) == 1?

        Да, хочется чего-то эдакого, а не писать унылый цикл.
        Ответить
    • >> Для меня любой код на Ruby выглядит как говнокод

      Говнокод != говно

      Код не может выглядеть как говнокод, но может как говно

      Говнокод - понятие логическое. Что бы понять, кто код является говнокодом, нужно понять что он делает и что именно в нем не так
      Ответить

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

Где здесь C++, guest?!

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


    8