Skip to content

Instantly share code, notes, and snippets.

@MzHmO
Last active October 10, 2023 18:38
Show Gist options
  • Save MzHmO/b46953b0fa03819d78b257130811d577 to your computer and use it in GitHub Desktop.
Save MzHmO/b46953b0fa03819d78b257130811d577 to your computer and use it in GitHub Desktop.
Csharp urfu

Правила оформления кода

Лайфхаки

  • Переименуйте всё, что называется неправильно. Это можно делать двойным нажатием комбинации клавиш Ctrl+R (работает для VS и Rider).
  • Исправьте форматирование кода. Частично с этим поможет комбинация клавиш: Ctrl+K, Ctrl+D для VS, Ctrl+Alt+L для Rider, Ctrl+Alt+Enter для Rider, использующий схему клавиш VS.
  • Повторяющиеся части кода вынесите во вспомогательные методы. Это можно сделать, выделив несколько строк кода и нажав: Ctrl+R, Ctrl+M для VS, Ctrl+Alt+M для Rider.

Общие правила

Стилизация

Следует стирать неактуальные комментарии

//Неправильно
int GetOne()
{
   //TODO Напишите здесь return 1
   return 1;
}

// Правильно
int GetOne()
{
   return 1;
}

Функции и методы

  • Проверить, что нет скобок после return
return (a + b + c); <- неправильно

return a + b + c; <- правильно
  • Нет пустых строк после объявления метода и после return
// Неправильно
int GetOne()
{

   return 1;

}

// Правильно
int GetOne()
{
    return 1;
}
  • При записи длинной цепочки вызовов методов следует писать каждый вызов в новой строке
// Неправильно
return lines.Where(...)
    .Select(...)...
	
// Правильно
return lines
    .Where(...)
    .Select(...)
    ...

Переменные

  • Проверить использование var, вместо явного объявления типа (где возможно)
string s = "abc"; <- неправильно
var s = "abc"; <- правильно
  • Проверить, что все названия переменных на английском языке
// Неправильно
var procent = 0.05;
string[] stroki;

// Правильно
var percent = 0.05;
string[] lines;
  • Названия переменных должны быть осмысленными. Чем больше область видимости, тем развернутее должно быть название
// Неправильно
var p = 0.05;

// Правильно
var percent = 0.05;
  • В названиях не должно присутствовать of, the, a
// Неправильно
ColorOfCar
theSun
aStar

// Правильно
CarColor
sun
star
  • Булевы переменные должны быть в виде вопросов, на которые можно однозначно ответить да или нет. Не использовать название flag
// Неправильно
var flag = false;

// Правильно
var isSorted = true;
  • Название переменных должны быть написаны в виде lowerCamelCase
// Неправильно
var percent_per_month = 0.05;
var PercentPerMonth = 0.05;

// Правильно
var percentPerMonth = 0.05;
  • В названии коллекций должно быть с множественным числом
// Неправильно 
Apple[] Apple

// Правильно
Apple[] Apples
  • Не следует писать тип коллекции в названии. Исключение лишь если в коде присутствует коллекция другого типа с теми же данными
// Неправильно
Orange[] ArrayOfOranges
List<Apple> AppleList

// Правильно
Orange[] Oranges
List<Apple> Apples
  • Следует обрамлять арифметические, логические операторы, оператор присваивания пробелами
// Неправильно
if (a>b) 
    c=0; 

// Правильно
if (a > b) 
    c = 0; 

Классы и ООП

  • Следует всегда явно указывать модификатор доступа.
// Неправильно
class Vector
	
// Правильно
public class Vector
  • Соблюдайте порядок элементов внутри класса. Сначала поля и свойства, потом конструктор, затем публичные методы, в конце приватные методы.

  • Между методами всегда должна оставаться пустая строка

// Неправильно
public static void DoSomething()
{
    ...
}
public static void DoSomethingElse()
{
    ...
}


// Правильно
public static void DoSomething()
{
    ...
}

public static void DoSomethingElse()
{
    ...
}
  • Для записи однострочных свойств используется синтаксис =>
// Неправильно
public int Length
{
    get {return bytes.Length;}
}


// Правильно
public int Length => bytes.Length;

Ветвления и циклы

  • Тело if всегда в новой строке. Тело цикла всегда в новой строке.
// Неправильно
if (a > b) return 0;

// Правильно
if (a > b)
    return 0;
  • Не стоит писать else, если выше везде происходит выход из тела if
// Неправильно
if (a > b)
{
   return 10;
}
else 
{return 20;
}


// Правильно
if (a > b)
{
   return 10;
}return 20;
  • Если в теле if больше одной строки, то следует использовать скобки
// Неправильно
if (a > b) 
 if (a < c)
        return 0;

// Правильно
if (a > b)
{
    if (a < c)
        return 0;
}
  • Все, что возможно, то желательно выделять в методы. Не писать один и тот же код два раза
// Неправильно
var lenAB = Math.Sqrt((ax-bx)*(ax-bx) + (ay-by)*(ay-by));
var lenBC = Math.Sqrt((bx-cx)*(bx-cx) + (by-cy)*(by-cy));

// Правильно
double GetLength(
    double ax,
    double ay,
    double bx,
    double by)
{
    return Math.Sqrt((ax-bx)*(ax-bx) + (ay-by)*(ay-by));
} 

var lenAB = GetLength(ax, ay, bx, by);
var lenBC = GetLength(bx, by, cx, cy);
  • Не сравнивать bool с константой с помощью ==
// Неправильно
if (success == true)if (success == false)
	
	
// Правильно
if (success)if (!success)
  • Названия методов должны быть в UpperCamelCase
// Неправильно
public static double get_length()
public static double getLength()
	
	
// Правильно
public static double GetLength()
  • Название метода должно начинаться с глагола
// Неправильно
public static double Length()
	
// Правильно
public static double GetLength()
  • После for, if, ... нужно ставить пробел
// Неправильно
if(a > b)
    return 0;

// Правильно
if (a > b)
    return 0; 
  • Нужно правильно переносить тернарный оператор
// Неправильно
return needAutocomplete ? 
	Сommand.AutoComplete : Command.Ignore;


// Правильно
return needAutocomplete
    ? Сommand.AutoComplete
	: Command.Ignore;
  • Нужно переносить выражения так, чтобы новая строка начиналась с оператора
// Неправильно
if (longExpression &&
    anotherExpression)

	
// Правильно
if (longExpression
   && anotherExpression)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment