前言

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

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

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

本文讲述第一个原则——这真的该用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. 排序算法汇总(java实现,附源代码)

    整理系统的时候发现了原来写的各种算法的总结,看了一下,大吃一惊,那时候的我还如此用心,具体的算法,有的已经模糊甚至忘记了,看的时候就把内容整理出来,顺便在熟悉一下,以后需要的时候就可以直接过来摘抄了. ...

  2. 【SQL】- 基础知识梳理(八) - 事务与锁

    事务的概念 事务:若干条T-SQL指令组成的一个操作数据库的最小执行单元,这个整体要么全部成功,要么全部失败.(并发控制) 事务的四个属性:原子性.一致性.隔离性.持久性.称为事务的ACID特性. 原 ...

  3. MVC 异常过滤

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. ST表略解

    题面 给定一个长度为\(N\)的数列,和\(M\)次询问,求出每一次询问的区间内数字的最大值. 对于30%的数据,满足: \(1≤N,M≤10\) 对于70%的数据,满足: \(1≤N,M≤10^5\ ...

  5. kali linux之选择和修改exp与windows后渗透

    网上公开的exp代码,选择可信赖的exp源,exploit-db,securityfocus,searchsploit,有能力修改exp(python,perl,ruby,c,c++.......) ...

  6. CPU 的工作原理

    内部架构 CPU 的根本任务就是执行指令,对计算机来说最终都是一串由 0 和 1 组成的序列.CPU 从逻辑上可以划分成 3 个模块,分别是控制单元.运算单元和存储单元 .其内部架构如下: [1]控制 ...

  7. 【SSO单点系列】(7):CAS4.0 SERVER通过数据库方式认证用户

    在前几篇中有简单介绍服务端的认证方式,默认的是直接在 deployerConfigContext.xml 文件中 一个叫做 primaryAuthenticationHandler 的bean中配置. ...

  8. [Swift实际操作]九、完整实例-(1)在iTunesConnect网站中创建产品

    本文将通过一个实例项目,演示移动应用开发的所有步骤.首先要做的是打开浏览器,并进入[iTunesConnect网站],需要通过它创建一款自己的应用. 在iTunesConnect的登录页面中,输入自己 ...

  9. PHP常用人工智能库

    1.NLPTools(http://php-nlp-tools.com/)NLPTools是一个PHP自然语言处理库.能进行文本分级,聚类等操作.2.Prediction Builder(https: ...

  10. 用qt creator创建可继承ui类

    https://jingyan.baidu.com/article/5d368d1efa2dd73f60c05786.html 用qt creator创建可继承ui类 听语音 | 浏览:1657 | ...