亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        編程中的中文標識符應用

        2017-11-16 02:04:54胡建飛焦振峰王長懷武占文
        軟件 2017年10期
        關(guān)鍵詞:標識符控件命名

        胡建飛,焦振峰,賈 振,王長懷,武占文,張 祥,由 樂

        (1. 中海油能源發(fā)展股份有限公司管道工程分公司,天津 300452;2. 海油發(fā)展珠海管道工程有限公司,珠海 519000)

        編程中的中文標識符應用

        胡建飛1,2,焦振峰1,2,賈 振1,2,王長懷1,2,武占文1,張 祥1,2,由 樂2

        (1. 中海油能源發(fā)展股份有限公司管道工程分公司,天津 300452;2. 海油發(fā)展珠海管道工程有限公司,珠海 519000)

        編程中會遇到大量為常量、變量、對象命名的工作,命名稱為標識符,幾乎所有的計算機編程教材在介紹標識符命名時一律默認用的是英文,網(wǎng)上很多人說標識符只能使用英文字符。雖然也有人提到用中文標識符編譯器可以通過,但為了避免意想不到的錯誤,不建議使用中文標識符。實際上只要支持unicode編碼的編譯器一律可以使用中文標識符,在編程中使用中文標識符,可以簡化程序的代碼數(shù)量,而且增加可讀性。在我剛剛完成的一個軟件中大量使用中文標識符,程序已正常運行數(shù)月,在此我要為中文標識符正名。

        編程;標識符;unicode編碼;中文標識符

        0 引言

        曾經(jīng)有朋友問我:你們學計算機的一定英語很好吧?我會直接反問何出此言,朋友說你們編程不都是用英文嗎?朋友的話讓我深思,編程之所以給業(yè)外朋友這樣的看法,我想原因大概就是他們看到的代碼要么是源自英文的編程語言,要么是編程者用英文命名的標識符,幾乎看不到中文的存在,所以他才會有編程者全部使用英文寫代碼的印象。[3,4]

        而幾乎所有的計算機編程教材介紹標識符命名規(guī)則時也從未提到可以使用中文,從而導致大批編程者默認標識符只能使用英文字符,[1,2,7,8,9]像我這樣的英語學渣就使用漢語拼音來作為標識符。

        雖然有很多勇于嘗試者早就發(fā)現(xiàn)用中文標識符也是可行的,但為了避免意想不到的錯誤還是不敢在實際工作中應用。更有很多編程者直言不推薦中文標識符,至于原因只說避免未知的錯誤。

        而實際上凡是支持 unicode編碼的編譯器一律支持中文標識符,使用中文標識符不僅僅可以增加可讀性,而且使我們中國的編程者在給變量命名時變得更加靈活,代碼數(shù)量也可以在一定程度上減少,降低寫代碼的工作量[5]。

        1 原理簡介

        我們知道計算機編程代碼實際上是一個文本文件,文本文件的存儲就涉及到了文本編碼規(guī)則,下面對計算機文本編碼發(fā)展做個簡要介紹。

        1.1 ASCII編碼

        早期的計算機使用的是ASCII編碼,由美國國家標準學會制定,使用一個字節(jié)存儲文本信息,可以存儲英文大小寫字母、數(shù)字、標點符號及控制符。

        ASCII編碼只考慮到了美國人自己使用的英文,初期的編程環(huán)境存儲代碼使用的也是ASCII編碼,導致我們在寫代碼時只能使用英文字符。

        1.2 ANSI標準

        為了使計算機能夠存儲更多國家的文字,美國國家標準學會又制訂了計算機文本編碼的 ANSI標準,使用2個字節(jié)來存儲文本信息,具體怎樣存儲由各個國家和地區(qū)自己建立編碼,這就導致各個地區(qū)之間文本不能通用,不僅不同語言地區(qū)不能通用,甚至同一語言使用了不同編碼也不能通用,例如中國大陸地區(qū)是GB2312編碼,而臺灣地區(qū)使用BIG5編碼。

        1.3 Unicode編碼

        為了避免各個地區(qū)之間編碼亂象,國際標準化組織制訂了 unicode編碼,這種編碼直接廢除各個地區(qū)自己制定的編碼,統(tǒng)一使用兩個字節(jié)存儲所有國家地區(qū)的符號,所以被稱為萬國碼,這樣就可以避免不同地區(qū)之間傳遞信息引起的亂碼現(xiàn)象。UTF-8編碼是針對Unicode編碼制定的一種傳輸和存儲規(guī)則,可以使用變長的字節(jié)來存儲文本。

        1.4 代碼頁

        在非 Unicode 環(huán)境下,由于不同國家和地區(qū)采用的字符集不一致,很可能出現(xiàn)無法正常顯示所有字符的情況。微軟公司使用了代碼頁轉(zhuǎn)換表的技術(shù)來過渡性的部分解決這一問題,即通過指定的轉(zhuǎn)換表將非 Unicode 的字符編碼轉(zhuǎn)換為同一字符對應的系統(tǒng)內(nèi)部使用的 Unicode 編碼。

        1.5 編程環(huán)境使用Unicode編碼

        以visual studio 2010中文版為例,在文件菜單中找到高級選項,打開后就可以看到當前文件使用的編碼[6],如圖 1所示,可以看到默認使用的是Unicode編碼。

        在 Unicode編碼下無論是中文字符還是英文字符地位都是等同的,所以標識符無論取什么樣的名字(當然要遵守標識符命名規(guī)則,不能使用關(guān)鍵字,不能以數(shù)字開頭)編譯器都認,而且經(jīng)過編譯器后全部變成了二進制,軟件在執(zhí)行的效率上并沒有區(qū)別。

        圖1 Visual studio 2010中文版默認使用的編碼及代碼頁Fig.1 Encoding and code page of visual studio 2010 Chinese version

        2 中文標識符在編程中實際應用

        2.1 數(shù)據(jù)庫中文字段的使用

        很多的數(shù)據(jù)庫編程者早就使用了中文命名數(shù)據(jù)庫字段,而編譯器在讀取數(shù)據(jù)庫時也是將字段名直接轉(zhuǎn)化為變量來使用的,中文字段并未產(chǎn)生任何問題。由于中文命名字段比英文帶來的種種便利,所以數(shù)據(jù)庫字段名是編程者最早嘗試使用中文的地方。下面以一個簡單的例子,以英文和中文命名字段做下對比,看寫代碼的工作量大小。

        我們以一個簡單的員工表為例,表內(nèi)需要存儲以下信息:姓名、性別、出生年月、部門、崗位、座機號碼、手機號碼、電子郵箱、備注。如果我們以英文字符建立數(shù)據(jù)庫表(實際上大多計算機編程教材就是這么做的),那我們要在表中建立以下字段:

        name、sex、birthday、department、post、telephone、mobile、email、remark,表名為 employee。當我們需要在程序中顯示這個表時我們用到的SQL查詢語句要這樣寫:

        Select * from employee

        但這樣顯示出來的的表頭依然是英文,這顯然會讓大多用戶難以接受,用戶一定會要求軟件內(nèi)要用中文顯示,所以查詢語句就要這樣寫:

        Select name as 姓名,sex as 性別,birthday as 出生年月,department as 部門,post as崗位,telephone as 座機號碼,mobile as 手機號碼,email as 電子郵箱,remark as 備注 from employee

        從上面兩條語句可以看出,為了達到我們面對的中國客戶的要求,如果我們的字段名使用了英文的話,寫SQL查詢語句的工作量增加了很多。因為這個原因,很多數(shù)據(jù)庫編程者早就嘗試使用中文字段名及中文表名,那數(shù)據(jù)庫表應建立如下字段:

        姓名、性別、出生年月、部門、崗位、職稱、座機號碼、手機號碼、電子郵箱、備注。表名為“員工”。

        這樣建立表后,查詢語句依然按照下面這樣寫就可以按中文顯示表頭

        Select * from 員工

        可以看出使用中文建立數(shù)據(jù)庫表減少了寫代碼的工作量。

        2.2 編程中變量命名使用中文

        編譯器讀取數(shù)據(jù)庫時是將字段名轉(zhuǎn)化為變量來使用的,既然中文字段可以使用,那中文變量照樣能夠使用。下面以C#為例,我們平時習慣這樣寫:

        string name = "張三";

        像我這樣的英語學渣的,可能會這樣寫:

        string xingming = "張三";

        但實際上還可以這樣寫:

        string 姓名= "張三";

        很明顯最后一個直接使用了中文變量名是最容易讀懂的,而且命名也最靈活。在某些專業(yè)的領(lǐng)域進行編程時,中文命名變量的優(yōu)勢將會更加明顯,下面以我剛剛完成一段海底管道混凝土配重生產(chǎn)時的負浮力計算代碼為例進行介紹。海底油氣管道的鋼管需要進行混凝土配重,負浮力是海底管道一個非常重要的指標,計算過程中需要大量專業(yè)的參數(shù),如:配重長度、配重管端預留、配重涂層單位重量等,這些專業(yè)的名詞如果挨個去翻譯成英文將會是一個繁重的工作,所以在沒有使用中文變量名之前我普遍用了拼音,因參數(shù)太多,為了可讀性我全部用了全拼,于是就有了以下這段形式的代碼:

        double peizhongchangdu=(changdu - ((2 * Convert.ToDouble(dr["peizhongguanguanduanyuliu"].ToS tring()))/1000));

        double peizhongtucengdanweizhongliang = peizhongtufuzhongliang / peizhongchangdu;

        double peizhongguandanweizhoangliang = peizhongtucengdanweizhongliang + fangfudanweizhongliang + zhongliang / changdu;

        double fuli = Convert.ToDouble(dr["haishuimidu"].ToString()) * (pingjunzhouchang * pingjunzhouchang) /(4 * Math.PI*1000000);

        double fufuli = peizhongguandanweizhoangliang- fuli;

        上面這段代碼寫完后再去看會讓人頭大,這些專業(yè)領(lǐng)域內(nèi)的詞匯我們直接使用中文變量,代碼將會變得非常易懂。全部使用中文變量后,代碼變成以下形式:

        double 配重長度=(長度 - ((2 * Convert. To-Double(dr["配重管端預留"].ToString()))/1000));

        double 配重涂層單位重量 =配重涂敷重量 /配重長度;

        double 配重管單位重量 = 配重涂層單位重量 +防腐單位重量 + 重量 / 長度;

        double 浮力= Convert.ToDouble(dr["海水密度"].ToString()) * (平均周長 * 平均周長) / (4 * Math.PI*1000000);

        double 負浮力 = 配重管單位重量 - 浮力;

        我上面的這段代碼依然能夠正常編譯運行,而且變得極為易讀,就算不懂編程的管道涂敷業(yè)內(nèi)人士也能看懂上面的代碼,甚至能進行簡單的修改。

        2.3 編程中控件ID使用中文

        下面以使用 ASP.NET(C#)建立一個員工信息管理頁面為例[10],首先要在頁面中建立如圖 2中所示的控件,為了顯示員工信息,我使用了9個TextBox控件,Visual Studio會自動為這9個TextBox控件命名為 TextBox1、TextBox2。TextBox9,我們可以直接使用這些名稱,往往初學者會這樣做,但絕對不推薦,因為這樣會使代碼非常難以讀懂和維護。

        圖2 員工信息顯示及修改頁面Fig.2 Employee information display and modification page

        我們先使用英文為這9個TextBox控件命名,試驗下從數(shù)據(jù)庫讀取代碼的工作量,如我們輸入姓名后要顯示此員工的其他信息,代碼如下:

        OleDbCommand mycmd = new OleDbCommand("select * from 員工 where 姓名='"+nameT .Text+"'", con);

        OleDbDataReader dr=mycmd. ExecuteReader();

        if (dr.Read ())

        {

        sexT.Text = dr["姓名"]. ToString();

        birthdayT.Text = dr["出生年月"].ToString();

        departmentT.Text = dr["部門"].ToString();

        postT.Text = dr["崗位"]. ToString();

        telephoneT.Text = dr["座機號碼"].ToString();

        mobileT.Text = dr["手機號碼"].ToString();

        emailT.Text = dr["電子郵箱"].ToString();

        remarkT.Text = dr["備注"].ToString();

        }

        else

        {

        Response .Write ("");

        }

        從上面我可以看出,代碼工作量和表字段數(shù)量有關(guān),實際工作中我使用過30個字段的表,因為控件名稱和字段名稱不同,所以要靠我們寫大量代碼去對應。

        因為前面提到的原因,數(shù)據(jù)庫表字段我們使用了中文,那么試驗下控件也使用中文的代碼工作量,所有TextBox控件使用和對應的數(shù)據(jù)庫字段相同的中文名,代碼如下:

        OleDbCommand mycmd = new OleDbCommand("select * from 員工 where 姓名='"+姓名.Text +"'", con);

        OleDbDataReader dr=mycmd. ExecuteReader();

        if (dr.Read ())

        {

        foreach (Control cl in Panel1.Controls)

        {

        If(cl is TextBox) ((TextBox)cl).Text =dr[cl.ID].ToString();

        }

        }

        else

        {

        Response .Write ("");

        }

        從上可以看出,無論表有多少字段,統(tǒng)統(tǒng)一個foreach語句搞定,讓數(shù)據(jù)庫表字段和控件根據(jù)名稱自己去對應,大大簡化了代碼的工作量。

        2.4 Javascript的中文標識符使用

        Visual Studio的代碼在服務器端編譯沒問題,那么客戶端編譯的 JavaScript可以不可以使用中文標識符呢?

        我們打開當前流行的任意一款瀏覽器,在文件保存對話框可以看到瀏覽器默認使用的也是unicode編碼,那應當也可以支持中文標識符。

        例如JavaScript教科書里一般是這樣寫的[2,7]:

        其中的字符串變量命名為string1,也可以使用中文命名,如下所示進行測試:

        瀏覽器依然可以正常運行以上這段代碼,結(jié)果如圖 3所示,證明在 JavaScript中中文標識符是可行的。

        圖3 使用中文標識符的JavaScript執(zhí)行Fig.3 JavaScript execution using a Chinese identifier

        3 關(guān)于中文標識符的爭議

        上面我都是以 windows系統(tǒng)下的編程環(huán)境為例,曾經(jīng)在網(wǎng)上見到有蘋果系統(tǒng)開發(fā)人員說 Xcode開發(fā)環(huán)境也是支持中文標識符的,其實原因很簡單,現(xiàn)在的Xcode使用的也是unicode編碼,那當然也支持中文標識符。

        既然中文標識符在所有支持 unicode編碼的編程環(huán)境中都可以實現(xiàn),而且有很多優(yōu)勢,但中文標識符在編程人員中使用卻不是很廣泛,大多還是使用英文或拼音做為標識符,甚至還有反對使用中文作為標識符的聲音,提出的理由大致就是代碼移植可能發(fā)生不兼容或者就是可能出現(xiàn)錯誤。

        實際上我們絕大多數(shù)編程人員所編寫的軟件都是自己編自己改,根本不涉及到將來要移植什么的問題。

        其實大多編程人員不敢大規(guī)模使用中文標識符歸根結(jié)底就一句話:怕出問題。

        編程人員最怕的就是編譯的時候報錯,當排除所有錯誤程序能正常運行時,心中的愉悅感是沒有寫過代碼的人是永遠體會不到的,但查找錯誤的過程卻是非常痛苦的。如果使用了教科書上都沒有使用的中文標識符,將來出了問題修改起來將會是大工程,為了保險起見還是都用了英文。但我在一個耗時大約半年的軟件工程中大量使用了中文標識符,現(xiàn)在軟件已經(jīng)正常運行了數(shù)月,并未出現(xiàn)任何問題!

        4 結(jié)論

        本文從編程環(huán)境編碼探討了中文標識符的可行性,進一步從實踐中試驗中文標識符帶來的種種便利,從原理上說所有使用 unicode編碼的編程環(huán)境都支持中文標識符,而且中文和英文是同等對待的,使用中文標識符不會出現(xiàn)任何問題,而且使用中文標識符將會增加程序的可讀性,降低后期維護的工作量。同時使用中文標識符命名變量、控件將會使命名更加靈活。

        使用中文標識符,編程變得更簡單!

        [1] 龐婭娟, 房大偉, 呂雙. ASP. NET從入門到精通, 清華大學出版社.PANG Y J, FANG D W, LV S. ASP. NET is proficient in getting started, tsinghua university press. (in Chinese).

        [2] JavaScript從入門到精通, 清華大學出版社.JavaScript from entry to mastery, tsinghua university press.(in Chinese).

        [3] 蔣順業(yè), 蘭洋. C# 與Matlab 混合編程在預警系統(tǒng)中的應用[J]. 軟件, 2013, 34(4): 82-84.JIANG SY, LAN Y. Application of hybrid programming with C# and Matlab in early warning system[J]. Software, 2013,34(4): 82-84(in Chinese).

        [4] 王大龍. 基于C# 的動態(tài)圖形顯示設(shè)計與實現(xiàn)探討[J],軟件,2013, 34(11): 96-97.WANG DL. Design and implementation of dynamic graphic display based on C#[J]. Software 2013, 34(11): 96-97(in Chinese).

        [5] 李沁蓉. 淺談Visual Basic 程序的優(yōu)化[J] 軟件, 2014,35(1): 119-120.LI QR. Discussion on the optimization of Visual Basic program[J]. Software, 2014, 35(1): 119-120(in Chinese).

        [6] 賈志先. Visual Studio 2010 中訪問VFP 表方法研究[J].軟件, 2015, 36(3): 15-18.JIA ZX. The method of accessing VFP table in Visual Studio 2010, Software, 2015, 36(3): 15-18(in Chinese).

        [7] 周瑞. 從零開始學JavaScript, 電子工業(yè)出版社.ZHOU R. Learn JavaScript from scratch(in Chinese).

        [8] VB. NET 2005程序設(shè)計從入門到精通, 人民郵電出版社.VB.NET 2005 programming from entry to mastery, Posts and Telecommunications Press. (in Chinese).

        [9] Java 從入門到精通, 清華大學出版社.Java from entry to mastery, tsinghua university press. (in Chinese).

        [10] 唐學嶺. 基于Visual C# 的教學校歷輔助生成系統(tǒng)[J]. 軟件, 2013, 34(1): 41-44.TANG XL. School teaching aided generation system Visual based on C#.software, 2013, 3(1): 41-44 (in Chinese).

        Application of Chinese Identifier in Programming

        HU Jian-fei1,2, JIAO Zhen-feng1,2, JIA Zhen1,2, WANG Chang-huai1,2, WU Zhan-wen1, ZHANG Xiang1,2, YOU Le2
        (1. CNOOC Energy Technology and Services-Pipe Engineering Co., Tianjin 300452, China;2. CNOOC Energy Technology & Services Zhuhai Pipe Engineering Co., Ltd, Zhuhai 519000, China s)

        Programming will name a lot of constant, variable, object,The naming called identifiers, almost all computer programming textbooks in the introduction will use the default identifier name is English, many people say can only use English character identifier. Although some have mentioned that the Chinese identifier compiler can pass, it is not recommended to use the Chinese identifier in order to avoid unexpected errors. In fact, as long as the compiler supporting Unicode encoding can use Chinese identifiers, the use of Chinese identifiers in programming can simplify the number of programs and increase readability. In a software I just completed, a large number of Chinese identifiers are used, and the program has been operating for several months. I would like to name the Chinese identifier here.

        : Programming; Identifier; Unicode endoding; Chinese identifier

        TP311.52

        A

        10.3969/j.issn.1003-6970.2017.10.034

        本文著錄格式:胡建飛,焦振峰,賈振,等. 編程中的中文標識符應用[J]. 軟件,2017,38(10):173-177

        胡建飛(1979-),男,本科,工程師,管道涂敷數(shù)據(jù)、ASP.NET編程;焦振峰(1984-),男,本科,工程師,鋼管涂敷工程。

        猜你喜歡
        標識符控件命名
        淺析5G V2X 通信應用現(xiàn)狀及其側(cè)鏈路標識符更新技術(shù)
        基于底層虛擬機的標識符混淆方法
        計算機應用(2022年8期)2022-08-24 06:30:36
        命名——助力有機化學的學習
        基于區(qū)塊鏈的持久標識符系統(tǒng)①
        關(guān)于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        有一種男人以“暖”命名
        東方女性(2018年3期)2018-04-16 15:30:02
        為一條河命名——在白河源
        散文詩(2017年17期)2018-01-31 02:34:08
        數(shù)字美術(shù)館“數(shù)字對象唯一標識符系統(tǒng)”建設(shè)需求淺議
        就這樣玩會VBA中常見的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        在PowerBuUder中利用WinSock控件制作簡單的Web服務器
        亚洲中文字幕无码久久2020| 久久精品国产亚洲av网站| 亚洲激情综合中文字幕| 国产高清av在线播放| 亚洲毛片免费观看视频| 国产成年人毛片在线99| 亚洲精品成人片在线观看精品字幕 | 中文字幕久久波多野结衣av不卡| 亚洲精品无人区| 午夜性刺激免费视频| 新久久久高清黄色国产| 国产av天堂亚洲av刚刚碰| 免费人成网站在线观看欧美| 亚洲妇女水蜜桃av网网站| 亚洲成a人片77777kkkkk| 国内免费自拍9偷1拍| 国产特级毛片aaaaaa视频| 伊伊人成亚洲综合人网7777| 麻豆av一区二区天堂| 亚洲美女自拍偷拍视频| 国产尤物av尤物在线观看| 久久国产精彩视频| 熟妇人妻丰满少妇一区| 寂寞人妻渴望被中出中文字幕| 久久久g0g0午夜无码精品| 国产午夜亚洲精品不卡福利| 成年女人午夜特黄特色毛片免| 免费午夜爽爽爽www视频十八禁| 日本做受高潮好舒服视频| 国产日韩精品一区二区在线观看播放 | 五月天综合网站| 亚洲处破女av一区二区| 亚洲最全av一区二区| 国产欧美日韩综合精品二区| avtt一区| 亚洲一品道一区二区三区| 久久无码专区国产精品| 亚洲久无码中文字幕热| 亚洲av日韩av天堂久久不卡| 国产中文三级全黄| 久久成人麻豆午夜电影|