Giter Site home page Giter Site logo

lifegame's People

Contributors

melnyk-a avatar

Watchers

James Cloos avatar

lifegame's Issues

Неинформативные идентификаторы

Идентификаторы должны быть информативны и описывать свое предназначение.

Переменные, для которых данное правило не соблюдается:

  • item (метод LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate).
  • item (метод LifeGame.GameObjects.Universe.Execute).

Форматирование пустых методов

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

Методы, для которых данное правило не соблюдается:

  • LifeGame.Commands.MoveDownCommand.MoveDownCommand.
  • LifeGame.Commands.MoveLeftCommand.MoveLeftCommand.
  • LifeGame.Commands.MoveRightCommand.MoveRightCommand.
  • LifeGame.Commands.MoveUpCommand.MoveUpCommand.

Магические значения

«Магические значения» не должны просто так встречаться в программном коде. Вместо них стоит использовать константы или перечисления с информативными идентификаторами или сопровождать программный код комментариями, описывающими причину использования данного магического значения и его смысл.

Значения, для которых данное правило не соблюдается:

  • "h" (выражение if (item.StartsWith("h")) в методе LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate).
  • "s" (выражение if (item.StartsWith("s")) в методе LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate).
  • "w" (выражение if (item.StartsWith("w")) в методе LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate).
  • 1 (выражение _height = Convert.ToInt32(item.Substring(1)); в методе LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate).
  • 1 (выражение _width = Convert.ToInt32(item.Substring(1)); в методе LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate).
  • 1 (выражение _delay = Convert.ToInt32(item.Substring(1)); в методе LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate).
  • 'X' (выражение Console.Write('X'); в методе LifeGame.Cursor.ConsoleCursor.Show).
  • 'O' (выражение _symbol = _isAlive ? 'O' : ' '; в свойстве LifeGame.GameObjects.Cell.IsAlive).
  • ' ' (выражение _symbol = _isAlive ? 'O' : ' '; в свойстве LifeGame.GameObjects.Cell.IsAlive).
  • 2 (выражение for (int i = 0; i < Height + FrameSize * 2; ++i) в методе LifeGame.GameObjects.GameBoard.Show).
  • 2 (выражение for (int j = 0; j < Width + FrameSize * 2; ++j) в методе LifeGame.GameObjects.GameBoard.Show).
  • 3 (выражение currentCell.GetAliveNeighborsCount() == 3 в методе LifeGame.GameObjects.Universe.UpdateGameBoard).
  • 2 (выражение currentCell.GetAliveNeighborsCount() == 2 в методе LifeGame.GameObjects.Universe.UpdateGameBoard).
  • 2 (выражение int lastLine = startPosition.Y + _gameBoard.Height + _gameBoard.FrameSize * 2 в методе LifeGame.GameObjects.Universe.Execute).

Избыточность имен

Нет необходимости включать в идентификатор название типа или другое название, указывающее слишком много лишней информации (например, массив). Другими словами вместо string nameString стоит писать string name, или вместо int[] valuesArray можно написать int[] values.

Поля, для идентификаторов которых данное правило нарушается:

  • LifeGame.GameObjects.GameBoard._cellsArray.

Методы, для идентификаторов которых данное правило нарушается:

  • LifeGame.GameObjects.Universe.CreateCommandList.
  • LifeGame.GameObjects.Universe.CreateStrategyList.

Переменные, для идентификаторов которых данное правило нарушается:

  • commandList (метод LifeGame.GameObjects.Universe.CreateCommandList).

Делегирование вызова конструктора и вызов конструктора базового класса

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

Отступы между управляющей конструкцией и круглыми скобками

Между управляющей конструкцией (например, if, for, while и т.д.) и принадлежащими ей круглыми скобками должен располагаться один пробел.

Методы, в которых данное правило не соблюдается:

  • LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate.

Форматирование комментариев

Если в коде присутствует комментарий, описывающий фрагмент программного кода, то он должен располагаться либо непосредственно перед данным фрагментом программного кода, либо в конце той же строке, отдельный одним пробелом. В любом их этом случае необходимо, чтобы между // и текстом комментария был отступ в виде одного пробела.

Пример:

// Something interesting is going on down here.
if (value < 0)
{
    int x = y ^ 367; // This value is brought to us by angels.
}

Методы, в которых данное правило не соблюдается:

  • LifeGame.GameObjects.Universe.CreateCommandList.

Отступы между членами типа

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

Классы, в которых данное правило не соблюдается:

  • LifeGame.Commands.Command.
  • LifeGame.Cursor.CursorField.
  • LifeGame.GameObjects.GameBoard.
  • LifeGame.GameObjects.Point.
  • LifeGame.Memento.CareTaker.

