Updated readme to cover desired code style

* Updated readme to cover desired code style including class structure, formatting, and line settings.
This commit is contained in:
Jeff Campbell 2019-04-07 23:22:00 +02:00
parent 943451b3d5
commit a9b6926d79

View File

@ -112,5 +112,75 @@ The reason for this project structure is that we want to include tests and examp
- use the local source in the example repo
- referencing this git repo in another project's manifest file
### Style Guide
#### Language Usage
* Mark closed types as sealed to enable proper devirtualization (see [here](https://blogs.unity3d.com/2016/07/26/il2cpp-optimizations-devirtualization/) for more info).
* Avoid LINQ usage for runtime usage except where absolutely possible (`ToList` or `ToArray` for example) and avoid using `ForEach`. Using these methods creates easily avoidable garbage. Editor usage is another story as performance is not as generally important.
#### Layout
There is an `.editorconfig` at the root of the repository located [here](/.editorconfig) that can be used by most IDEs to help ensure these settings are automatically applied.
* **Indentation:** 1 tab = 4 spaces (no tab character)
* **Desired width:** 120-130 characters max per line
* **Line Endings:** Unix (LF), with a new-line at the end of each file.
* **White Space:** Trim empty whitespace from the ends of lines.
#### Naming and Formatting
* Namespaces, Defined Types, Methods, and Events should all be in upper pascal case.
* Public fields should be in lower pascal case like `isLoaded` while private fields should be lower pascal case prefixed with a `_` character like `_isLoaded`.
* Public and private properties should be in upper pascal case `IsLoaded`.
* Readonly, static, or const fields should be in upper pascal case `IsLoaded`.
#### Structure
* Follow good encapsulation principles and try to limit exposing fields directly as public; unless necessary everything should be marked as private/protected unless necessary. Where public access to a field is needed, use a public property instead.
* Where classes or methods are not intended for use by a user, mark these as `internal`.
* Order class structure like so:
* Namespace
* Internal classes
* Properties (Public/Private)
* Fields (Public/Private)
* Unity Methods
* Primary Methods
* Helper Methods
* Lines of code that are generally longer than 120-130 characters should generally be broken out into multiple lines. For example, instead of:
`public bool SomeMethodWithManyParams(int param1, float param2, List<int> param3, out int param4, out int param5)...`
do
```
public bool SomeMethodWithManyParams(
int param1,
float param2,
List<int> param3,
out int param4,
out int param5)...
```
#### Example Formatting
```
using System;
using UnityEngine;
namespace Example
{
public class Foo : MonoBehavior
{
public int SomeValue { get { return _someValue; } }
[SerializeField]
private int _someValue;
private const string Warning = "Somethings wrong!";
private void Update()
{
// Do work
Debug.Log(Warning);
}
}
}
```
### Pull requests
Pull requests should be made to the [canary branch](https://github.com/AdamRamberg/unity-atoms/tree/canary).