是否發布可運行代碼而不是偽代碼?
我不知道,但這可能取決於相應領域的特定亞文化。
在計算機科學中,使用偽代碼而不是真實代碼來描述算法是更好的選擇嗎?
是(請參閱歐文的答案),有時仍然可以(請參閱下面的注意事項)。
如果是這樣,為什麼?
[...]
那麼偽的參數是什麼?代碼嗎?
許多其他答案都已經說明:除了天真的可運行代碼外,偽代碼旨在易於 易於閱讀和理解,而又不會對讀者造成不重要的影響(針對呈現的方面)詳細信息。 而且通常可以成功實現這些目標。
正如您自己所言,可運行代碼也有其好處。因此,讓我迴避這個問題,聲稱
只需付出一些努力,您就可以同時受益於
(並且無需實際提供偽代碼和 separate 可運行代碼,如 syn1kk建議。)
論文中的理想代碼(如果可行,在其他地方)是 pseudo -pseudo code:該代碼具有偽代碼的所有積極特性,但恰好是可運行的(並且實際上可以執行看上去應有的功能)。
我堅信所有編寫得很好的可運行代碼代碼與偽代碼沒有區別:如果有人能說某些(實際上可運行的)代碼不是偽代碼,因為它不像偽代碼那樣易讀易懂,那麼該可運行代碼的結構就不好
如何獲取偽偽代碼
如何實現與偽代碼一樣易於閱讀的可運行代碼?
要考慮多個方面,實現所有這些方面可能並不總是容易或可行的,有時甚至是不可能的。 (這可能是使用實際的非可運行偽代碼而不是可運行偽偽代碼的正當理由。)
選擇正確的語言
哪種語言最合適取決於幾種事情:
- 問題領域
- 您的解決方案
- 您的聽眾
- 語言為(重新)提供的可能性構建代碼
請注意,對於這些組合的一些,不編程語言可能(甚至有時甚至是不存在)允許您編寫足夠好的代碼。出於明顯的實際原因,您還必須考慮各種語言的命令(應用技巧)。
使代碼非常簡潔:重構,重構,重構
如果有實現細節使您正在描述的算法的核心思想模糊不清,請提取它們(例如提取為常量,變量,方法或函數),以便您可以通過以下方式替換它們的“方式”(其實現):他們的“什麼”(新提取的代碼名稱)。如果合適,請選擇不在書面代碼摘錄中顯示提取的實現或分配。在命名提取的內容時要格外小心,以使它們的目的(不一定是它們的實現)從它們的名稱和調用簽名來看非常清楚。
另一方面,如果算法之間過於分散為了易於理解代碼的不同部分,您可能不得不選擇內聯代碼。
所有這些都旨在將每個代碼單元(例如函數)的抽像水平設為單一級別,或者至少將正確的抽象級別呈現為最佳,以最好地展示和解釋該算法。儘管只能謹慎地使用一些與之相關的單一責任原則:過度應用該原則(或將“單一責任”解釋得過於狹窄)可能會分散並混淆您的算法。請注意,在這方面,論文中要呈現的代碼的正確平衡與(待維護的)軟件產品中代碼的正確平衡很可能會有所不同。
進行了充分的優化編譯器或解釋器,這些重構都不會對性能產生不利影響。但是,當重點是提出一種算法而不是在生產系統中實現該算法時,無論如何這都不應該太在意。
使您的代碼易於理解
對偽偽代碼的正確解釋不應依賴於了解所選的編程語言或其版本,變體或方言。因此,請警惕您使用的語言功能。
許多編程語言(聽眾都知道)共有的每種語言功能,並且所選語言具有與許多其他編程語言相似的語法,除非所選的編程語言對其具有不尋常且非顯而易見的語義,否則它也是偽代碼方言的特徵,因此可以在偽偽代碼中使用。如果其語義從語法和關鍵字及其與自然語言的關係足夠明顯,那麼即使是不太常見或特定於語言的功能,也可以使用語法不太常見的功能。
最好省略非顯而易見的語言功能,但可以與代碼註釋或論文的散文中的解釋結合使用。 (就像適用於所選偽代碼方言的非顯而易見特徵一樣。)
針對特定語言的習慣用法也是如此:避免或解釋它們,如果您不得不期望它們對聽眾不明顯。
替代方法:使偽代碼可運行
以上兩節假定您從可運行的代碼開始。當然,您也可以從偽代碼開始,然後將其修改為可以使用合適的編程語言實際運行(並希望做看起來似乎可以做的事情)。但是請注意,您最終可能會以這種方式獲得針對目標語言的非常慣用的代碼,而這可能並不是您想要的。當然,重構通常可以解決該問題。
解釋您的代碼
就像您必須解釋(在散文,代碼註釋或標註中)代碼的某些方面(如果是)
偽偽代碼的優點
- 像偽代碼一樣可讀易懂
li>
- 如果指定了使用的語言(包括版本,變體或方言,如果適用):
- 它是可運行且可用的
- 它可通過手動和自動方式進行測試測試
- 它是可配置的
其中一些優點使您作為作者受益,例如,您可以確保提出的算法實際上是正確的。其他使您可能希望評估您的算法的聽眾受益
這些好處是否值得實現偽偽代碼所需的大量工作,而僅僅是偽代碼,或者編寫得不夠好的可運行性代碼,由您決定。
哦,別忘了道德上的好處:由於“熟練”,無論“看起來是否業餘”,您都可以確信它不是和艱苦的工作。