Грамматические ошибки

В программном коде (идентификаторы, комментарии, литералы и т.д.) не допускается наличие грамматических ошибок.

Свойства, для идентификаторов которых данное правило не соблюдается:

  • LifeGame.Cursor.CursorField.Buttom.

Параметры, для идентификаторов которых данное правило не соблюдается:

  • buttom (метод LifeGame.Cursor.CursorField.CursorField).
  • neigbor (метод LifeGame.GameObjects.Cell.AddNeigbor).

Переменные, для идентификаторов которых данное правило не соблюдается:

  • buttom (метод LifeGame.GameObjects.Universe.CreateCommandList).

Порядок подключения пространств имен

Пространства имен должны подключаться по алфавиту. При использовании псевдонимов (алиасов), они должны располагаться после подключаемых имен (без отступа) в таком же порядке.

Файлы, в которых данное правило не соблюдается:

  • \GameObjects\Universe.cs.
  • \GameOverManager\GameOverControl.cs.
  • \GameOverManager\GameStrategyListCreator.cs.
  • \GameOverManager\NoStateChange.cs.
  • \GameOverManager\RepeatedEarlier.cs.
  • \Memento\BoardMemento.cs.

Сокращения в идентификаторах

В идентификаторах не должны использоваться сокращения. Однако, допускается использование общеупотребимых аббревиатур (например, HttpRequest, tcpConnection, GetUtcTime()).

Константы, для идентификаторов которых данное правило не соблюдается:

  • LifeGame.GameObjects.GameBoard._frameChar.

Параметры, для идентификаторов которых данное правило не соблюдается:

  • args (метод LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ConsoleArgumentsApplication).
  • args (метод LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate).
  • args (метод LifeGame.Program.Main).

Переменные, для идентификаторов которых данное правило не соблюдается:

  • ex (метод LifeGame.Program.Main).

Несоответствие идентификаторов

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

Параметры, для идентификаторов которых данное правило не соблюдается:

  • gameBoard (метод LifeGame.Commands.EnterCommand.EnterCommand).
  • field (метод LifeGame.Commands.MoveCommand.MoveCommand).

Форматирование свойств и индексаторов

Если get или set конструкция свойства содержит всего лишь одну строку программного кода, то следует писать данную конструкцию в одну строку (ключевое слово, фигурные скобки и оператор).

Пример:

public string Name
{
    get { return name; }
    set
    {
        if (value == null)
        {
            throw new ArgumentNullException();
        }

        name = value;
    }
}

Свойства, для которых данное правило не соблюдается:

  • LifeGame.Exception.HeightNotSpecifiedException.Message.
  • LifeGame.Exception.WidthNotSpecifiedException.Message.
  • LifeGame.GameObjects.Cell.IsAlive.
  • LifeGame.Memento.CareTaker.HistorySize.

Классы, для индексаторов, которых данное правило не соблюдается:

  • LifeGame.GameObjects.GameBoard.
  • LifeGame.Memento.CareTaker.

Порядок объявления членов в типе

При описании типа данных (класса, структуры или интерфейса) необходимо соблюдать следующий порядок объявления членов.

  • Константы.
  • Статические readonly поля.
  • Статические поля.
  • Объектные readonly поля.
  • Объектные поля.
  • Конструкторы.
  • Финализатор.
  • Индексаторы.
  • Статические свойства.
  • Объектные свойства.
  • Статические события.
  • Объектные события.
  • Статические методы.
  • Объектные методы.
  • Операторы.

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

Классы, в которых данное правило не соблюдается:

  • LifeGame.ApplicationObjects.Application.
  • LifeGame.ApplicationObjects.ConsoleArgumentsApplication.
  • LifeGame.Cursor.CursorField.
  • LifeGame.GameObjects.Cell.
  • LifeGame.GameObjects.GameBoard.
  • LifeGame.GameObjects.Universe.
  • LifeGame.Memento.CareTaker.

Замена нескольких конструкций if на if-else-if

При последовательной проверки условий, с возможностью выполнения только одного из них, необходимо использовать одну конструкцию if-else-if вместо нескольких последовательных конструкций if. Другими словами, вместо

if (value < 0)
{
    // Do something with negative value.
}
if (value > 0)
{
    // Do something with positive value.
}
if (value == 0)
{
    // Do something with zero value.
}

стоит писать

if (value < 0)
{
    // Do something with negative value.
}
else if (value > 0)
{
    // Do something with positive value.
}
else
{
    // Do something with zero value.
}

Методы, в которых данное правило не соблюдается:

  • LifeGame.ApplicationObjects.ConsoleArgumentsApplication.ReadDate.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.