编程思想重于编程语言浅谈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xxdddail/article/details/8982984
细细数来,编程路上走了不少岁月,接触过的语言也有不少。C、C++、C#、Java、JavaScript、Python都有接触,而C#、


JavaScript和Python是用的较多的,所以后续的浅谈以C#、JavaScript和Python为例。
每种语言有每种语言的特性,也有各自的规范,但接触了这么些语言后,总感觉有些东西是相通了,读了C#高级编程、《Head 


First》、《JavaScript语言精粹》、《程序员的修练之道》等书后,慢慢明白过来了,原来那种感觉叫做编程思想。


编程思想是一种想法,是外界学习和内部演化共同使用而形成,并慢慢烙刻在心里的东西。他会在编程的时候不自觉的作用,左右


后续的编程。


比如在最开始的时候使用C#是从C过渡来的,所以一开始的想法就是方法,于是凡事皆方法。可老大说,这样不太对,我们现在做的


是面向对象的编程,一切皆对象。开始时还不太明白,后来慢慢明白过来了,一切皆方法是一个面向过程的编程,就是把某个功能


按运行的过程进行实现,而一切皆对象是一个面向对象的编程,是站在一个更高的高度去看待一个功能。不再仅仅注意功能的运行


过程,还要注意过程的运行方式,以及和其他功能的相似相通之处。


于是就想着是否可以把这些相似相通的给抽象出来,形成更高的东西,然后在这些共性上去增加各自的特性以实现功能。要实现这


个过程,不可避免的使用到了类。于是有了类和继承的思想,并在后续的编程中运用。
public class A
{
……
}


public class a:A
{
……
}


类和继承运用的同时,在阅读着C#高级编程,慢慢感觉,仅仅用类和继承,似乎少了点什么。仔细琢磨着,原来是里面没有接口和


抽象类的东西,更没有虚方法这些可以重写的东西。于是又将这些加了进去。
Interface IA
{
……
}


public abstract class A
{
……
}


public class a:A,IA
{
……
}


等到后面看了Head First,接触到了设计模式,于是又将设计模式用了进去。其中有一个单件模式,非常好用,解决了一直困扰的


问题。比如要让一个共用的类实例在每个调用者中都是一样的,这时单件模式就派上了用场。特别是使用到配置文件的时候,如果


要配置文件实时生效,这不失为一个好方法。
C#的路继续走着……


后面公司要开发WEB版的产品,于是接触了JavaScript。在接触之初,说有多别扭就有多别扭。首先,JavaScript没有类的东西,只


有function。而从C#的面向对象走过来的,总想着是不是可以想办法弄个类。于是上网找资料,便用了function来构建类,并用


Prototype来添加成员。


但是用function来构建类,却会与function的方法区分不开。本来想着是不是可以对类的首字母采用大写,而方法采用小写的,可


是C#中的规范是方法要首字母大写的(也有的用首字母小写的)。用还是不用,这问题纠结了很久。两种语言两种规范,想着都头大


,总想着有没有什么方法可以解决,


这时看了JavaScript语言精粹一书,收获良多。比如明白了原型链的东西、不用new来新建实例、不用==和!=而用===和!==等等。而


收获最大的一点,是关于命名的规范。里面提到了命名空间和类都用大写字母开头、方法都用小写字母开头、使用{}的形式来定义


命名空间或类(个人觉得定义静态类较合适)、成员变量小写字母开始但后面加上下划线、全局变量使用大写字母开始但前面加上下


划线等等。


定义命名空间var MyNamespace={};


定义类:
function classA
{


}


定义方法:
function method1
{


}


到了这时,因另一个项目的需要使用C#语言,于是这一次使用C#语言时,JavaScript的思想又不自觉的产生了影响。之前我遵循的


是微软提供的命名方法,也参照了网上流传的一些命名方法,我是从C/C++过来的,对于成员变量,习惯于m_xxx等的命名方法。这


时想着是不是可以两者融合呢?于是便有了在C#中使用大写字母开头命名类、小写字母开头命名方法、成员变量小写字母开始但后


面加上下划线、全局变量使用大写字母开始但前面加上下划线等。


但是C#中又有属性、常量等的特别东西,于是受着对于带单位的命名是在变量下划线后加上个单位(如:len_mm)的影响,就想着在此


基础上进行演化。属性是xxx_pro,常量是xxx_const。


到了这里,还有一个问题一直困扰着我,那就是C#中有关键字public、private、protected可以声明作用域,而在javascript中没


有。这该怎么办?


在这段时间我在看着《程序员的修练之道》,里面提到,使用一个程序员,务必要掌握一门文本操作语言,如python、perl、lua等


。我选择了python。(因为C#和javascript使用的都是VS2010的IDE,而几种文本操作语言中,只找到了python的VS插件,这是《程


序员的修练之道》另一个重要思想,尽量只使用一种IDE)。


有了其他语言的功底,学python很快就入门了。于是又是想着怎么样用类和继承。python里有class Parent 和class Child


(Parent)的写法,并引用了模块的做法。而里面有一点相当重要,就是对于类的私有方法的定义方式。该方式是在方法的前面加两


个下划线。至此,原来javascript中对于私有方法只能使用包含或是匿名的方式,这里又多了一种方式。


从C#/Javascript/Python三种语言的交叉,最明显的感觉是每种语言思想的相互影响、渗透、演化和融合。个人觉得编程思想的形


成至关重要,而这不仅仅需要多看高人牛人的书籍和心得,更要用心去实践和总结。
阅读更多
换一批

没有更多推荐了,返回首页