lifegame's People
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
.
Загрузка репозитория на mystat
Необходимо загрузить репозиторий на mystat.
Форматирование комментариев
Если в коде присутствует комментарий, описывающий фрагмент программного кода, то он должен располагаться либо непосредственно перед данным фрагментом программного кода, либо в конце той же строке, отдельный одним пробелом. В любом их этом случае необходимо, чтобы между //
и текстом комментария был отступ в виде одного пробела.
Пример:
// 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.GameOverManager.IGameOverStrategy.IsGameOver
.
Отступы между членами типа
Между членами типа (поля, конструкторы, свойства, методы и т.п.) должны быть отступы в виде пустой строки. Отступы не стоит делать между каждыми двумя полями, константами и событиями.
Классы, в которых данное правило не соблюдается:
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.