Это плохая практика написания длинного однострочного кода? - PullRequest
4 голосов
/ 06 ноября 2011

Я продолжал писать довольно длинный однострочный код (под влиянием оболочки), например:

def parseranges(ranges, n):
    """
    Translate ":2,4:6,9:" to "0 1 3 4 5 8 9...n-1"
               == === ==      === ===== =========
    """
    def torange(x, n):
        if len(x)==1:
            (x0, ) = x
            s = 1 if x0=='' else int(x0)
            e = n if x0=='' else s
        elif len(x)==2:
            (x0, x1) = x
            s = 1 if x0=='' else int(x0)
            e = n if x1=='' else int(x1)
        else:
            raise ValueError
        return range(s-1, e)
    return sorted(reduce(lambda x, y:x.union(set(y)), map(lambda x:torange(x, n), map(lambda x:x.split(':'), ranges.split(','))), set()))

Я чувствовал себя хорошо, когда писал его.
Я думал, что длинный однострочныйкод - это стиль функционального программирования.
Но через несколько часов мне стало плохо из-за этого.
Боюсь, меня будут критиковать люди, которые могут его поддерживать.
К сожалению, я получилЯ писал такие однострочные.
Я действительно хочу узнать мнение других.
Пожалуйста, дайте мне несколько советов.Спасибо

Ответы [ 4 ]

6 голосов
/ 06 ноября 2011

Я бы сказал, что это плохая практика, если вы жертвуете читабельностью.

1 голос
/ 06 ноября 2011

Если производительность не является основным фактором, читаемость кода должна иметь высокий приоритет. Это действительно важно для удобства обслуживания.

Соответствующая цитата из книги «Структура и интерпретация компьютерных программ».

«Программы должны быть написаны для того, чтобы люди могли их читать, и только для машин - только для запуска».

1 голос
/ 06 ноября 2011

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

Мой совет: действуй согласно этому принципу. Задайте себе вопрос: может ли кто-нибудь легче понять любой фрагмент моего кода? Когда ответом является , а не a 100% «Нет, я даже не могу придумать лучшего способа выразить проблему / решение». затем следуйте своим внутренним ощущениям и переформатируйте или перекодируйте эту часть.

1 голос
/ 06 ноября 2011

Первый и третий примеры приемлемы для меня.Они достаточно близки к области приложения, так что я легко вижу смысл кода.

Второй пример слишком умный.Я даже понятия не имею о его назначении.Можете ли вы переписать его пятью строками, дав переменным более длинные имена?

...