Code Style - kukkich/Graphify GitHub Wiki
Именование
Используйте camaleCase Переменные и параметры методов именуются с маленькой буквы:
public double GetCircleArea(double radius)
{
var area = Math.PI * radius * radius;
return area;
}
Классы и все их члены (свойства, методы, константы, события, индексеры и т.д.) именуются с большой буквы:
public class Circle
{
public double Radius { get; set; }
public Circle(double radius)
{
...
}
public double GetArea()
{
...
}
}
За исключением приватных не статических членов:
public class Circle
{
private readonly double _radius;
public Circle(double radius)
{
_radius = radius;
}
}
Имена интерфейсов начинаются с заглавной буквы I
:
public interface IShape
{
double GetArea();
}
public class Circle : IShape
{
...
}
Порядок расположения членов в классе
public class Template
{
// Constant Fields
public const int PublicConstant = 1;
protected const int ProtectedConstant = 2;
private const int PrivateConstant = 3;
// Properties
public static int PublicStaticProperty { get; set; }
public int PublicProperty { get; set; }
protected static int ProtectedStaticProperty { get; set; }
protected int ProtectedProperty { get; set; }
private static int PrivateStaticProperty { get; set; }
private int PrivateProperty { get; set; }
// INDEXERS (if any)
// public int this[int index] { get { return 0; } set { } }
// Fields
public static int PublicStaticField;
public int PublicField;
protected static int ProtectedStaticField;
protected int ProtectedField;
private static int PrivateStaticField;
private static readonly int PrivateStaticReadonlyField = 9;
private readonly int _privateReadonlyField = 8;
private int _privateField;
// Constructors
public Template()
{
}
// INTERFACE IMPLEMENTATIONS (if any)
// e.g., public void SomeMethod() { }
// Methods
public static void PublicStaticMethod() { }
public void PublicMethod() { }
protected static void ProtectedStaticMethod() { }
protected void ProtectedMethod() { }
private static void PrivateStaticMethod() { }
private void PrivateMethod() { }
}
Не используйте сокращения (никогда!)
Помните, что ваш код кто-то будет читать и если для вас может быть очевидно, что значит sysCtx
, то для того, кто это будет читать, sysCtx
будет лишь каким-то набором из букв. Не ленитесь писать полное название, сэкономленные 2 секунды на написание сокращенного названия не стоят того. Особенно касается таких названий для полей/переменных, как p, x, y, t и так далее.
И того:
Неправильно
_ctx = new SysCtx();
var clr = _palette.GetColor();
View.ClrBtn.Click();
Правильно
_context = new SystemContext();
var color = _palette.GetColor();
View.ClearButton.Click();
Исключения
Однако можно допустить в некоторых случаях использование сокращений, в основном при использовании делегатов, где очевидно, чем является аргумент, или где он не важнен, в таких случаях пишется короткое название, чтобы длинное название не отвлекало от чтения основного кода. Например, в LINQ запросах аргумент делегата можно называть x
или по первой букве переменной:
var oleg = users.FirstOrDefault(x => x.Name == "Oleg");
var masha = users.FirstOrDefault(u => u.Name == "Masha");
var nearestPoints = points.Where(p => DistanseBetween(p, targetPoint) <= eps)
.ToList();
или в методах API ReactiveUI ViewModel называют vm:
this.WhenActivated(disposables =>
{
this.Bind(ViewModel, vm => vm.ReactiveProperty, view => view.ValueBox.Text)
.DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.IncrementCommand, view => view.IncrementButton)
.DisposeWith(disposables);
});
В целом старайтесь избегать неявностей. Например, модификатор членов класса по умолчанию private, однако, если вы добавляете приватный член, указывайте это явно:
Неправильно:
public class Circle
{
readonly int _radius;
public Circle(int radius)
{
_radius = radius;
}
}
Правильно:
public class Circle
{
private readonly int _radius;
public Circle(int radius)
{
_radius = radius;
}
}
Используйте ранний выход из метода для лучшей читаемости
Плохой вариант:
public void BadMethod()
{
var result = DoSomething();
if (result.IsSucceed)
{
// method continue
// ...
}
throw new Exception();
// or return something
}
Правильный вариант:
public void GoodMethod()
{
var result = DoSomething();
if (!result.IsSucceed)
{
throw new Exception();
// or return something
}
// method continue
// ...
}