Skip to content

Coding Style

kertaskids edited this page Sep 24, 2019 · 3 revisions

Coding Style Guide

A style guide for you to write a code for the project.

Our overarching goals are conciseness, readability and simplicity. Also, this guide is written to keep Unity in mind.

Table of Contents

Nomenclature

On the whole, naming should follow C# standards.

Namespaces

Namespaces are all PascalCase, multiple words concatenated together, without hyphens ( - ) or underscores ( _ ). The exception to this rule are acronyms like GUI or HUD, which can be uppercase:

AVOID:

com.pandonga.vrgame.UI.timer

PREFER:

Pandonga.VRGame.UI.Timer

Classes & Interfaces

Classes and interfaces are written in PascalCase. For example MannaSlider.

Methods

Methods are written in PascalCase. For example MethodName().

Fields

All non-static fields are written camelCase. Per Unity convention, this includes public fields as well. Except for private.

For example:

public class MyClass {
    public int publicField;
    int packagePrivate;
    private int _myPrivate;
    protected int myProtected;
}

AVOID:

private int myPrivateVariable

PREFER:

private int _myPrivateVariable

Static fields are the exception and should be written in PascalCase:

public static int TheAnswer = 42;

Properties

All properties are written in PascalCase. For example:

public int PageNumber {
    get { return pageNumber; }
    set { pageNumber = value; }
}

Parameters

Parameters are written in camelCase.

AVOID:

void DoSomething(Vector3 Location)

PREFER:

void DoSomething(Vector3 location)

Single character values are to be avoided except for temporary looping variables.

Actions

Actions are written in PascalCase. For example:

public event Action<int> ValueChanged;

Misc

In code, acronyms should be treated as words. For example:

AVOID:

XMLHTTPRequest
String URL
findPostByID

PREFER:

XmlHttpRequest
String url
findPostById

Declarations

Access Level Modifiers

Access level modifiers should be explicitly defined for classes, methods and member variables.

Fields & Variables

Prefer single declaration per line.

AVOID:

string username, twitterHandle;

PREFER:

string username;
string twitterHandle;

Classes

Exactly one class per source file, although inner classes are encouraged where scoping appropriate.

Interfaces

All interfaces should be prefaced with the letter I.

AVOID:

MannaSlider

PREFER:

IMannaSlider

Spacing

Spacing is absolutely important for an easy read.

AVOID:

class  Manna;
x = y+z;
Damage = damageArray[i +1];

PREFER:

class Manna;
x = y + z;
Damage = damageArray[i+1];

Indentation

Indentation should be done using tabs, not spaces.

Line Length

Lines should be no longer than 100 characters long.

Vertical Spacing

There should be exactly one blank line between methods to aid in visual clarity and organization. Whitespace within methods should separate functionality, but having too many sections in a method often means you should refactor into several methods.

Brace Style

All braces get their own line as it is a C# convention:

AVOID:

class MyClass
{
    void DoSomething()
    {
        if (someTest)
        {
          // ...
        }
        else
        {
          // ...
        }
    }
}

PREFER:

class MyClass {
    void DoSomething() {
        if (someTest) {
          // ...
        } else {
          // ...
        }
    }
}

Conditional statements are always required to be enclosed with braces, irrespective of the number of lines required.

AVOID:

if (someTest)
    doSomething();  

if (someTest) doSomethingElse();

PREFER:

if (someTest) {
    DoSomething();
}  

if (someTest){
    DoSomethingElse();
}

Switch Statements

Switch-statements come with default case by default. If the default case is never reached, be sure to remove it.

AVOID:

switch (variable) {
    case 1:
        break;
    case 2:
        break;
    default:
        break;
}

PREFER:

switch (variable) {
    case 1:
        break;
    case 2:
        break;
}

Language

Use US English spelling.

AVOID:

string colour = "red";

PREFER:

string color = "red";

The exception here is MonoBehaviour as that's what the class is actually called.

Copyright Statement

/*
 * Copyright (c) Pandonga Creatives
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this documentation files, to deal restriction, including without 
 * limitation the rights to use, copy, modify, merge, publish, distribute, 
 * sublicense, and/or sell copies of the Software, and to permit persons to 
 * whom the Software is furnished to do so.
 */

Credits

This style guide is edited by kertaskids from Ray Wenderlich.

Clone this wiki locally