社区应用 社区服务 会员列表 统计排行 帮助 银行
  • 15876阅读
  • 79回复

《易语言编码规范1.1》6月20日更新

楼层直达
级别: 商业用户
发帖
3824
铜币
7700
威望
1
E积分
0
技术积分
0
易语言编码规范1.1

曾劲松
2005/6/19
http://www.goomoo.cn

最后更新:2005/6/20

以下是我个人在使用易语言编写程序的时候遵循的一些规范,我觉得很好,特推荐给大家,希望对大家有用。

1. 变量、参数、类成员变量、窗体控件命名规则。
    在写程序的时候,经常会不知道变量是在何处定义的,是全局变量、程序集变量、函数参数还是局部变量?有时候真的不好分别。我的方法是在全局变量的前面加上“全”字,比如“全实例句柄”;程序集变量的前面加个“集”字,比如“集鼠标已被按下”;函数参数前面则加个“参”字;类的私有成员前面加个“私”字;而局部变量则什么也不加。这样,一看变量的名字就知道它是在何处定义的。
    在局部变量中,如果使用了控件类型的临时变量,推荐在变量前加个“某”字,而不要使用与控件同名的变量。比如“某按钮”、“某编辑框”等。

2.函数、类方法的命名规则。
    函数的命名,建议使用“动-宾”形式的词组,而不要反过来写。比如“写配置文件”,“创建文件”等。 有的程序语言中喜欢反过来写,比如“FileOpen”、“FileClose”、“FileRead”等,虽然有它的好处(函数分类),但是代码读起来的时候很别扭。我们始终应该把代码的易读性放在第一位,最好是代码写完后读起来象读文章,而不是象在读程序。这里要特别强调一下返回逻辑型的函数,易语言中内定的函数中返回逻辑型的函数好像都有“是否”二字,比如“是否已创建”、“是否已打开”、“是否为空”、“文件是否存在”等,我觉得这样并不妥。为什么? 返回布尔类型的函数一般都在“如果”或“如果真”语句中,写成代码就是这样:
 .如果 (是否已创建 (_启动窗口))
显然读起来很别扭,而且“是否已创建”、“是否已打开”这些函数含意不明确,创建了什么?打开了什么?所以,我们自己写代码命名函数的时候,我建议使用类似这样的方式:
 .如果(窗口已创建(_启动窗口))

 .如果(文件存在("c:\test.txt"))

 .如果(参数为空())

等,很明确表示函数的意义,也知道返回的是布尔值,读起来也很顺口。

    对于类方法,取属性值推荐使用“取”字,置属性值推荐使用“置”字。

3.注释规则
    注释应该尽量详尽。大到整个程序,小到一个变量,必要的时候都应该有注释。
    首先,整个程序要有注释。表明程序的总框架、模块、功能分类,算法的大致描述,程序当前的问题、应该实现怎样的功能等,当然,这些也可以以程序文档的方式呈现。
    程序集也要有简单的注释,表明该程序集的作用。
    对于函数,一开始就要注明该函数实现的功能,参数的意义,算法思路,在使用该函数应该注意的问题等。函数中的语句应该按照意义分为合适的“段落”,也就是在有明显思路变化的地方插入空行,或添加注释,表示下面的代码是作什么用的,这个叫“段落注释”;有时候某一句代码也需要注释一下,这样的注释建议加在该代码的后面,这个叫“语句注释”。 
    对于重要的变量,应该在备注中写明该变量作什么之用,这个很重要。

