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

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
def get_line_from_file(path, line)
  result = nil

  File.open(path, "r") do |f|
    while line > 0
      line -= 1
      result = f.gets
    end
  end

  return result
end

get_line_from_file("/tmp/foo.txt", 20)

(с) stackoverflow.com

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

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

  • я не рубист, поэтому не пони маю, где тут избыток говна.
    если предположить что синтаксис корректен, то остается только лишнее присвоение в цикле, отсутствие проверок границ и обработки исключений.
    что я пропустил?
    Ответить
  • path = '/tmp/foo.txt'
    line = 20
    File.open(path, 'r') {|f| f.readlines[line]}
    Ответить
    • Ну или
      path = '/tmp/foo.txt'
      line = 20
      File.open(path, 'r', &:readlines)[line]
      Ответить
      • Ога. Или через цикл гетсов, чтобы память не хавать.
        Ответить
        • дык тоже самое и получится, только без лишних переменных.

          и вопрос, что будет, если заказать тысячную строку из семистрочного файла?
          мы провалимся в эксепшн? в возвращаемой строке будет EOF? случится руби-магия?
          [мне так, для общего развития]
          Ответить
          • вернется просто nil. вернется потому что мы обращаемся к 1000му элементу массива из 7 элементов.
            Ответить
      • Это не аналог оригинального кода. Представь себе файл в 100_000 строк, ты только что весь его записал в массив и оставил там пока GC до него не доберётся. В реальном приложении это убийца производительности.

        Пример который приведён как говнокод, на файле в 100 метров результат выдал за 0.005s, все же примеры с readlines занимают от 15 до 25 секунд.

        Оригинальный "говнокод" ни разу не говнокод.
        Ответить
        • И вообще, вся эта идея с обратным отсчётом от line до 0 попахивает гениальностью обфускатора 🙂 Видимо в этом и есть WTF, но код рабочий.
          Ответить
        • Рельсовики такие говнокодеры. Я всегда это знал. Ты порылся в говне только что, и сказал, что это не говнокод. Я шоке.

          Ты сказал элементарную вещь, которую и школьник должен знать, чтобы не кушать память, и тебя за это плюсанули. Меня за тоже самое тремя постами выше минусанули два раза. Вывод: на этом сайте одно дерьмо обитает. И код от говнокода вы не отличаете.
          Ответить
          • Тебя походу минусанули за персоналию скандальную.

            Я не говорю что код хороший, потому как по моим критериям читабельность чаще всего выше производительности. Но до говнокода помоему этот пример не дотягивает. После DailyWTF это даже выглядит адекватно 🙂
            Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8