隐喻是什么?
隐喻其实就是比喻,把一件比较陌生的事情,用一个形象的思维来描述。
我给你举个例子:
我想做一种操作,先定义一个整数数组A,再定义整数B = 0。
定义如下的操作:
1 向数组里边保存数值的操作:
得到一个整数C0,就在A[0]处保存C0,B加1。再得到一个C1,在A[1]处保存C1,B加1.
2 从数组取值的操作:
必须先从A[0]处取值,然后删除A[0]的值,A[0]后面的数值依次向前面窜一位,B减1.
上面的操作应该是看明白了吧,我的描述应该也没什么问题。按照我的描述,你也可以写出相应的代码来。但是
上面的描述是不是显得很啰嗦,并且不是一目了然。说白了,上面的操作无非是一个队列,先进来的先出去。这个队列,就是我们
说的隐喻,用现实我们的生活经验,来模拟虚拟的代码世界的规则。看起来确实是一目了然呀。
我们为什么要用隐喻呢?
因为我们人类,已经习惯了形象化思维,我们有推理的能力,从相似的事物规则推理我们不很熟悉的规则的能力。并且在很多时候
是非常有效的。这就是我们说话的时候,总喜欢打比方的原因。怎么讲你也听不明白,那我就给你打个比方,恩,看来你听明白了。
代码的世界,是一个很虚拟的世界。在这里你定义的一些规则,如果能和现实的规则有什么联系的话,理解起来就简单多了。并且,
还可以利用现实的经验来推断你的代码。
据个例子:
定义一个布尔变量 LampSwitch,代表这是一个灯的开关。现在有两个函数亮灯()和灭灯()。
1 LampSwitch =On的时候,应该是调用什么函数呢?
2 LampSwitch =Off的时候,应该调用哪一个函数呢?
八成没有人可以回答错了。
但是如果我定义一个 整数 Abc
1 Abc =1的时候,应该是调用什么函数呢?
2 Abc =2的时候,应该调用哪一个函数呢?
你还真说不上来,这个Abc是什么呀?嗯,,,先不管是什么,我就规定Abc等于1的时候,调用亮灯(),等于2的时候调用灭灯()。
这个程序也可以运行,估计你做的程序也不会有什么太大的问题。不过我敢保证3个月以后,单独拿出来Abc来,你肯定忘记了应该怎么
设置了。它太不形象了。现在还好,调用的2个函数还比较形象,如果是函数是A1()和Fgh()呢。或者别人看你的程序呢?
别人-----恩,这家伙写的什么呀,什么意思呀?怎么Abc等于1的时候就调用A1()。
作者------你就照着上面的规则用吧,不是已经写得很清楚了吗?
别人----- 但是,想不明白你为什么这样写。。。。
作者------代码就是这样,慢慢就习惯了。
我敢肯定,你现在写的代码,肯定那一天就是bug的隐患。
设想你来到一个大楼,想用一下电梯,上面的按钮表示着[1]和[2],你知道是干什么的吗?
你要是不知道的话,你的代码里边还是少了一些不很形象的变量和函数要好一些,你说呢?
总结:
代码很难懂,最好你用一个形象的比喻把它表现出来。就像我们的生活中间一样。