前言

我有个技能,就是把“我”说的听起来特别像“老子”。

以前是小喽啰的时候,会跟领导说“我!不加班。”,听起来就像“老子不加班!”一样。到最后发现,我确实没有把计划内的工作拖到需要加班才能完成,这个“老子”也就慢慢的被承认了!到后来我带队的时候,我说“我不让你们加班!”,这个时候听起来绝对不像“老子不让你们加班!”,后来他们也真的不加班就把项目漂亮的做完了,相信他们愿意承认我有“老子”的本事。

哈哈!这个有点妄自尊大了哟。做到就可以了,千万别这么讲啊!低调,低调。不过什么事情我都能做到不加班,这事是真的。在这一系列文章里我要告诉大家一系列的实践经验,实施之后会发现:你能够一次交付了!再也不用加班了!有更多时间陪老婆孩子了!有更多时间陪哥们兄弟了!还可能有更多事情去把妹了!……总之好处多多。

本文讲述第一个原则——这真的该用try-catch吗?以后会不定期更新。

这真的该用try-catch吗?

用try-catch之前一定要三思啊!其实绝大多少情况都是不应该用try-cath的。机器的行为具有非常大的确定性,尤其是CPU,它的处理过程就是一系列的与、或、非的组合。曾经在http://bbs.pfan.cn/上看到一则广告,一个程序员研究出来成果了——机器已经具有了智能!为什么呢?机器能给出不确定的结果啊——有时候你用的操作系统、软件非常流畅好用,有时候仿佛专门使坏一样。靠!把程序的bug当人工智能,也是醉了。人才是比较“欠”的,你让他输入数字,可偏偏输入abc;你让他输入abc,他偏偏输入数字。所有欠揍的机器背后都有一群欠揍的程序员!

所以开发中要灵活处理的地方只有处理自然人跟机器交互的地方!其他地方能够约定清晰的时候尽量约定清晰,而不是依赖异常处理与恢复机制。

约定清晰说明对程序内部的行为完全掌握了,这样的代码执行效率高、好调试。换句话说代码中用的try catch越少,程序越稳健。java对错误处理只引入了异常处理机制,所以java中有两类异常checked和unchecked,unchecked本质上是错误,一个已经发布的程序原则上是不允许出现unchecked的异常的。c c++ c#等语言引入了assert机制,这种机制会使得程序遇到错误的时候直接中止执行,这种机制,错误没法隐藏。
 
能够约定清晰的时候尽量约定清晰,是为了现在不加班啊!哥们!约定清晰了,写代码的时候是不是就流畅了啊,是不是不用写那么多破坏结构的try-catch了啊!否则写代码跟便秘一样,不加班才怪呢!
 
不要用try-catch让错误隐藏起来,是为了以后不加班啊!哥们!错误隐藏起来,以后出了类似“人工智能”的错误搞死你!哭爹喊娘,找都找不到!
 
不要理解错误啊!约定清晰包括把异常也考虑进去,微软的员工写了一本书好像叫《怎么编写无错误的代码》,里面提到很多错误都在错误处理里面。异常表示什么——可能性和无法杜绝。需要考虑用异常的地方有——IO和别人的代码。IO好理解,网络通信、文件读写、数据库连接等等。别人的代码也很好理解啊——你不欠,不代表别人不欠啊。不要假定别人都是欠的哦,这样你还得考虑别人怎么欠的,多累啊。就像生活一样,不要以恶意揣摩别人,这样你将会生活在恐惧中!先假设别人不欠,等出问题了,骂他揍他都行——这事儿得你们自己负责,别说我教唆的!
 
关于这个原则,很多介绍具体实践方法的文章都提到了,这就有一篇——assert()函数用法总结
 
发现很多只会java的或者先学java的对这个原则不能接受。哪些从汇编、C、C++一路斩上来的很容易接受这个原则。不接受不要紧,别上来就喷我!喷完喷前,还是都思考一下。

这真的该用try-catch吗?的更多相关文章

  1. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  2. 你写的Try...Catch真的有必要么?

    很多人喜欢用Try...Catch把每一个方法都包裹起来,可是真的有必要么? 为什么要这样做?我估计是大家被BUG吓怕了,生怕生产环境出现各种莫名其妙的错误,比如最经典的NullReferenceEx ...

  3. 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.exit ...

  4. WCF基础教程之异常处理:你的Try..Catch语句真的能捕获到异常吗?

    在上一篇WCF基础教程之开篇:创建.测试和调用WCF博客中,我们简单的介绍了如何创建一个WCF服务并调用这个服务.其实,上一篇博客主要是为了今天这篇博客做铺垫,考虑到网上大多数WCF教程都是从基础讲起 ...

  5. 你真的理解Java中的try/catch/finally吗?

    看几个例子,回顾一下执行顺序 例子1 无异常,finally中的return会导致提前返回 public static String test() {    try {        System.o ...

  6. java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    掌握下面几条原则就可以完全解决“当try.catch.finally遭遇return”的问题. 原则:1.finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行. 2 ...

  7. 再问你一遍,你真的了解try..catch(finally)吗???

    定义 首先来看下 MDN 的定义: The try...catch statement marks a block of statements to try and specifies a respo ...

  8. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  9. C++异常处理:try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  10. C++异常处理: try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

随机推荐

  1. Oracle Cannot Update TOP N Issue, 请专家解答

    大家好 上周写了匿名方法一文,很多读者,很高兴,相信我们已经从大伙的回复中,对.NET又有了更深刻的认识. 好,现在说主题,各类数据库都有相应更新本表top n的方案.现在我一一举例 首先看表结构如下 ...

  2. Js杂谈-插件包读后感

    最近有幸得到了一份项目上的前端封装的插件库代码,花了一个下午时间,仔细地研读了一下.对于我很想做自己的类库,搞自己的组件包很有启蒙意义. 相比较我之前阅过的框架或是类库,这份比较简单. 项目是jQue ...

  3. C# 可变参数

    class Program { static void Main(string[] args) { //常规使用方法 Console.WriteLine(Add(, , , , , , , , })) ...

  4. c# 如何筛选datatable

    对DataTable数据各种筛选 筛选一个DataTable的数据,赋值给另外一个DataTable 假设: 有2个DataTable:DataTable A.DataTable B. 要求: 筛选D ...

  5. 百度地图离线API及地图数据下载工具

    全面介绍,请看下列介绍地址,改写目前最新版本的百度V2.0地图,已全面实现离线操作,能到达在线功能的95%以上 http://api.jjszd.com:8081/apituiguang/gistg. ...

  6. 严选 Android 路由框架优化(上篇)

    0 背景 早前严选 Android 工程,使用原生 Intent 方式做页面跳转,为规范参数传递,做了编码规范,使用静态方法的方式唤起 Activity public static void star ...

  7. sysbase 笔记

    Alter 在已有数据的表中新增一个字段: ALTER table ciecdb.ciec.eci_mansmfile ADD num int default 0;

  8. c++多线程基础1(thread)

    std::thread 在 <thread> 头文件中声明,因此使用 std::thread 时需要包含 <thread> 头文件. thread 构造函数: default ...

  9. vmware vSphere虚拟网络之标准交换机(二)

    一.标准交换机的特点: 1)只能用于物理主机 2)其他主机不能共享同一个虚拟交换机 3)不具备任何灵活性 4)每台ESXi主机都要配置一遍 二.网络图: 三.创建标准交换机: 登录web vCente ...

  10. 使用@符号让C#中的保留字做变量名的方法详解

    原来还有一种办法就是加@符号(看了@符号的作用又多了一个): 复制代码代码如下: class @int    {        static void Main(string[] args)      ...