Skip to content

Latest commit

 

History

History
88 lines (66 loc) · 3.46 KB

coding_standards.md

File metadata and controls

88 lines (66 loc) · 3.46 KB

Visual Studio Settings

  • Use indentation of 3.
  • Use spaces instead of tabs.
  • If using Resharper, make sure a Resharper settings file is available to format your code.

Naming Convention

Use meaningful and understandable names. Code should read as a story and only some well known abbreviations such as DTO, PK etc. should be used.

Classes and Methods

  • Use Pascal Casing for class name public class SomeClass.
  • Use Pascal Casing for public and protected method name public void SomeMethod().
  • Use Camel Casing for private method name private int somePrivateMethod().
  • Prefix interface with I public interface IMyInterface.
  • Suffix exception classes with Exception public class SBSuiteException: Exception.

Variables

  • Prefix private/protected member variable with _ (underscore): private int _parentContainerId.
  • Use ALL_CAPS Casing for constant variables: public const double DEFAULT_PERCENTILE = 0.5;.
  • Use Camel Casing for local variable names and method arguments: int ingredientNode.
  • All members variable should be declared at one place of a class definition.
  • Prefer variables initialization at the point of declaration .
  • Do not use public members. Use properties instead.
  • Do not use Hungarian notation (e.g. b for boolean, s for strings etc.).
  • Except for program constants, never use global variables.

Comments

  • Do not comment the obvious
  • Indent comment at the same level of indentation as the code you are documenting
  • All comments must be written in English
  • Do not generate comments automatically
  • Do comment algorithm specifics. For example, why your loop starts at index 1 and not at 0.
  • If a lot of comments are required to make a method easier to understand, break down the method in smaller methods
  • Really, do not comment the obvious

Coding Style

  • No hard coded strings and magic number should be used. Declare a constant instead.

  • Method with return values should not have side effects unless absolutely required.

  • Exit early instead of having nested if statements.

    For example, instead of

    public void UpdateValue(bool isVisible, bool isEditable, double value)
    {
      if(isVisible)
      {
        if(isEditable)
        {
          _value = value;
        }
      }
    }
    

    use

    public void UpdateValue(bool isVisible, bool isEditable, double value)
    {
      if(!isVisible || !isEditable)
        return;
    
      _value = value;
    }
    
  • Do not write if statements in one line.

  • Do not write for and forEach statements in one line.

  • Always use block {} for for and forEach statements.

  • Always have a default case for switch statement, potentially throwing an exception if the default is unreachable.

Best Practices

DOs

  • Use IReadOnlyList/IReadOnlyCollection as return type or parameter of your public APIs instead of IEnumerable.
  • Create methods such as Add, Remove in your class if you need to modify an internal list instead of exposing the list to the outside world.

DON'Ts

  • Do not use IList/List as a return type or parameter of public APIs (methods or class member). By using those, you are breaking encapsulation and anyone can modify the list which makes debugging very hard.
  • Do not use ICache/IDictionary as return type or parameter of public APIs. By doing so, you are duplicating the knowledge of how the key is constructed. This is also a break in encapsulation. Create your own class derived from Cache if you need to use a Cache construct as part of API.