zoukankan      html  css  js  c++  java
  • 编程思想重于编程语言浅谈

    细细数来,编程路上走了不少岁月,接触过的语言也有不少。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三种语言的交叉,最明显的感觉是每种语言思想的相互影响、渗透、演化和融合。个人觉得编程思想的形


    成至关重要,而这不仅仅需要多看高人牛人的书籍和心得,更要用心去实践和总结。
  • 相关阅读:
    [Swift]LeetCode374. 猜数字大小 | Guess Number Higher or Lower
    [Swift]LeetCode371. 两整数之和 | Sum of Two Integers
    [Swift]LeetCode367. 有效的完全平方数 | Valid Perfect Square
    [Swift]LeetCode350. 两个数组的交集 II | Intersection of Two Arrays II
    [Swift]LeetCode349. 两个数组的交集 | Intersection of Two Arrays
    [Swift实际操作]七、常见概念-(9)使用定时组件Timer执行定时任务
    [Swift实际操作]七、常见概念-(8)日历Calendar和时区TimerZone
    浅谈广告交易系统
    浅谈广告交易系统
    6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7605090.html
Copyright © 2011-2022 走看看