Coding standards

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
m (Robot: Cosmetic changes)
(18 intermediate revisions by 6 users not shown)
Line 1: Line 1:
Generally speaking
+
__NOTOC__
 +
{{Quicklinks}}
 +
<br />
 +
== Guidelines ==
 +
 
 +
We follow standard C# coding guidelines unless otherwise stated: [http://msdn.microsoft.com/en-us/library/czefa0ke.aspx]. Corrections to existing files to follow these standards are welcome.
 +
 
 +
=== Source Repository (SVN) ===
 +
 
 +
* For new files execute: svn propset svn:eol-style native <file path>
 +
 
 +
=== Formatting ===
  
 
* We put curly brackets on separate lines and use 4 space tabs.  
 
* We put curly brackets on separate lines and use 4 space tabs.  
* Tab themselves should be spaces, not actual hard tabs.
+
* Tab themselves should be spaces, not actual hard tabs.
* Method names have all their words capitalized (as opposed to Java, which culturally uses camelCase).
+
* Use string instead of String when refering to the System.String type.
* Unless the classes are very trivial, there should be one class per file.
+
 
 +
=== Naming ===
 +
 
 +
* We use full words to name things.
 +
* Aim for assosiative naming so that the logic is clear without explicit comments.
 +
 
 +
=== Classes ===
 +
 
 +
Unless the classes are very trivial, there should be one class per file.
 +
 
 +
<pre>
 +
public class SimpleExample
 +
{
 +
 
 +
}
 +
</pre>
 +
 
 +
=== Methods ===
 +
 
 +
Method names have all their words capitalized (as opposed to Java, which culturally uses camelCase).
 +
 
 +
<pre>
 +
public class SimpleExample
 +
{
 +
    public void ExampleMethod(int exampleAttribute)
 +
    {
 +
        string exampleVariable = "test value";
 +
    }
 +
}
 +
</pre>
 +
 
 +
=== Fields ===
 +
 
 +
Fields should be always initialized when declared. Member fields start with m_ and continue in camelCase:
 +
 
 +
<pre>
 +
public class SimpleExample
 +
{
 +
    private long m_exampleMemberField = 0;
 +
    private static double m_exampleStaticMemberField = 2;
 +
 
 +
    public void ExampleMethod(int exampleAttribute)
 +
    {
 +
        string exampleVariable = "test value";
 +
    }
 +
}
 +
</pre>
 +
 
 +
=== Warnings ===
 +
 
 +
* Please keep the code warning free, using #pragma only if absolutely necessary. For instance
 +
 
 +
#pragma warning disable 0612
 +
            ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Script]              = "_script.txt";  // Not sure if we'll ever see this
 +
#pragma warning restore 0612
 +
 
 +
=== Logging ===
  
For instance.
+
Each class should have their own logger which is declared private and is not inherited:
  
public void LazeAroundForAnHour()
+
<pre>
{
+
public class SimpleExample
    Thread.Sleep(3600);
+
{
}
+
    private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 +
}
 +
</pre>
  
Otherwise in general, just respect the conventions already being used in the file you're editing (which should often follow the [http://msdn.microsoft.com/en-us/library/czefa0ke.aspx standard C# coding guidelines]).
+
[[Category:Standards]]

Revision as of 19:52, 3 March 2012


Guidelines

We follow standard C# coding guidelines unless otherwise stated: [1]. Corrections to existing files to follow these standards are welcome.

Source Repository (SVN)

  • For new files execute: svn propset svn:eol-style native <file path>

Formatting

  • We put curly brackets on separate lines and use 4 space tabs.
  • Tab themselves should be spaces, not actual hard tabs.
  • Use string instead of String when refering to the System.String type.

Naming

  • We use full words to name things.
  • Aim for assosiative naming so that the logic is clear without explicit comments.

Classes

Unless the classes are very trivial, there should be one class per file.

public class SimpleExample
{

}

Methods

Method names have all their words capitalized (as opposed to Java, which culturally uses camelCase).

public class SimpleExample
{
    public void ExampleMethod(int exampleAttribute)
    {
        string exampleVariable = "test value";
    }
}

Fields

Fields should be always initialized when declared. Member fields start with m_ and continue in camelCase:

public class SimpleExample
{
    private long m_exampleMemberField = 0;
    private static double m_exampleStaticMemberField = 2;

    public void ExampleMethod(int exampleAttribute)
    {
        string exampleVariable = "test value";
    }
}

Warnings

  • Please keep the code warning free, using #pragma only if absolutely necessary. For instance
#pragma warning disable 0612
           ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Script]              = "_script.txt";   // Not sure if we'll ever see this
#pragma warning restore 0612

Logging

Each class should have their own logger which is declared private and is not inherited:

public class SimpleExample
{
    private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
}
Personal tools
General
About This Wiki