Как не тратить место на экране при написании разреженного кода C #? - PullRequest
24 голосов
/ 27 августа 2010

Общепринятый способ форматирования кода C # выглядит следующим образом:

namespace SomeNamespace
{
    namespace SomeSubNamespace
    {
        class SomeClass
        {
            void SomeFunction()
            {
                using (var someFile = new StreamWriter(somePath))
                {
                    try
                    {
                        lock(someCriticalSection)
                        {
                            using (var someDisposableThing1 = new DisposableThing())
                            {
                                DoSomething();                            
                                using (var someDisposableThing2 = new DisposableThing())
                                {
                                    lock(someOtherCriticalSection)
                                    {
                                        DoSomethingMore();
                                    }
                                }
                            }
                        }
                    }
                    catch(Exception e)
                    {
                        Log(e);
                    }
            }
        }
    }
}

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

PS: Обратите внимание, что я еще не использовал ни одного оператора if!

Ответы [ 15 ]

3 голосов
/ 27 августа 2010

Если я собираюсь что-то попробовать / поймать, я бы совмещал любые соседние блоки использования. Точно так же я бы агрегировал пространства имен, поэтому что-то ближе к:

namespace SomeNamespace.SomeSubNamespace
{
    class SomeClass
    {
        void SomeFunction()
        {
            StreamWriter someFile;
            try
            {
                someFile = new StreamWriter(somePath);

                lock(someCriticalSection)
                {
                    using (var someDisposableThing1 = new DisposableThing())
                    {
                        DoSomething();                            
                        using (var someDisposableThing2 = new DisposableThing())
                        {
                            lock(someOtherCriticalSection)
                            {
                                DoSomethingMore();
                            }
                        }
                    }
                }
            }
            catch(Exception e)
            {
                Log(e);
            }
            finally
            {
                if( someFile != null )
                {
                     someFile.Dispose();
                }
            }
        }
    }
}
2 голосов
/ 27 августа 2010

Я согласен с другими ответами, которые я в основном живу с ним - для моей команды у нас есть либо мониторы с высоким разрешением, либо два монитора (или оба), так что мы не разрабатываем 800x600.

Но следует иметь в виду, что использование табуляции было бы лучше, если бы вы использовали реальный интервал, так как некоторые разработчики используют 2 пробела для табуляции, некоторые 4, некоторые 6. Поэтому, хотя отформатированный код может хорошо смотреться на одном разработчике IDE, это может выглядеть не так хорошо на чужой. (Я видел некоторые ужасные результаты от этого.)

VS2010 имеет приятный плагин из Extensions Manager, называемый инструментами повышения производительности, который определяет наличие в вашем файле сочетаний вкладок и пробелов и позволяет преобразовывать все в табуляции или пробелы («Исправить смешанные вкладки»). Это действительно помогает очистить ваш файл (даже если он не выглядит так, как будто он что-то делает!). Здорово, если вы делитесь кодом между командами.

1 голос
/ 30 августа 2010

Некоторые общие идеи:

  • Объедините эти блоки пространства имен в одно.
  • Соберите using операторов в одном месте, если можете.
  • Если выВы не фанатик "Даже отдельные утверждения должны включать {} s!" , вы можете избавиться от скобок между using и try..catch блоками.
  • Подумайтео том, действительно ли необходимы вложенные lock s, или будет достаточно самого внешнего lock.

Эти могут привести к следующему коду (обратите внимание, что значениеВаш пример гипотетического кода может быть не полностью сохранен):

namespace SomeNamespace.SomeSubNamespace
{
    class SomeClass
    {
        void SomeFunction()
        {
            using (var someFile = new StreamWriter(somePath))
            try
            {
                lock(someCriticalSection)
                {
                    using (var someDisposableThing1 = new DisposableThing())
                    using (var someDisposableThing2 = new DisposableThing())
                    {
                        DoSomething();                            
                        DoSomethingMore();
                    }
                }
            }
            catch(Exception e)
            {
                Log(e);
            }
        }
    }
}

(Вы можете даже переместить два using s в другой оператор using за пределами lock, если ваш код позволитэто. Вы могли бы также заменить операторы using явными вызовами Dispose в блоке finally, как предложено в другом ответе.)

1 голос
/ 27 августа 2010

В дополнение к тому, что здесь сказали другие, единственное, что я делаю, чтобы уменьшить эффект, - это использование пропорционально разнесенного шрифта.Текст более читабелен, но не такой широкий.Это также вынуждает вас использовать вкладки над пробелами для выравнивания (что, разумеется, почему, во-первых, добрый Господь дал нам вкладки)

Я лично использую Comics Sans MS, но это действительно сводит коллег с ума ....

1 голос
/ 27 августа 2010

использование CodeRush , это сделает навигацию по вашему коду намного лучше

вы получите что-то вроде этого alt text

...