zoukankan      html  css  js  c++  java
  • 防御式编程(一)

     
    防御式编程小结
    防御式编程小结

    下面列出了防御式编程的一些其它要点.它们大多是编程里的常识,不过无论如何还是值得提一下的.你可能会想要建一张”to do”列表,然后在编程过程中逐项进行检查。

    l  在函数的开始,检查参数的正确性。确认参数值都落在可接受的范围里。记住编程界里的一句古语:“垃圾进,垃圾出。”

    l  在经历一系列相关的表达式之后,检查被操作数作变量的正确性。一系列表达式会改变应用程序的状态。所以要确认其结果是正确的。

    l  解决问题时尽可能地处理错误而不是处理异常。

    l  尽可能地让函数返回一点东西——不要把返回类型设为void。什么都不返回的函数是无法用异常处理来验证的。

    l  一定要检查函数的返回值。不管可能性有多小,不要假设函数不会失败。错误的假设往往是在运行时发生错误的主因。

    l  在移植代码时,把指针算法转换成引用。指针会影响到正常的垃圾回收。虽然定义一个不安全的块来保留指针算法可能会比较快捷方便,但是花点时间把指针都去掉会让应用程序更加安全。

    l  不要编写不安全的代码。需要用到不安全块的操作往往是危险的应该予以避免。

    l  不要直接使用文字变量。重复使用的文字变量是无法被优化的。就像前面展示的一样,文字变量不具备可读性。你应该使用 const 变量.。const 变量是有名字的,而文字量没有,使用const变量能使代码的可读性更好。

    l  除非在枚举类型上跳转,否则一定要在switch 块里加上 default 语句。最坏的情况也不过就是用不到 default 情况,这比不小心改变程序的行为要好多了。

    l  不要捕捉通用的异常类型。捕捉 System.Exception会掩盖具体的异常乃至问题的本源。而且如果捕捉了所有异常的话,你就无法对某个具体的异常做出反应了。

    l  不要对异常进行特殊处理。所谓的特殊处理是指捕捉 System.Exception ,然后在异常处理语句里专门去处理某个具体的异常。这么做的问题在于其它的异常会被过滤掉,这样就无法处理未知的结果了。

    l  避免定义或使用 object 类型。Object 类型可能会不小心装箱或是向下转型成某个具体类型。装箱和向下转型都会影响到应用程序的性能。

    l  重复的代码就是未来问题的滋生地。把代码重构成可重用的模块或者函数。

    l  总是使用泛型集合而不是集合。数组和向量、链表、字典等比起来虽然有点老套,但是数组比集合更简单,通常速度也更快。复杂度越低,问题也就越少。

    l  不要为.NET框架类库(FCL)里已有的功能使用原生的 API。

    l  for 语句比其它的循环方式要好。for 循环非常结构化并且可以增强程序员的素养。这个结构可以避免疏忽造成的错误。 while 语句等其它类型的循环虽然比较灵活,但是这种灵活性也为不小心的错误打开了方便之门。

    l  不使用的对象应该设为 null 。然后你就可以可靠地检查对象的状态了。而且也能帮助垃圾回收的进行。

  • 相关阅读:
    [CareerCup] 11.6 Search a 2D Matrix 搜索一个二维矩阵
    [CareerCup] 11.5 Search Array with Empty Strings 搜索含有空字符串的数组
    [CareerCup] 11.4 Sort the File 文件排序
    [CareerCup] 11.3 Search in Rotated Sorted Array 在旋转有序矩阵中搜索
    VTK 6.3.0 Qt 5.4 MinGW 4.9.1 Configuration 配置
    [CareerCup] 11.2 Sort Anagrams Array 异位词数组排序
    [CareerCup] 11.1 Merge Arrays 合并数组
    Matlab Delete Row or Col 删除矩阵的行或列
    [CareerCup] 10.7 Simplified Search Engine 简单的搜索引擎
    [LeetCode] Nim Game 尼姆游戏
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717370.html
Copyright © 2011-2022 走看看