Atitit.提升語言可讀性原理與實踐,atitit可讀性

來源:互聯網
上載者:User

Atitit.提升語言可讀性原理與實踐,atitit可讀性

Atitit.提升語言可讀性原理與實踐

 

 

 

表1-1  語言評價標準和影響它們的語言特性1

1.3.1.2  正交性2

1.3.2.2  對抽象的支援3

1.3.2.3  表達性3

.6  語言設計中的權衡4

 

 

表1-1  語言評價標準和影響它們的語言特性

 

標    准

特性

可 讀 性

可 寫 性

可 靠 性

簡單性

·

·

·

正交性

·

·

·

資料類型

·

·

·

文法設計

·

·

·

對抽象的支援

 

·

·

表達

 

·

·

類型檢查

 

 

·

異常處理

 

 

·

有限地使用別名

 

 

·

 

 

 

第三個潛在的問題是運算子多載,即一個運算子有多種意義。雖然這很有用,但是如果允許使用者建立自己的重載,並且不是按常規重載,會降低可讀性。例如,重載"+"用於整數和浮點數的加法顯然是可取的。事實上,這一重載減少了運算子的數目,從而簡化了語言。但是假設程式員將"+"定義為計算兩個一維數組中所有元素的和,由於它不同於通常的向量求和,因此對這個程式,編寫程式的人與讀程式的人都難以理解。使程式難以理解的一個更極端的例子是將"+"定義為計算兩個向量的第一個元素之差

 

當然,語言的簡單性也不能過分。例如,如下一節所示,大多數組合語言語句的形式與意義都是簡單性的典型體現。但是這種簡單性使組合語言程式的可讀性較差。由於組合語言程式缺乏更複雜的控制語句,所以程式結構不清晰;由於語句簡單,所以與進階語言相比,同樣的程式需要的語句就多得多。如果進階語言的控制結構和資料結構不適當,雖然沒有上面的例子那樣極端,但結論是一樣的。

作者:: 綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 

漢字名:艾提拉(艾龍),   EMAIL:1466519819@qq.com

轉載請註明來源: http://www.cnblogs.com/attilax/

 

1.3.1.2  正交性

程式設計語言的正交性意味著相對較小的基本結構集合,能夠以較少的組合方式來構成語言的控制結構和資料結構。而且,基本結構的任一種可能組合都是合法且有意義的。例如資料類型,假設某語言有4種基本的資料類型(整型、單精確度型、雙精確度型和字元型)和2種運算子(數組和指標)。如果2種運算子都能夠作用於自身和4種基本的資料類型,就能夠定義大量的資料結構。

一個語言特性是正交的,意味著它獨立於程式中出現位置的上下文("正交"來自於正交向量這

IBM的設計限制較多,因此可寫性較差

 

正交性與簡單性直接相關:語言設計越正交,語言規則需要的特例就越少,特例越少意味著設計的規範程度越高,語言就越容易學習、閱讀和理解。任何學過大量英語的人可以證實,英語中的許多規則特例太難學了(例如,i總是在e前,除非在c後)

 

過多的正交也會產生問題。ALGOL 68語言(van Wijngaarden等,1969)可能是最具有正交性的程式設計語言了。ALGOL 68中的每一語言結構都有一個類型,這些類型沒有任何限制,而且大多數結構都有值。這種自由組合可以產生極其複雜的結構,例如,只要結果是一個地址,就可以把條件陳述式、聲明語句及其他各類語句一起放在賦值運算子的左邊。這種極端的正交形式導致了不必要的複雜性。而且,由於語言需要大量的基本結構,高度的正交性將產生爆炸性的組合方式。因此,即使組合方式很簡單,它們的整體數量也會導致語言的複雜性。

 

另一方面,過多的正交有損於可寫性。當幾乎任何基本結構的組合都合理時,程式中的錯誤會難以檢測,從而導致編譯器無法發現代碼中的謬誤。

 

可見,語言的簡單性至少部分歸因於相對少量的基本結構的組合,以及正交原理的有限應用。

有人認為,函數式語言同時具有良好的簡單性和正交性。函數式語言,如LISP,主要通過將函數作用於給定參數來執行計算。相反,命令式語言,如C、C++和Java,通常用變數和指派陳述式來指定如何計算。函數式語言提供了最佳的整體簡單性,因為它們能夠用一種結構,即函數調用(函數調用能夠以簡單的方式與其他函數調用組合起來)來完成任何計算。正是這種簡單優美使一些語言研究者將函數式語言作為複雜的非函數式語言(如C++)的主要替代語言。但其他因素,如效率,限制了函數式語言的更廣泛應用。

 

1.3.2.2  對抽象的支援

簡而言之,抽象就是以允許忽略許多細節的方式來定義和使用複雜結構和操作的能力。抽象是當代程式設計語言設計的關鍵概念,這是抽象在現代程式設計方法學中扮演中心角色的反映。因此,程式設計語言所允許的抽象程度以及表達抽象的自然程度,對語言的可寫性非常重要。程式設計語言支援兩類不同的抽象:過程抽象和資料抽象。

過程抽象的一個簡單例子,是使用子程式來實現程式中多處需要的排序演算法

 

作為資料抽象的一個例子,請考慮一棵在其結點上儲存整數的二叉樹

 

面向資料的軟體開發的最終演化開始於20世紀80年代早期,演變為物件導向的設計。物件導向的設計方法基於資料抽象,

 

1.3.2.3  表達性

語言的表達性涉及若干不同特性。在類似APL(Gilman和Rose,1976)的語言中,表達性意味著有若干功能強大的運算子,能夠用很短的程式實現大量的運算。表達性更普遍的意義是,語言具有較為簡捷而不笨重的方式來指定運算過程。例如,在C語言中,count++的形式比count=count+1更簡短更方便。還有,Ada語言中的布林運算子and then方便地表明對布林運算式進行短路求值,Java語言中的for語句在寫計數迴圈時比使用while語句更方便,雖然後者也能實現。以上這些都提高了語言的可寫性。

 

由於馮·諾依曼結構,命令式語言的核心特徵就是變數(記憶體單元的模型)、指派陳述式(基於傳輸操作)和迭代形式的迴圈運算(這是在該體繫結構上實現迴圈的最高效形式)。運算式中的運算元由記憶體傳輸到CPU,運算式的計算結果傳回到指派陳述式左邊所代表的記憶體單元。迭

 

儘管事實上,命令式程式設計語言的結構是以電腦體繫結構為模型的,而不是出於程式設計語言使用者的能力和意願,有人仍然認為使用命令式語言比使用函數式語言在某種程度上更自然,因此許多人認為,即使函數式程式與命令式程式運行效率一樣高,命令式程式設計語言的使用仍然會佔據主導地位。

 

 

.6  語言設計中的權衡

l.3節介紹的程式設計語言的評價標準為語言設計提供了一個架構。可惜這個架構是自相矛盾的。Hoare在其關於語言設計的見解深刻的論文(Hoare,1973)中指出,有太多重要但相互矛盾的標準,協調並滿足這些標準是一個重要的工程任務。

 

參考資料

1.3 語言評價標準 - 51CTO.COM.html

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.