谈写代码的原则:性能高效 方法简洁 思路清晰 整体美观


  我们的程序课只关心能不能把一个功能实现。不会关注怎么实现以及背后的原理。我坚信性能非常重要,给客户做项目,三天两头出问题,动不动系统崩溃。写出来的网站访问量一大就报503.经常遭到黑客攻击,资料被改得面目全非。后果很严重。

举几个个课堂例子说明此原则:

//字符串拼接

下面是课堂上的代码
string sqlstr="insert into 库存('"+txt_hh+"'"+
",'"+txt_hm + "','" +
txt_gg + "'," +txt_jldw + ",'"+
txt_kcsl + "','"+txt_jhrq + "','" +txt_shr + "','" +
txt_ghs + "','"+
")"

  抬头看到这坨东西,心里非常不舒服。我看了老师调试这段代码,短短不过10行,错误不少。单单上面的sqlstr他就改了很多次,不是少了引号就是漏了括号,有次txthh没有加Text.

  老师语重心长地说这块不好看懂,你们多多注意。

  我当即提出,拼接出来sql语句缺点太多,写得这么费劲,看的也吃力,改起来费劲加费劲,为什么一定要用这种方法拼接sql,

  他回答:方法有很多,这种方法在所有的语言都适用。只要熟练了不写错就行。听起来貌似很对是不是?我当时就震惊了,原来他所谓的写代码原则是兼容所有的语言?!!还指望把C#代码放到apache、tomcat上运行吗?

  的确很多语言都支持拼接字符串。但是有点经验的程序员绝对不会用
原因有三:

  第一:非常危险,容易拼接出恶意语句(最主要原因)。

  第二:.NET中字符串对象恒定。连接会产生很多中间对象,性能浪费。

  第三:看起来写起来改起来都麻烦,非常容易出错。

  我的观点是:拼sql语句方法多多,每一种都比拼接字符串强百倍。既然学的是C#.NET那么就应该用这种语言最最高效 最最简洁 最最干净的方式解决问题。学语言的原则是只学一门,一通百通。用不着照顾其他语言。什么都顾及,搞在一块儿 最后什么都不会。

下面是一种稍微好一点的方法

string sql = String.Format("insert into tblStudent values ('{0}','{1}','{2}','{3}')",
  txtName.Text.Trim(),
  txtGender.Text.Trim(),
  txtAddress.Text.Trim(),
  txtPhone.Text.Trim()
);

 


//妈妈再也不用担心少引号了

最好的办法是用参数:

return SqlHelper.ExecuteNonQuery(CommandType.Text, "insert into tblStudent values (@tSName, @tSGender, @tSAddress, @tSPhone, @tSAge, @tSBirthday, @tSCardId, @tSClassId)",
  new SqlParameter("@tSName", SqlDbType.NVarChar) { Value = _name },
  new SqlParameter("@tSGender", SqlDbType.NChar) { Value = _gender },
  new SqlParameter("@tSAddress", SqlDbType.NVarChar) { Value = _address },
  new SqlParameter("@tSPhone", SqlDbType.VarChar) { Value = _phone },
  new SqlParameter("@tSAge", SqlDbType.Int) { Value = _age },
  new SqlParameter("@tSBirthday", SqlDbType.DateTime) { Value = _birthday },
  new SqlParameter("@tSCardId", SqlDbType.VarChar) { Value = _cardId },
  new SqlParameter("@tSClassId", SqlDbType.Int) { Value=_classId}
);

 

优点:安全。再也不担心引号问题,因为这里根本用到引号。整齐,美观,大气。

//滥用ToString()

这也是课堂的代码

string sqlstr="insert into 库存('"+
  txt_hh.Text.Trim().ToString()+"'"+",'"+
  txt_hm.Text.Trim().ToString() + "','" +
  txt_gg.Text.Trim().ToString() + "'," +
  txt_jldw.Text.Trim().ToString() + ",'"+
  txt_kcsl.Text.Trim().ToString() + "','"+
  txt_jhrq.Text.Trim().ToString() + "','" +
  txt_shr.Text.Trim().ToString() + "','" +
  txt_ghs.Text.Trim().ToString() + "','"+
