Coding standards

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(Source Repository (SVN))
(use of var and new())
 
(10 intermediate revisions by 5 users not shown)
Line 1: Line 1:
==Guidelines==
+
__NOTOC__
 +
{{Quicklinks}}
 +
<br />
 +
== Guidelines ==
  
<b>When adding to existing code please respect the conventions already being used in the file you're editing. Even if they conflict conventions in this page. If you correct a convention in a file please discuss it first with other contributors of the file and fix the entire file at once.</b>
+
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.
 
+
<b>We follow standard C# coding guidelines unless otherwise stated: [http://msdn.microsoft.com/en-us/library/czefa0ke.aspx]</b>
+
 
+
=== Source Repository (SVN) ===
+
 
+
* For new files execute: svn propset svn:eol-style native <file path>
+
  
 
=== Formatting ===
 
=== Formatting ===
Line 13: Line 10:
 
* 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.
* Use string instead of String when refering to System.String type.
+
* Use string instead of String when refering to the System.String type.
  
 
=== Naming ===
 
=== Naming ===
Line 40: Line 37:
 
     public void ExampleMethod(int exampleAttribute)
 
     public void ExampleMethod(int exampleAttribute)
 
     {
 
     {
         string exampleVariable="test value";
+
         string exampleVariable = "test value";
 
     }
 
     }
 
}
 
}
Line 52: Line 49:
 
public class SimpleExample
 
public class SimpleExample
 
{
 
{
     private long m_exampleMemberField=0;
+
     private long m_exampleMemberField = 0;
     private static double m_exampleStaticMemberField=2;
+
     private static double m_exampleStaticMemberField = 2;
  
 
     public void ExampleMethod(int exampleAttribute)
 
     public void ExampleMethod(int exampleAttribute)
 
     {
 
     {
         string exampleVariable="test value";
+
         string exampleVariable = "test value";
 
     }
 
     }
 
}
 
}
Line 64: Line 61:
 
=== Warnings ===
 
=== Warnings ===
  
* Please keep the code warning free, using #pragma only if absolutely necessary. For instance  
+
* Please keep the code warning free, using #pragma only if absolutely necessary. For instance  
  
 
  #pragma warning disable 0612
 
  #pragma warning disable 0612
Line 80: Line 77:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
=== use of var and new()===
 +
 +
Only use var in a variable declaration when the type of the variable is clear on the right side
 +
 +
<pre>
 +
    var a = new List<string>();
 +
//or
 +
    List<string> b = new(); // ok
 +
 +
    var c = mything(); // not ok. we cant see the type without looking for mything details.
 +
</pre>
 +
 +
[[Category:Standards]]

Latest revision as of 21:27, 9 November 2022


[edit] Guidelines

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

[edit] 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.

[edit] Naming

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

[edit] Classes

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

public class SimpleExample
{

}

[edit] 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";
    }
}

[edit] 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";
    }
}

[edit] 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

[edit] 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);
}

[edit] use of var and new()

Only use var in a variable declaration when the type of the variable is clear on the right side

    var a = new List<string>();
//or
    List<string> b = new(); // ok

    var c = mything(); // not ok. we cant see the type without looking for mything details.
Personal tools
General
About This Wiki