2009-04-09 21 views
8

編輯:似乎有至少兩個站得住腳的理由Smalltalkers(消息鏈接和範圍的問題時可讀性)做到這一點,但也許這個問題可以保持打開更長的時間來解決一般用途。你在變量名中使用文章嗎?

原因:由於我早已忘記的原因,我從不使用變量名稱中的文章。例如:

aPerson,theCar,anObject

我猜我覺得髒了無意義的信息名字的文章。當我看到一個同事使用這個慣例的代碼時,我的血壓會輕微上升。

最近,我開始學習Smalltalk中,主要是因爲我想了解的是Martin Fowler的,肯特·貝克和其他許多偉人的成長和愛的語言。

我注意到了,但是,Smalltalkers出現廣泛使用不定文章(一,一個)在他們的變量名。一個很好的例子是在以下安裝方法:

name: aName address: anAddress. 
    self name: aName. 
    self address: anAddress 

這使我重新考慮我的立場。如果一個像Smalltalkers一樣受到很大尊重和影響的社區已經廣泛採用變量命名的文章,那麼可能有一個很好的理由。

你使用它?爲什麼或者爲什麼不?

+1

self name:aName;地址:anAddress :-) – igouy 2009-04-09 17:21:39

回答

8

此命名約定是Kent Beck的書Smalltalk最佳實踐模式中的一種模式。恕我直言,這本書是非小型作家必備的,因爲它確實有助於命名事物和編寫自我記錄代碼。此外,它可能是展示Alexander's quality without a name的少數模式語言之一。

關於代碼模式的另一本好書是Smalltalk,風格,這是available as a free PDF

一般來說,慣例是實例變量和訪問器使用裸名詞,參數使用不定冠詞加上角色或類型或組合。臨時變量可以使用裸名詞,因爲它們很少重複實例變量;或者,爲了說明它們在控制流程中的作用,將其命名爲更精確的命名比較頻繁:eachFoo,nextFoo,randomChild ...

2

我總覺得髒了無意義的信息名字的文章。

沒錯。這就是放棄文章所需的全部理由:它們不必要地混淆了代碼,並且沒有提供額外的信息。

我不知道Smalltalk和不能談論的原因,「他們」的約定,但在其他地方,上面的成立。有可能是Smalltalk的約定背後是簡單的技術原因(如在Ruby中,不僅按照慣例,但由於語言的語義是一個常數ALL_CAPS)。

+0

ouch。爲什麼所有的降價?無論有沒有Smalltalk的知識,這篇文章仍然基本上是正確的,並且是所有其他語言的良好指南。我甚至(或多或少地說,我可能會補充說)推測了Smalltalk特殊角色的一個原因。不要嘟my我自己的號角,但... – 2009-04-09 19:19:30

0

沒用過,也許是因爲在我的主要語言沒有任何文章:P

無論如何,我認爲,只要變量名是有意義的,如果有篇文章,這並不重要與否,它是由編碼器的自己的偏好。

+0

這是一種斯拉維克語嗎?我現在正在學習捷克語,缺乏文章讓我感到非常緊張。 – rcampbell 2009-04-09 12:33:29

+0

事實上,前幾天我們想知道Smalltalk的近似英語語法如何在俄語或其他結構不同於英語的語言中工作。例如,german-smalltalk可以將整個消息發送和參數作爲一個大的複合詞;) – 2009-04-09 20:01:03

10

它在Smalltalk中常用作無類型語言,因爲它在方法調用中暗示了類型的參數。文章本身表示您正在處理指定類的某個對象的實例

但請記住,在Smalltalk的方法看起來不同,我們使用所謂的關鍵字信息和它這種情況下,實際上文章幫助可讀性:

anAddressBook add: aPerson fromTownNamed: aString 
+0

這是一個很好的觀點:幫助代碼看起來更具可讀性。這與許多有關DSL和Smalltalk的討論有關,它們是創建DSL的主要語言,部分原因是由於像這樣的消息串在一起。 – rcampbell 2009-04-09 12:54:35

0

都能跟得上。我覺得這是浪費字符空間並侵蝕你的代碼的可讀性。我可能會使用名詞的變體,例如Person和People取決於上下文。例如

ArrayList People = new ArrayList(); 
Person newPerson = new Person(); 
People.add(newPerson); 
0

不,我不知道。我不覺得它爲我的代碼庫的可讀性或可維護性增加了什麼,也沒有以任何方式爲我區分這個變量。另一個缺點是,如果您鼓勵使用變量名稱的文章,那麼有人在您的代碼庫中執行此操作只是一個時間問題。

var person = new Person(); 
var aPerson = GetSomeOtherPerson(); 
+0

我不認爲我永遠不會理解如何理性地回答主觀問題被推倒。至少添加註釋 – JaredPar 2009-04-09 12:49:10

7

我想我只是發現一個答案。正如康拉德·魯道夫說,他們使用的是因爲技術原因約定:

...這意味着它[方法變量]不能複製實例變量的名稱,該接口中定義一個臨時變量,或另一個臨時變量。 - IBM Smalltalk Tutorial

基本上一個本地方法變量不能被命名爲相同的對象/類變量。從Java的到來,我認爲一個方法的變量將局部範圍,並且你會使用類似的東西訪問實例變量:

self address 

我還需要更多地瞭解在Smalltalk的方法/本地作用域,但它似乎他們沒有別的選擇;他們必須使用不同的變量名稱比實例一,所以anAddress可能是最簡單的方法。只需使用地址結果:

Name is already defined ->address 

,如果你有一個實例變量地址已經定義...

+0

我也在語言中使用了類似的約定,因爲變量不能與其類型具有相同的名稱,所以我會使用類似'Person aPerson = new Person'的東西。至少我認爲Pascal或Delphi就是這種情況。有人可以同意嗎? – 2009-04-09 12:55:39

0

我在哪裏工作,標準是前面加上所有實例字段「the-」 ,帶「my-」的局部變量和帶「a-」的方法參數。我相信這是因爲許多開發人員正在使用像vi這樣的文本編輯器,而不是IDE,可以在每個範圍內顯示不同的顏色。

在Java中,我不得不說我更喜歡用它來寫代碼,在這裏你取消引用這個

比較

public void setName(String name) { 
    this.name = name; 
} 

public void setName(String aName) { 
    theName = aName; 
} 

最重要的是要有一個標準,大家能夠堅持下來。

1

我使用這個來回擺動。我認爲這取決於任何時候我項目中C++與Objective C的比例。至於基礎和推理,Smalltalk將物體的概念普遍化爲「事物」。我認爲這是YourdonCoad強烈推動在第一人稱描述類。在Python中,它會像下面的代碼片段一樣。我真的希望我能夠記住足夠多的SmallTalk來構建一個「適當」的例子。總體來說,這是一種會話式的方法來提高程序的可讀性。以變​​量名稱使用文章只是整個習慣用語的一部分。圍繞參數和消息選擇器IIRC的命名也有一個習慣用法。喜歡的東西:

aRect <- [Rectangle createFromPoint: startPoint 
        toPoint: otherPoint] 

這只是另一個曇花一現,每隔一段時間還是彈出。最近我一直注意到像myHostName這樣的成員名字正在以C++代碼彈出,作爲m_hostName的替代品。我越來越喜歡這種用法,我認爲這聽起來有點像SmallTalk的成語。

相關問題