如何写出优雅漂亮的c#代码(一)

作为一个参加工作近十年的“老鸟”,也是从“菜鸟”阶段被“老鸟”虐过来。最近这些年带了不少部门里面的新人,新人嘛难免缺乏经验,写出的代码难免有不合理之处,接下来本系列将介绍一些不合理的代码,以及如何优化。废话不多说,开撸。。。

 

  1. 变量声明及命名

  

c#是一门严谨的语言,他会对程序员的编写进行有力的强约束,绝无其它弱类型语言中“模棱两可的概念”。所以变量声明也要本着严谨的原则。

c#常用的命名规则

驼峰式命名方法(Camel-Case),共有两种方式。

(1)小驼峰命名法

第一个单词以小写字母开始,第二个单词的首写字母大写,如:firstName、studentId

(2)大驼峰命名法

每一个单词的首字母都大写,也成为Pascal命名法。如:FirstName、StudentId

例:

小驼峰

bool stopFlag = true;
int mumAge = 40;
string[] studentsArray = {"土跟","钢蛋","铁柱"};

 

大驼峰

public string GetName();
public void SetAge();
public void Select();

接下来我们谈谈如何取名,不要小看取名这是最、最、最重要的。

1. 变量命名最重要的:见名知意


例:
定义一个家庭类,包含父母孩子的名字、性别、年龄信息

错误示范

复制代码
public class Family
{
    public string Name1="建国";
    public int Age1= 54;
    public Sex sex1 = Sex.Male;

    public string Name2="雨姗";
    public int Age2= 26public Sex sex2 = Sex.Female;

    public string Name3="紫萱";
    public int Age3= 2;
    public Sex sex3 = Sex.Female;
    
}
复制代码

咳咳,请告诉我哪个是爸爸,哪个是妈妈,哪个是孩子。
大家都很忙不要让我猜,猜对了还好,猜错了可能会乱伦。

正确做法
命名见名知意,减少歧义,减少误会。

复制代码
public class Family
{
    public string FatherName="建国";
    public int FatherAge= 54;
    public Sex FatherSex = Sex.Male;

    public string MotherName="雨姗";
    public int MotherAge= 26public Sex MotherSex = Sex.Female;

    public string DaughterName ="紫萱";
    public int DaughterAge= 2;
    public Sex DaughterSex = Sex.Female;
    
}
复制代码

2. 不必执着于使用英文

取变量名是给程序员看的,编译器并不会在乎你用什么变量名,所以最重要的是人看得懂。

例:
定义一个飞机类,包含以下属性。
襟翼,副翼,前缘襟翼,水平尾翼,垂直尾翼,双涡扇发动机。
我相信很多程序员对这些专业的名词翻译并不了解,所以大家不要强行翻译为英文,
以免歧义,对于此种情况,我建议宁可使用全拼,也不使用半吊子英文。

复制代码
public class Plane
{
    public string JinYi =string.Empty;
    public string FuYi =string.Empty;
    public string QianYuanJinYi =string.Empty;
    public string ShuiPinWeiYi =string.Empty;
    public string ChuiZhiWeiYi =string.Empty;
    public string WoShanFaDongJi =string.Empty;
}
复制代码

相信大家都读的懂。

 

 3. 尽量避免缩写

复制代码
//服务器地址
public string SevAds = "192.168.1.108";
//端口
public string prt = "80";

//写成这样是不更好些呢?
public string ServerAddress = "192.168.1.108";
public string Port = "80"; 

//这个是我在实际工作中遇到过的情况
//功能1:购货单位首营登记
//功能2:供货单位首营登记
//相信没有人能说出他的英文翻译,公司的实习生懒得定义太长的变量名,于是:

//购货单位首营登记
public void GHDWSYDJ();
//供货单位首营登记
public void GHDWSYDJ();

//what?一模一样?这就是缩写一大缺点之一。
//建议做法
public void GouHuoDanWeiShouYingDengJi();
public void GongHuoDanWeiShouYingDengJi();
//虽然名字很长,但是有良好的可读性
复制代码

 

 4.  中英文混合,坚决不予许

//发票冲红
public void InvoiceChongHong(Guid invoice);

//发票冲红是中国的专用术语,也许很难翻译,可以考虑使用全拼,减少误会
public void FaPiaoChongHong(Guid invoice);

 

2.想写出漂亮的代码也需要正确数据类型

复制代码
 //错误做法
            long tel = 15144388228;
            //这个错误应该很多人都不会再犯,大家都明白电话号码,long、int毫无意义
            string tel = "15144388228";

            //错误做法
            string date="1991-02-10";
            //这个错误依然很多人都不会再犯,新手级别。datatime处理时间要比string强大一万倍
            DateTime date = DateTime.Parse("1991-02-10");

            //0 1表示男女固然没错,但性别只有两个值,int有无数个值,
            //如果出现0 1以外的值则可能出现意外的错误。
            //这么做虽然没有错误,但是有更好的办法
            int sex = 0

            //而枚举最试用这种情况。
            Sex sex = Sex.Female;

            //错误做法
            //no,no,no永远不要这么做
            //guid如果声明为string如果涉及到比较的话,需要忽略大小写
            //运算复杂不说,如果忘记忽略大小写,程序一定会遇到bug
            string id = "F2C1DA37-4E9B-4152-AD2B-159522BC8BCE";

            //正确做法
            Guid id = Guid.NewGuid();

            //错误做法
            double price = 10.5;
            float price = 10.5f;

            //正确做法
            //c#中定义了货币类型,他的精度超过float,double,甚至不同其他类型自动转换,
            //微软做这些是为了安全考虑,double、float、decimal更多区别大家可以自行百度
            decimal price = 10.5m;

            //错误做法
            //虽然这么用毫无问题,但是难免大材小用。decimal只是为了作为货币类型。
            decimal height = 1.72;


            //正确做法
            double height = 1.72;

            //错误做法
            //许多人为了方便将单个字符声明为string,
            //相比于string,char更为合适。string本质
            //为char数组,自然单个字符生命为char效率更高
            string a = "a";
            string b = "b";
            string c = "c";
            string d = "d";

            //正确做法
            char a = 'a';
            char b = 'b';
            char c = 'c';
            char d = 'd';
复制代码

 

感谢大家花时间看我的文章,下期我们介绍如何写if else

posted @   鱼丸粗面一碗  阅读(830)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示