This style guide is different from others you may find, because the focus is centered on readability for print and the web. We created this style guide to keep the code in our tutorials consistent.
Our overarching goals are conciseness, readability and simplicity. Also, this guide is written to keep Unity in mind.
This style guide is based on C# and Unity conventions.
- Nomenclature
- Declarations
- Spacing
- Brace Style
- Switch Statements
- Language
- Copyright Statement
- Smiley Face
- Credit
On the whole, naming should follow C# standards.
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.raywenderlich.fpsgame.hud.healthbar
PREFER:
RayWenderlich.FPSGame.HUD.Healthbar
Classes and interfaces are written in PascalCase. For example RadialSlider
.
Methods are written in PascalCase. For example DoSomething()
.
All non-static fields are written camelCase. Per Unity convention, this includes public fields as well.
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;
All properties are written in PascalCase. For example:
public int PageNumber
{
get { return pageNumber; }
set { pageNumber = value; }
}
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 are written in PascalCase. For example:
public event Action<int> ValueChanged;
In code, acronyms should be treated as words. For example:
AVOID:
XMLHTTPRequest
String URL
findPostByID
PREFER:
XmlHttpRequest
String url
findPostById
Access level modifiers should be explicitly defined for classes, methods and member variables.
Prefer single declaration per line.
AVOID:
string username, twitterHandle;
PREFER:
string username;
string twitterHandle;
Exactly one class per source file, although inner classes are encouraged where scoping appropriate.
All interfaces should be prefaced with the letter I.
AVOID:
RadialSlider
PREFER:
IRadialSlider
Spacing is especially important in raywenderlich.com code, as code needs to be easily readable as part of the tutorial.
Indentation should be done using spaces — never tabs.
Indentation for blocks uses 4 spaces for optimal readability:
AVOID:
for (int i = 0; i < 10; i++)
{
Debug.Log("index=" + i);
}
PREFER:
for (int i = 0; i < 10; i++)
{
Debug.Log("index=" + i);
}
Indentation for line wraps should use 4 spaces (not the default 8):
AVOID:
CoolUiWidget widget =
someIncrediblyLongExpression(that, reallyWouldNotFit, on, aSingle, line);
PREFER:
CoolUiWidget widget =
someIncrediblyLongExpression(that, reallyWouldNotFit, on, aSingle, line);
Lines should be no longer than 100 characters long.
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.
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 come with default
case by default (heh). 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;
}
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.
The following copyright statement should be included at the top of every source file:
/*
* Copyright (c) 2021 Razeware LLC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without 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, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
* distribute, sublicense, create a derivative work, and/or sell copies of the
* Software in any work that is designed, intended, or marketed for pedagogical or
* instructional purposes related to programming, coding, application development,
* or information technology. Permission for such use, copying, modification,
* merger, publication, distribution, sublicensing, creation of derivative works,
* or sale is expressly withheld.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
Smiley faces are a very prominent style feature of the raywenderlich.com site! It is very important to have the correct smile signifying the immense amount of happiness and excitement for the coding topic. The closing square bracket ] is used because it represents the largest smile able to be captured using ASCII art. A closing parenthesis (":)") creates a half-hearted smile, and thus is not preferred.
AVOID:
:)
PREFER:
:]
NOTE: Do not use smileys in your scripts.
This style guide is a collaborative effort from the most stylish raywenderlich.com team members: