hellojwx的个人博客分享 http://blog.sciencenet.cn/u/hellojwx

博文

FORTRAN与匈牙利命名法

已有 5506 次阅读 2013-1-27 02:10 |系统分类:教学心得|关键词:学者| Fortran, 命名, 匈牙利

FORTRAN是不区分大小写的,但是这并不妨碍我们采用对自己方便的变量命名法。
命名法notation是指程序员对自己编写的程序中变量的命名规则,原则上说只要符合某种语言的语法要求,变量可以起任意的名字,因为计算机只认识你输入的字符。但是对于编写程序的人来说,给变量起一个好懂易记的名字,其实非常重要。以FORTRAN为例,我们经常会看到一个形如i,ii,jjj之类的变量名,这些变量名重复度高容易混淆,同时因为没有实际意义,时间久了容易忘记,而且也不便于团队之间的交流。因此采用一套好的命名法十分有益。匈牙利命名法就是一套很好的规则。

匈牙利命名法是1972年匈牙利裔程序员查尔斯西蒙尼发明的,此人后来成了微软的总设计师。在匈牙利命名法中,一个变量名由一个或多个小写字母开始,这些字母有助于记忆变量的类型和用途,紧跟着的就是程序员选择的任何名称。这个后半部分的首字母可以大写,以区别前面的类型指示字母(称为驼峰大小写)。例如:
iStep (i表明序号index,说明这个变量是整数型,用于循环的序号或者计数器)
jPart   (j跟i类似,比如在嵌套循环中外循环用了iPart,那么内循环可以用jPart、kPart等等)
nAtoms (n表明数目number,说明这个变量是整数型,用于表示数组长度等等,有时也可以作计数器)
arrXYZ  (arr表明数组array,说明这个变量是一个数组的名字)
dR (d表明差值difference,说明这个变量用于表明两个变量间的差值)。
这样当看到一个变量时,很快就是反应出它是什么类型,什么意义。其中,变量的意义比其类型更重要。以前在WINDOWS编程中曾经流行过叫作系统匈牙利命名法的注重类型的命名方法,机械地给每个变量套上一个公式:变量类型+变量名称,不过这种命名法争议很大。而且这种系统(机械)命名法并不是西蒙尼氏的本意。

在FORTRAN科学计算中,我们可以适当地采用匈牙利命名法,比如下面这个对势系统循环求总能的小程序:
Module coor
integer, parameter :: nAtomsTot = 100
real*8, dimension(nAtomsTot,3) :: arrXYZ
End Module

Program main
implicit none

real*8 :: uTot
integer :: iAtom, jAtom
real*8, external :: getPairEn

uTot = 0.d0
do iAtom = 1, nAtomsTot - 1
do jAtom = iAtom + 1, nAtomsTot
uTot = uTot + getPairEn(iAtom, jAtom)
end do
end do

End

Function getPairEn(iAtom, jAtom)
use coor
implicit none
real*8 :: getPairEn
integer :: iAtom, jAtom
real*8 :: dR(3), r
dR(:) = arrXYZ(iAtom,:) - arrXYZ(jAtom,:)
r = sqrt(dot_product(dR,dR))
getPairEn = 1.d0/r
End Function

这段程序包含三个部分:Module用于定义公有变量,自定义函数getPairEn用于计算一对原子间的相互作用,主程序中的循环用于计算总能。这个例子中的变量定义基本上符合了匈牙利命名法,比如 nAtomsTot 表示原子总数total number of atoms等等。函数名以get开头表明这个函数的作用是要返回一个值,而如果函数的作用是更新全局变量的话(例如移动原子)那么函数名可以以set开头(例如setAtomsMove(iAtom,dR))。


https://m.sciencenet.cn/blog-253129-656867.html


下一篇:LAPACK数学库的使用实例解说

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-18 19:00

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部