")"
try
{
  ...
}
catch(Exception ex)
{
  MessageBox.Show(ex.Message.ToString());
}

  众所周知,Trim()返回值和属性Message已经是个字符串,再来个ToString()。不仅显得多此一举,而且很难看。
  我提出这个疑问,老师回答:这是为了照顾低版本.NET,他的意思就是说低版本的框架类库中,Exception的Message不是String类型
于是我翻出了比较老的.NET2.0版本Exception类源码。
如下:

 

一切用事实说话。.NET1.0.的Message也是String。只是手头没有1.0的源码,但可以证明。

 

//标识符的命名不规范

  网页课讲动态网页,用的是dreamweaver。不写代码,就拖控件设属性。两三下就搞了一个动态网站。我晕啊。
用的是古老的vbscript.在Html5 CSS3成为业界潮流的今天。这。。。

  有那么一个项目名叫lyb。有那么一堆变量叫做xjldw,kcsl,jhrq,shr ghs,rq,hh,nl,hm,gg,x,hh,xm,xb,xh,xxa,xxb,xxxc,XX你个大XX!
我当时就琢磨:lyb究竟是什么意思。后来经人指点,留言板。额。留言板难道不应该叫GuestBook吗。再不济,写个LiuYanBan也行。

  写出来的代码只有你自己看得懂,别人难以维护。

  诚然,代码最主要就是实现功能。不管你怎么写给变量起名字,加无数个ToString()。对现在的电脑 影响可以忽略不计。
但是项目一大,几十万行的代码 有一半是,kcsl,jhrq,shr ghs,rq,hh,n这些东西。必须崩溃啊。要知道软件维护比开发重要的多。
能否养成良好的习惯决定你在这条路上能够走远。


  对此类问题的讨论到此为止吧。不再尝试给任何人提建议了。

转载于:https://www.cnblogs.com/hoosway/p/3744066.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种简洁优雅且高效的编程语言,具有丰富的库和模块,同时也有一些技巧可以提高代码的效率。以下是一些Python高效代码的技巧: 1. 利用列表推导式:列表推导式是一种简洁高效的创建列表的方法。它可以将多行代码简化为一行,并且能够同时对元素进行过滤、运算等操作。 2. 使用生成器表达式:生成器表达式是一种类似于列表推导式的方法,但它是一次生成一个元素,而不是一次生成一个完整的列表。这样可以节省内存空间。 3. 使用字典推导式:类似于列表推导式,字典推导式可以用于快速创建字典。可以通过遍历一个可迭代对象来生成键-值对。 4. 使用装饰器:装饰器是一种高级的Python功能,用于将函数或类进行装饰,以实现额外的功能或修改原有功能。装饰器可以提高代码的可读性和可维护性。 5. 使用生成器:生成器是一种特殊的迭代器,可以实现在循环中逐个生成元素,而不是一次性生成所有元素。这样可以节省内存空间,并且提高代码的效率。 6. 使用内置函数和方法:Python提供了很多内置函数和方法,可以帮助我们快速且高效地处理数据。比如使用map()、filter()、sort()等函数,可以简化代码,提高效率。 7. 使用异常处理:合理使用异常处理可以帮助我们处理程序中的错误和异常情况。通过捕获异常和提供适当的处理,可以避免程序崩溃或产生错误结果。 8. 使用模块和库:Python拥有丰富的模块和库,可以节省大量开发时间。通过引入并利用这些模块和库,可以实现复杂的功能,同时也加速了代码的开发过程。 以上是一些Python高效代码的技巧,不仅可以提高代码的效率,还能使代码更加清晰、易读和易维护。 随着不断的学习和实践,我们会发现更多的技巧来提升代码的质量和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值