iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
1

結束了名詞篇後,考慮了很久,決定還是先說代名詞。
什麼是代名詞?就是代替前面說過的名詞,但在軟體開發裡的代名詞是什麼?就是把類別實體化的物件或者變數。例如:

    var message string = "Hello World!"

(正在學golang,還是改不了加分號的習慣)

類別設計了那麼久,目的當然是為了在開發時可以使用,因此做出來的類別必定會在系統裡出現一次以上。既然類別都有命名規則,變數或參數當然也會有相對應的命名規則。

命名規則

變數相對於類別的規則比較單純且統一,大多都建議或推薦camelCase,少數會用kebab-case但會有些限制。所以如果有一個類別叫UserAccount,那在使用這個類別時就會下成

    UserAccount userAccount = new UserAccount();

即然這麼簡單,那還有什麼要說的?

叔叔的溫馨提醒

https://media.itkonekt.com/2019/01/Uncle_Bob_243x369.png
Uncle Bob,軟體工程的好長輩,在他的Clean Code一書提到了必需要注意的要點:

變數本身就要可以看出它的用途

如果一個變數本身寫成這樣

    int depositAmount = userAccount.getDepositAmount();

和寫成這樣

    //Get user's deposit amount
    int amt = userAccount.getDepositAmount();

那一個會比較好呢?
(註解派覺得溫馨?)

不要加入誤導資訊

這點我覺得非常重要,特別是let啊,var啊,或者類似的語法讓開發人員可以省略宣告式的方法開始流行後。
例如在Javascript裡看到這麼一個變數宣告

    var userHistoryList = user.GetAccount();

怎麼看都會覺得他是一個List吧!我認為var跟let的出現並沒有問題,但必需要在開發人員可以立即辨視出它的用途及型態的前題下,如果會造成誤導,還是用完整型態比較恰當。

命名上在做意義上的區隔。

不要這樣命名

    User userA = new User("John Doe");
    User userB = new User("Jenny Doe");

[名詞四] 類別的命名原則時提過,類別的命名是很泛指,很一般的,直到被實體化時才會讓它特指某個物件。因此在變數命名上,應當將它的真實意義名稱帶進去。

Don't Be Cute

雖然我自己有時候也會想在程式裡帶入一些創意,例如把修改的範圍命名為"AreaOfEffect",或者用拼音或者擬人化某些類別,但這些太過Nerdy或者可能冒犯到其他人的程式,不但降低了可讀性,也有可能會讓團隊陷入危機。
(對,我在說還願)

用一個字來描述一個概念

英文同義詞是很多的,但軟體開發不是寫作文,不需要一直想各種不同的名詞來描述同一種東西,保持一致性的說明同一類東西。

做為類別的應用,他的學問其實很多,特別是字詞的使用如何才能到點到位,這除了考驗一個開發人員對相關問題了解程度外,也考驗對開發的用心程度。雖然大多數的情況開發人員其實不用考慮命名的內容,但其實如果深究的話,命名其實是也算是資深開發人員的能力之一。


我算了一下,覺得有可能會有幾天是空堂QQ,雖然還是可以努力補滿但有點為寫而寫覺得太無謂了,因此想挑幾天說一下英文履歷的寫作心得。
(畢竟也花了三個月的時間在修履歷給老外看)
有興趣的記得訂閱這個系列,也分享給你的朋友一起來討論軟體工程師的英文課吧!


上一篇
Day8 - [名詞七] 儲存媒體命名 - 資料庫、持久層或暫存資料的命名
下一篇
Day10 - [代名詞二] 複數型,Array或Collection的命名規則
系列文
邁向專業軟體工程師必修的英文課30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
joery
iT邦新手 5 級 ‧ 2024-06-14 16:32:58

物件名稱我會使用縮寫,不過縮寫最好是用行業慣用眾所皆知的縮寫,或者公司單位有一份參考的縮寫表。

UserAccount userAcct/usrAcct = new ();

我要留言

立即登入留言