变量命名三原则

对于变量的命名规则,向来是争吵不休的。曾经有匈牙利命名法,驼峰命名法等等层出不穷。同时我们也看到,即使统一规定了某种变量命名方法,也往往出现变量名含义不清导致歧义的问题。

而无论是何种命名法,大多都只规定了命名的形式,而对命名的内容这一笔带过。

我认为,无论使用何种命名的形式,都应该遵循以下三个命名基本原则:

  • 功能性

    • 不应重复声明在父级声明的功能
    • 约定俗成的除外
  • 消歧义

    • 消歧义范围仅限作用域有重叠的
    • 消歧义词语应该对应(Async对应Sync等)
    • 消歧义时尽量不使用Not
  • 最简

    • 不得违反前两条原则

    • 添加的消歧义词语应该最简

我们用这样一段代码作为示例进行讲解:

namespace Notepad
{
    public class NotepadConfig
    {
        string[] mainConfig;
        public void ClearConfig( )
        {
            for (int cnt = 0; cnt < mainConfig.Length; cnt ++)
                mainConfig[cnt] = "";
        }
        public void ClearConfigToNull( )
        {
            mainConfig = null;
        }
    }
}

这一段 C# 代码,乍看命名上问题不大,实则存在着严重的命名问题。

第 3 行中:

  • NotepadConfig是管理配置的类,而非配置类本身。不符合功能性原则。应用Configer代替Config
  • Notepad命名空间中(目前)不存在其他的类。符合消歧义原则;
  • NotepadConfig已存在于Notepad命名空间下。不符合最简原则。应删去Notepad
  • 综上所述应改为Configer类。

第 5 行中:

  • mainConfig表明了其作用。符合功能性原则;
  • 没有与mainConfig处于同一作用域的变量,符合消歧义原则。
  • 没有与mainConfig相对的其他储存配置的字段。不符合最简原则。删掉main
  • 综上所述应改为config字段。

第 6 行与第 11 行:

  • ClearConfig(ToNull)表明了其作用。符合功能性原则;
  • ClearConfig没有对应消歧义词,因添加ToEmpty;
  • ClearConfig(ToNull)已存在于Config类下。不符合最简原则。应删去Config
  • 综上所述应改为ClearToEmptyClearToNull方法。

第 8 行:

  • 在循环体内使用i作为计数器是约定俗称的,可以不遵守功能性原则。

按三原则修改后的代码如下:

namespace Notepad
{
    public class Configer
    {
        string[] config;
        public void ClearToEmpty( )
        {
            for (int i = 0; i < config.Length; i ++)
                config[i] = "";
        }
        public void ClearToNull( )
        {
            config = null;
        }
    }
}

对比这两段代码,我们不难发现:

  • 功能性原则让我们在调用和调试时无需确认其真实功能;
  • 消歧义原则避免了错误的调用(这在调试时是极难发现的);
  • 最简原则保证不会出现过长的代码行,进一步提升了理解和维护代码的速度。

这正是变量命名三原则的意义所在

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值