4.中文,还是英文
    虽然易语言是中文编程语言,但并不推荐对所有对象的命名刻意追求全盘中文化。与行业相关的变量名也建议使用该行业特定的英文名称,如数学中的坐标,物理中的电流、电压、功率等、化学中的元素名、分子式等,计算机编程中的API函数、系统内定的常量等。 对于经常使用的循环计数变量推荐始终使用i,j,k;坐标则使用x,y,z;对于临时数值使用t;临时字符串使用s;临时字符串数组则使用sa。这样一方面一看就知其含义,代码也会短很多。因为i,j,k通常是数组下标,使用长中文变量名如“计次一”、“计次二”等写起来显然很麻烦,代码也会变得很长,特别是对于多维数组更是如此。
    对于Windows API 函数和常量,也建议采用原始英文名。其原因有二:一方面便于查阅函数帮助,特别是对于常量来说,这更重要。因为对于函数,不管翻译成中文是什么样子,在dll命令定义的地方就可以看到其“真面目”。但是常量则不然,比如你可以将“WM_NCLBUTTONDOWN”翻译成中文“窗口消息_非客户区鼠标左键被按下”,或者直接使用其数值161,写成代码就是这样的样子:

    .子程序 _按钮1_被单击
 按钮1.发送信息 (161, 17, 0)

  这段代码实现的功能是当在按钮上单击鼠标后就可以动态改变按钮的大小。但是谁看了这段代码都是一头雾水:161是什么?17、0又是什么含义?显然直接使用数字不行。如果把常量翻译成中文名,则是这样:

 .子程序 _按钮1_被单击
     按钮1.发送信息 (#窗口消息_非客户区左键被按下, 17, 0)

  虽然消息的含义明确了,但后面两位参数仍不知其含义。要查对应消息的lParam和wParam也无从下手,因为你不知道该消息的英文名是如何表示的。所以,我们推荐使用这样的形式:

 .子程序 _按钮1_被单击
   按钮1.发送信息 (#WM_NCLBUTTONDOWN, #HTBOTTOMRIGHT, 0)

  这样,即使读源代码的人不知道该消息和参数的含义,也可以通过查阅Win32 SDK很快弄懂它 。
    另一方面,不同的人对同一个函数有不同的译法,即使是同一个人,翻译出来的也会前后不一致,有些翻译甚至是错误的。比如易语言自带的API助手,它将“CreateBitmapIndirect”翻译成“创建设备有关位图_”,显然是不对的,应该是“间接创建位图”;“CreateFontA”和“CreateFontIndirectA”分别翻译成“用指定属性创建逻辑字体_”和“使用指定属性创建逻辑字体_”,真不知翻译者是否弄清了这两个函数的意义;还有“CreateCaret”翻译成“创建插入符_”,而“HideCaret”却翻译成“隐藏光标_”,前后不一致……等等,不一而足。官方的API函数翻译都是这样,更别提民间的翻译了,所以还是不翻译,直接使用原英文为好。

    以上是我在写代码的时候遵循的一些规则,我觉得挺好的,特写出来与大家共享。大家有什么好的建议,也可以回贴提出来,我们一起来完善它! 大家都遵循一个规则交流源代码的时候也就方便多了。


[此贴子已经被iouioupp于2006-11-19 16:02:48编辑过]
发帖
427
铜币
934
威望
0
E积分
0
技术积分
0
只看该作者 沙发  发表于: 2005-06-19
实例句柄_全 要比 全实例句柄 好一点点
级别: 商业用户
发帖
3824
铜币
7700
威望
1
E积分
0
技术积分
0
只看该作者 板凳  发表于: 2005-06-19
多打一个字符,那个字符还要切换输入法(或全半角)、按两个键,麻烦啊。
[此贴子已经被作者于2005-6-19 23:40:07编辑过]
级别: 商业用户
发帖
1780
铜币
2142
威望
0
E积分
2
技术积分
0
只看该作者 地板  发表于: 2005-06-19
值得推荐.
发帖
888
铜币
1856
威望
0
E积分
0
技术积分
0
只看该作者 4楼 发表于: 2005-06-19
级别: 管理员
发帖
5029
铜币
186
威望
12
E积分
0
技术积分
0
只看该作者 5楼 发表于: 2005-06-19
已收录易博士并建立专栏
http://www.shteach.com  [世恒教育]
世恒教育公开课QQ群号:131167014
级别: 商业用户
发帖
1063
铜币
2194
威望
0
E积分
0
技术积分
0
只看该作者 6楼 发表于: 2005-06-19
ding
发帖
888
铜币
1856
威望
0
E积分
0
技术积分
0
只看该作者 7楼 发表于: 2005-06-19
以下是引用世恒在2005-6-19 23:47:14的发言:
已收录易博士并建立专栏

世恒你现在改行做起了收藏专家啦!哈哈……
发帖
603
铜币
22070
威望
0
E积分
0
技术积分
0
只看该作者 8楼 发表于: 2005-06-19
有道理!
级别: 商业用户
发帖
1089
铜币
2259
威望
0
E积分
0
技术积分
0
只看该作者 9楼 发表于: 2005-06-20
以下是引用goomoo在2005-6-19 23:38:30的发言:
多打一个字符,那个字符还要切换输入法(或全半角)、按两个键,麻烦啊。

挺好,对于程序集变量我是这样的:程_变量

那个字符并不难打,输入法选对就好了
快速回复

限60 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
认证码:
上一个 下一个