由于编程是“条条大路通罗马”,程序员有很大的自主性,程序员可以采用任意方法实现功能,导致编程水平的高低不平。我认为程序员应该掌握的实用编程技能,掌握这些技能就要掌握这些技能的本质,吃透这些本质,才能归纳其应用范围和注意点:而那些只会写程序不知道为什么这样写的程序员则可能不能用最好的语句、最简的语句、最恰当的语句来编写程序,更不用说采用更高的技巧去组合这些语句,以达到高质量的程序。
长期的编程实践中我认为以下的编程技能是基础,是必须要掌握的,其他更高层次的编程技能,则要用到才能学到。
1、 赋值
赋值是编程中不可缺少的基本语句,而且是最基本的语句。掌握这个语句,看起来很简单,但是越是简单东西越是要关注。最简单的赋值是指将一个值赋给一个变量。例如x=1。
赋值的本质是事物间的转移。而且赋值本身就是一个中间过程,反映到代码级意义就是将内存中的值或内存指针赋给一个内存指针。
赋值有两个方面:一个是:取什么值或变量或对象,一个是:赋到什么变量或对象。程序员在编程的时候,往往在两个方面都有困惑:我取什么值、取什么变量、取什么对象,怎么找到这些值、这些变量、这些对象,我取到后,我赋给谁。这都是我们常常遇到的。
在我们赋值的时候我们要注意:
1) 等式两面的数据类型要相等。
2) 赋值语句相比于其他语句是比较快的。这点在注重效率方面要注意的。
赋值语句比函数调用要快,比循环语句要快。
例如:一个巨大循环中编写了一个循环语句:
for(i=0;i<3;i++)
A[i]=i+1;
还不如将其变成赋值语句:
A[0]=1;
A[1]=2;
A[2]=3;
3) 当有多条赋值语句的时候,赋值处理可能会有先后次序。
4) 赋值语句多了(20条以上,阅读起来非常死板,没有技术含量),可能要考虑到循环赋值。
2、 条件处理
条件处理是仅次于赋值处理编程内容,程序的变化基本上是由于条件处理引起的。不同的条件成立将进行不同的处理。所以条件处理的本质是事物变化的变化带来相应的变化。
在编程实践中,我们往往困惑于:什么样的条件?做什么事?而且还要考虑什么时候开始考虑条件。
赋值处理是个顺序处理。而条件则增加赋值处理的可能性,当条件满足时,A赋值就可能执行了,当条件不满足时,B赋值就可能执行了。
在条件处理的时候,我们要注意:
1) 我们如何选择我的条件?即我们的条件表达式。
其实这个问题很是复杂。
一般来说,我们会把最主要的条件作为第一个条件。但是,我们也会把满足条件的最大结果集的条件作为第一个条件。这样最后的条件,往往是不能满足的,或是满足后,也不需要太多处理的。
从条件表达式的设计中,我们可以单个变量来表示条件,也可以多个变量运算来表示条件,单个变量中,可以用数值型、字符型、逻辑型来表示。其中,也是很有讲究的。
例如。flag==1;flag==’1’;flag==True
都可以让程序条件转移,但是,如何选择则要考虑的很多因素。
2) 我们不要遗漏例外情况
例如,我们考虑i=1的时候,i=2的时候,就是没有考虑到i<1的时候和i>2的时候。
遗漏条件,往往说明我们的程序员缺少全局观念、缺少例外观念。很多程序写的不好的原因其中就有这个问题。
3) 条件间不能有交叉
例如:
If(i>1 &&i<=5)
x=1;
If(i>4&&i<10)
x=2;
当i=5的时候,
x先等于了1,后等于了2。这个必须要避免的。很多程序出错,都和此类问题有关。
4) 要特别注意条件处理的覆盖问题。
例如:if(flag==1)
X=1;
If(flag==2)
X=2;
X=5;
无论什么条件,x始终等于5。
5) 要知道if和case的各自适应情况。懂得什么时候用if,什么时候用case。
3、 循环
循环是重复操作的简单表达,只要有重复操作,就可以采用循环语句。循环的本质是重复。
在循环处理的时候,我们要注意:
1) 循环处理是影响效率的重要方面
当程序出现效率问题的时候,要首先在循环语句中进行查找。
2) 循环处理的前提条件
一般来说,重复执行三次以上可以用循环语句。低于三次的,最好不要用循环语句。
例如:
For(i=0;i<3;i++)
B[i]=i;
不如写成:
B[0]=0;
B[1]=1;
B[2]=2;
当然从可读性和可扩展性方面,也可以用循环语句。
3) 不同的循环条件采用不同循环语句
程序员要懂得什么情况下用for,什么情况下用do while,什么时候用foreach
尽管用以上语句都能达到相同目的,但是程序员还是要知道其的应用范围,使得应有最恰当。
4) 充分利用循环中的,中断循环,继续循环,函数返回,程序退出等语句,使得循环更加丰富多彩。
4、 字符串操作
字符串是信息的重要的表现形式。字符串操作是编程中最常用的操作之一。字符串操作的本质是信息的加工。由于许多信息没有标准,程序员对其操作以符合自己的标准要求。
例如:有的字符串包含了多种信息,那就必须对字符串进行拆分;有的字符串缺失信息,那就要对字符串进行合并。
对字符串操作主要注意以下几个方面:
1) 空串处理
由于原始的字符串由于操作原因和系统原因,字符串的头尾会出现若干个空格,那么在字符串处理之前,必须要将空格除去。
2) 乱码处理
有些字符串中存在各种乱码,导致字符串显示出现看不懂的字符。这些情况主要是字符串出现了控制字符的代码,汉字中出现字符不匹配。
3) 分隔符处理
分隔符往往会出现一条记录之中或参数之中,起到分隔信息之用,通过分隔符来把信息取出来。实际当中会出现信息内容本身含有分隔符,或乱码产生中产生分隔符,这些情况,就需要改变分隔符或进行特殊的处理。
4) 字符与其他数据类型的转变
在实际编程当中,我们运算的对象的一致性,往往要进行字符串转向其他数据类型的操作,或其他数据类型转向为字符串的操作。一般来说,其他数据类型转为字符串比较容易,而字符串转换成其他数据类型,就要考虑转换前的字符串格式是否符合要求。
例如:将“1,000,000”转换成数值,则转换前要将“,”去掉。
5) 子串处理
子串处理在查询中经常使用。子串匹配有前、中、后三种。子串匹配往往要花费的时间较多,子串越短、查询串越长则消耗的时间越长。在建立索引字段中进行查询时,只有前匹配才能利用索引,到达快速查询之目的,但是在中后匹配则索引无效,需要每个记录逐一匹配,时间最长。程序员要了解以上内容,因势利导,才能正确进行子串处理,以达到快速查询目的。
5、 算术运算
算术运算在编程之中是仅次于字符串操作内容。其中加1操作很多,用途也很广。一般应用软件中加减乘除最为常用。算术运算本质是数值类信息的加工。算术运算一方面是实际应用的算法要求,另一方面则是编程算法的需要。
例如,应用系统中要计算长方形的面积。则会编写S=L*D语句。
假如要编写计算100个长方形面积,则需要一个指针,通过指针+1进行下一个长方形面积的计算。而指针加1,这个运算则是算法的需要了。
算术运算用于应用中公式计算相对简单。但是,算术运算用于算法的技巧和实现就不那么简单了,其注意点是:定义一些中间变量,通过中间变量的加减,使之能变成循环操作。
6、 数组
数组是存放数据的一个集合,数组操作也是编程常常遇到的:数组的本质是事物的集合。但是要注意这个集合对象个数是有限的,而其数组是存放在内存之中的,因此数组操作很快。数组的使用很大一部分是利用循环语句。数组和循环的结合使得程序的质量有很大的提高。
对数组我们应该注意:
1、 数组的个数相关问题
2、 多维数组的表示方法,以及存放形式
3、 数组越界问题
4、 空数组
5、 数组在循环语句中的运用。
附:本以为这个话题一篇文章就能解决了,但是越写越越多,我只好分精简再精简,还是要分篇写吧。
下篇《程序员应该掌握的实用编程技能2》
主要内容:
7、 调用
8、 文件操作
9、 逻辑运算
10、 数组
11、 数据库
12、 控件
13、 类
14、 参数化