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

    −111

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 25 Октября 2010

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

    • result = f.gets

      это?
      Ответить
    • я не рубист, поэтому не пони маю, где тут избыток говна.
      если предположить что синтаксис корректен, то остается только лишнее присвоение в цикле, отсутствие проверок границ и обработки исключений.
      что я пропустил?
      Ответить
      • полагаю что в руби есть встренная функция, и мы имеем дело с велосипедом
        Ответить
        • функция для взятия строки из файла по номеру? при этом индексация с единицы?
          чтой то я сильно сомневаюсь.
          Ответить
        • и действительно!
          IO.readlines(source)[count]
          Ответить
      • Там лишнего около 80%. http://stackoverflow.com/questions/4014352
        Ответить
    • 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 это даже выглядит адекватно :)
              Ответить
      • [code]File.readlines(path)[line][\code]
        Ответить
    • показать все, что скрытоНе знаете руби, хера минусы лепить? Школота.
      Ответить
    • о илитка понабежала
      Ответить

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