Когда длинная линия слишком длинная? - PullRequest
1 голос
/ 16 января 2011

Это работает (Visual Basic .NET), но кажется комично длинным со всеми методами LINQ to Object и измерениями на месте.

For Each PNGFile As System.IO.FileInfo In New System.IO.DirectoryInfo(Server.MapPath(".\Archive")).GetFileSystemInfos("*.png", System.IO.SearchOption.AllDirectories).OrderByDescending(Function(f) f.LastWriteTimeUTC).Skip(PageSize * Page).Take(PageSize)
    'Do stuff with PNGFile
Next

Мне нравится, что все это в одной строке, и я думаю, что даже для меня это выглядит логично. Но моя интуиция говорит мне, что следующей бедной душе понятно, что интерпретировать мой код не нужно. Либо это? Как вы решаете? Стоит ли разделять эту строку на несколько других операторов измерения и присваивания? Как бы вы разбили эту конкретную линию в качестве примера?

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

Ответы [ 5 ]

6 голосов
/ 16 января 2011

Я обычно разбиваю строки на новый метод расширения LINQ, для меня это выглядит чище:

For Each PNGFile As System.IO.FileInfo In New  System.IO.DirectoryInfo(Server.MapPath(".\Archive"))
   .GetFileSystemInfos("*.png",System.IO.SearchOption.AllDirectories)
   .OrderByDescending(Function(f) f.LastWriteTimeUTC)
   .Skip(PageSize * Page)
   .Take(PageSize)
      'Do stuff with PNGFile
Next
3 голосов
/ 16 января 2011

Честно говоря, я действительно ненавижу видеть такой код ... и не только потому, что это VB;)

Почему бы вам не разбить его на несколько операторов?Это упрощает чтение и отладку, потому что вы можете посмотреть промежуточные переменные.

Вот как я бы написал:

Dim archivePath As String = Server.MapPath(".\Archive")
Dim archiveDir As New System.IO.DirectoryInfo(archivePath)
Dim allFiles = achiveDir.GetFileSystemInfos("*.png", System.IO.SearchOption.AllDirectories)
Dim filesToDisplay = allFiles.OrderBy(Function(f) f.LastWriteTimeUTC)
                             .Skip(PageSize * Page)
                             .Take(PageSize)

For Each PNGFile As System.IO.FileInfo in filesToDisplay
    'Do stuff with PNGFile
Next

ИМХО, как только вам нужночтобы подумать больше 2 секунд, чтобы понять строку кода, вы можете считать, что это слишком долго ...

1 голос
/ 16 января 2011

Да, нет худшей ошибки, чем та, которую вы не видите, код, который находится справа от края экрана. У меня были некоторые реальные проблемы, прежде чем я сам обнаружил это и сделал об этом каменное правило.

Если у вас еще нет VB 10, вы можете использовать пробел + подчеркивание, чтобы разбить строку:

    For Each PNGFile As System.IO.FileInfo _
        In New System.IO.DirectoryInfo("mumble") _
           .GetFileSystemInfos("*.foo")
        '' etcetera
    Next
1 голос
/ 16 января 2011

Чтобы перейти к более общему уровню:

Я считаю, что (строка) кода отформатирована правильно, когда это "просто на глаз".

В вашем примере мне нужнослишком много прокручивать, поэтому я бы разбил его на несколько строк, более или менее похожих на то, как это делал BrokenGlass.

Конечно, это очень субъективно, но в целом я предпочитаю читать код, используя только мои глазане используя клавиатуру и / или мышь.

1 голос
/ 16 января 2011

Как сказал BrokenGlass, я бы остановился на расширениях LINQ:

  For Each PNGFile As System.IO.FileInfo In New  System.IO.DirectoryInfo(Server.MapPath(".\Archive"))
   .GetFileSystemInfos("*.png",System.IO.SearchOption.AllDirectories)
   .OrderByDescending(Function(f) f.LastWriteTimeUTC)
   .Skip(PageSize * Page)
   .Take(PageSize)
      'Do stuff with PNGFile
Next

Чтобы перейти к следующему пункту, как определить максимальную длину линии: я выбираю два варианта.Если код, который я пишу, является внутренним, или я знаю, к кому он идет, то я устанавливаю максимальную длину строки в 120 символов.Если код, который я пишу, может стать глобальным, когда я не знаю состояния другого компьютера программиста, тогда я использую максимальную длину строки 80 символов.

...