物件導向與函數語言程式設計的區別: 動詞-名詞與名詞-動詞的區別 - simblob

banq發表於2019-10-17

我的主要主題是研究如何將函式性程式語言和物件導向的程式語言結合在一起。我當時注意到的是,函式語言的語法傾向於動詞,然後是名詞,如f(x),而面嚮物件語言的語法傾向於是名詞,然後是動詞,如:x.f()。在某種程度上,這些可以被認為是等效的。您可以用一種表達等同於另一種表達。不過,兩者在可用性存在很大差異,這種可用性表現在:自動完成。

f(x)自動完成
首先,我們需要知道f在這種情況下有效的所有可能。由於程式設計師剛開始輸入表示式,因此任何函式都是有效的,這意味著有很長的列表可供選擇。需要多次擊鍵才能選擇一個。其次,我們需要知道x在這種情況下有效的所有可能。這些通常是本地名稱,因此沒有那麼多。知道f縮小型別會縮小列表的範圍,但是列表已經很小,因此收穫不多。

x.f()自動完成
首先,我們需要知道一切可能x。程式設計師剛剛開始輸入內容,因此任何本地名稱均有效,但數量不多。僅鍵入一個字元可以將列表縮小到一兩個元素。其次,我們需要知道f在這種情況下有效的所有可能。這些是根據的型別定義的方法x,因此與所有可能的函式相比,沒有那麼多的方法。知道x縮小型別會大大縮小列表的範圍,因此有很多收穫。

這兩種語法在理論上似乎是等效的,但實際上卻不是。我想知道使用常規文字編輯器的人是否最終會相信這兩種語法是等同的,而使用IDE的人更喜歡物件導向的語法,即使他們沒有利用物件導向的程式設計(繼承,子型別化等)。 )。

這種不對稱與您使用函數語言程式設計還是物件導向的程式設計正交。對於程式設計師來說,如果他們可以從兩個中等長度的列表中進行選擇,則比必須從一個非常長的列表中進行選擇更好。
您也可以在其他情況下看到這一點。DOS,VMS和Unix Shell等命令列介面通常先指定一個動詞,然後再指定一個或多個名詞。Mac和Windows之類的GUI通常首先透過單擊圖示來指定名詞,然後透過從右鍵單擊選單中進行選擇來指定動詞。
在文字編輯器中,vim的命令d0是動詞,然後是文字選擇(名詞),而在更傳統的文字編輯器(包括Emacs)中,您首先要選擇一些文字(名詞),然後呼叫動詞,例如delete。Kakoune是使用名詞動詞而不是動詞名詞的模態編輯器。
在遊戲中,玩家最好先從環境中選擇一個物件,然後從少量動作中進行選擇,而不是先從大量動作中進行選擇,然後再從一組物件中進行選擇。但是,我沒有調查足夠多的遊戲來了解更常見的遊戲。下次玩遊戲時,請檢視命令的結構,看它是動詞名詞還是名詞動詞。

相關文章