美文网首页csharp
Unity之命名规范(二)

Unity之命名规范(二)

作者: su9257_海澜 | 来源:发表于2018-05-19 23:16 被阅读134次

    书接上回Unity 之命名规范(一)下面笔者说一些是示例和使用规范。在你自己的项目中可以使用这些或者根据自己的需要进行调整。


    有错误或者不准确的地方欢迎留言指正



    使用 PascalCasing 的类名称和方法名称

    原因:与Microsoft的.NET Framework一致并且易于阅读

    public class ClientActivity
    {
        public void ClearStatistics()
        {
            //...
        }
        public void CalculateStatistics()
        {
            //...
        }
    }
    

    使用camelCasing的方法参数和局部变量

    原因:与Microsoft的.NET Framework一致并且易于阅读

    public class UserLog
    {
        public void Add(LogEvent logEvent)
        {
            int itemCount = logEvent.Items.Count;
            // ...
        }
    }
    

    不要在标识符中使用Hungarian 符号或者任何其他类型标识

    原因:与Microsoft的.NET Framework和Visual Studio IDE一致,使得确定类型变得非常简单(通过工具提示)。一般来说,你应该避免任何标识符中的类型指示符。

    // 正确写法
    int counter;
    string name;
     
    // 错误写法
    int iCounter;
    string strName;
    

    不要将Screaming Caps(这个我也不知道怎么翻译,大概的意思是全部大写)用于常量或只读变量

    原因: 与微软的.NET Framework一致。Screaming Caps过于密集不方便阅读

    // 正确
    public static const string ShippingType = "DropShip";
     
    // 错误
    public static const string SHIPPINGTYPE = "DropShip";
    

    避免使用缩写。一般用到缩写的地方如:Id, Xml, Ftp, URL(这个确实重要,例如:BT,在这项目中我怎么理解?!变态?按钮?Big Tag? WTF!!!)

    原因: 与Microsoft的.NET Framework保持一致并防止缩写不一致。

    // 正确
    UserGroup userGroup;
    Assignment employeeAssignment;
     
    // 错误
    UserGroup usrGrp;
    Assignment empAssignment;
     
    // 例外
    CustomerId customerId;
    XmlDocument xmlDocument;
    FtpHelper ftpHelper;
    UriPart uriPart;
    

    使用PascalCasing缩写3个或更多字符(2个字符都是大写)

    原因: 与微软的.NET Framework一致。全部大写在视觉上过度关注

    HtmlHelper htmlHelper;
    FtpTransfer ftpTransfer;
    UIControl uiControl;
    

    不要在标识符中使用下划线

    原因: 与微软的.NET Framework一致,使代码更加自然地阅读

    // 正确
    public DateTime clientAppointment;
    public TimeSpan timeLeft;
     
    // 错误
    public DateTime client_Appointment;
    public TimeSpan time_Left;
    

    使用 predefined type names 而不是系统类型名称,如Int16, UInt64等

    原因: 与Microsoft的.NET Framework一致,使代码更加自然。

    // 正确
    string firstName;
    int lastIndex;
    bool isSaved;
     
    // 错误
    String firstName;
    Int32 lastIndex;
    Boolean isSaved;
    

    使用隐式VAR局部变量声明。例外:原始类型(int,string,double等)使用预定义的名称。(不过笔者不建议这么弄,看上去表达不清晰,当然单从观赏性来讲Var是个不错的选择)

    原因:消除混乱,特别是复杂的泛型类型。使用Visual Studio工具提示可轻松检测类型。

    var stream = File.Create(path);
    var customers = new Dictionary();
     
    // Exceptions
    int index = 100;
    string timeSheet;
    bool isCompleted;
    

    使用名词或名词短语来命名一个类

    原因:与Microsoft的.NET Framework一致并且易于记忆。

    public class Employee
    {
    }
    public class BusinessLocation
    {
    }
    public class DocumentCollection
    {
    }
    

    用字母I 做接口的前缀(你要是不写I编辑器都会提醒你 )。接口名称是名词(短语)或形容词。

    原因:与微软的.NET Framework一致。

    public interface IShape
    {
    }
    public interface IShapeCollection
    {
    }
    public interface IGroupable
    {
    }
    

    根据他们的主要类来命名源文件。例外:具有部分类的文件名反映它们的来源或目的,例如designer, generated等。(换句话说就是有嵌套类的时候命名按照他们父类的名称来,例外说的就是见名知意,尽量减少让阅读者看到这个类猜这个类是干什么的~)

    原因:符合微软的做法。文件按字母顺序排列,部分类保持相邻。

    // Located in Task.cs
    public partial class Task
    {
        //...
    }
    
    // Located in Task.generated.cs
    public partial class Task
    {
        //...
    }
    

    用一个清晰定义的结构来组织命名空间(就是说要分类划分,就像动画系统里面的命名功能不能写到UI系统里面一样)

    原因:与微软的.NET Framework一致。保持良好的代码库组织.

    // Examples
    namespace Company.Product.Module.SubModule
    namespace Product.Module.Component
    namespace Product.Layer.Module.Group
    

    垂直对齐大括号。

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
    

    在类的顶部声明所有成员变量,用在最高层的静态变量。

    原因: 普遍接受的做法,防止需要寻找变量声明。

    public class Account
    {
        public static string BankName;
        public static decimal Reserves;
     
        public string Number {get; set;}
        public DateTime DateOpened {get; set;}
        public DateTime DateClosed {get; set;}
        public decimal Balance {get; set;}
     
        // Constructor
        public Account()
        {
            // ...
        }
    }
    

    使用单数名字枚举。例外:位字段枚举。

    原因:与Microsoft的.NET Framework一致,使代码更加自然阅读。多个标志,因为枚举可以保存多个值(使用按位、或)。(这个笔记不是很清楚什么意思)

    // Correct
    public enum Color
    {
        Red,
        Green,
        Blue,
        Yellow,
        Magenta,
        Cyan
    }
     
    // Exception
    [Flags]
    public enum Dockings
    {
        None = 0,
        Top = 1, 
        Right = 2, 
        Bottom = 4,
        Left = 8
    }
    

    明确指定枚举的类型或枚举的值(除了位域)

    原因:在依赖实际类型和值时会造成混淆

    // 错误
    public enum Direction : long
    {
        North = 1,
        East = 2,
        South = 3,
        West = 4
    }
     
    // 正确
    public enum Direction
    {
        North,
        East,
        South,
        West
    }
    

    不要在枚举名称后缀再次添Enum

    原因:与Microsoft的.NET Framework保持一致,与在标识符中没有类型指标的规则一致。(但是在unity中一般在Button的变量字段后缀都添加Button,例如Button openButton = null;)

    // 错误
    public enum CoinEnum
    {
        Penny,
        Nickel,
        Dime,
        Quarter,
        Dollar
    }
     
    // 正确
    public enum Coin
    {
        Penny,
        Nickel,
        Dime,
        Quarter,
        Dollar
    }
    

    相关文章

      网友评论

      • 乾三连坤六断_acd3:感谢分享,学到了不少,只是有一个地方我有点不明白,想请教一下

        不要在标识符中使用Hungarian 符号或者任何其他类型标识

        这里 假如我有一个UI上的标题Text 我在脚本里需要使用它的Text组件,还有一个字段是这个标题的string, 那么我定义的这两个的时候,不写成titleText和titleString,有其他更好的方式来命名吗?
        su9257_海澜:@乾三连坤六断_acd3 说的就是不要用匈牙利命名法则,词能达意,方便他人理解就好。例如哪个用动词,哪个用形容词这种更严格规定,我并没有深入研究,你可以参考微软的规范,他里面说的更详细些
      • Clean_1306::wink: 以后会更加注意这方面的

      本文标题:Unity之命名规范(二)

      本文链接:https://www.haomeiwen.com/subject/mxnadftx.html