知道空指针,你也能改bug了
“靠,又crash了,这有个空指针!”,想必产品经理到程序猿堆里转悠的时候经常听到这句话吧。这空指针呢是咱程序猿踏上写bug的不归路上的第一步,程序猿对它可是又爱又恨。为啥这样说呢?别急,我们先来了解下什么是指针。
我们知道,程序是运行在内存中的,内存就像一个规划很好的,各种建筑非常整齐的一排排街道,每间房屋都有一个门牌号来表示自己的地址,为了方便管理,只允许一间房子住一个人。当我领着一帮人来到自己管辖的街道,而且要把他们安顿到各个房子时,为了后面我能够准确的找到他们,在每人进入房子时,我会在他门口竖了箭头牌子指向这个房子,牌子上写上他们各自的名字,“张三”,“李四”……
有人会说,你记门牌号啊,呃,计算机世界的门牌号可不是那么简单的哦,它是这个样子的0x3ac68b2f,当然,这只是其中之一,记这种东西是计算机擅长的,不是人类擅长的,逼人类理解这种东西就如同逼计算机理解什么叫做“爱”一样。简单点说,指向房子的箭头牌子就是的指针,而牌子上的词儿就是指针的名字,牌子指向的房子就是内存的地址,房子里面的人就是我们程序运算需要的数据,这样我们就能够很容易的通过指针得到和操作内存中的数据了。
再来说说什么是空指针,我们可以先意会一下,指向空的指针呗。然而空是一种极度抽象的概念,这个世界哪有“空”呢,我立一块箭头牌子,总得把它指向某个地址,既然没法指向真正的“空”,那我们就脑补出来一个呗,在内存中我们规定出一个地址,这个地址来代表“空”(无辜的“空”又被代表了),既然是脑补出来的,那就没有明确的统一规定了,不同的系统可以指向不同的地址,不过一般情况下,会指向0地址,访问它都是非法的,我们可以想象0地址住了一个暴躁的老头,凡是想访问他的人都会被他扇耳光。有趣的是,程序猿们被扇了一边又一边,仍然乐此不疲,被打脸的程序猿手拉手可以绕地球好几圈。
好了,上面说的空指针听起来好像很厉害的样子,实际上写一个空指针的bug只要两步:
第一步:A = null;
第二步:A doSomething;
怎么改呢?不负责任的讲,把第二步改成
if(A != null)
A doSomthing;
你可能会想,这尼玛都能犯错,唉,毕竟这是简化版的嘛,bug写成这样就太丢程序猿的脸了,如何将第一步在茫茫代码海洋中巧妙地隐藏起来,是可以体现一个程序猿写bug水准的。
不过改起来也很简单啊,所以程序猿们可喜欢改空指针的bug了。可是你要问这样改就对了吗,我只能回答这样改没错。
#专栏作家#
给产品经理讲技术,微信公众号(pm_teacher),人人都是产品经理专栏作家。资深程序猿,专注客户端开发若干年,对前端、后台技术略懂,热衷于对新的科技领域的探索。
本文原创发布于人人都是产品经理,未经许可,不得转载。
-
微信创始人张小龙首次公开演讲(官方无删减版)
微信创始人张小龙首次公开演讲(官方无删减版) -
如何通过APP看到产品战略层面
产品经理拿到一款产品的时候,不能只能看到表面信息,而是要能看到产品背后的信息。 -
基于用户的“真需求”创新产品
产品创新是保证企业在竞争激烈的市场上长久生存的关键,今天,我们就围绕产品创新和用户研究分享一些看法。 -
有一种交互设计研究验证叫“设计走查”
如何在最短的时间内对自己的产品做出检验,确保其在定位、设计、营销计划等多个环节,在可视范围内是正确的,需要一套比较科学、完善的方法去做出检测。 -
你为什么离不开微信?
张小龙说用完即走,你却爱不释手; 到底是什么让你离不开微信? -
移动互联时代APP的发展方向
现在我们已经走上了移动互联网时代,无论是企业还是公司,都会经过网络竞争中争取有利的优势,较为传统的产品竞争逐渐向互联网竞争转型,出现了很多数据云大数据等等 -
AI 时代产品经理的机遇和挑战
AI 时代产品经理的机遇和挑战 -
前1%与前10%的产品经理差距在哪?
前1%与前10%的产品经理差距在哪? -
你有哪些策略应对不断的需求变更?
你有哪些策略应对不断的需求变更? -
如何运营天猫【十亿俱乐部】商家页面?
如何运营天猫【十亿俱乐部】商家页面?

