2011-03-17 121 views
2

我有疑問 我知道一個函數和過程之間的主要區別是 該函數強制返回一個值,其中過程可能會返回值,也可能不會返回值。 但是,當我們使用void類型的函數時,它什麼都不返回。 請你們澄清我的疑問。函數和過程之間的區別?

回答

1

在C及其衍生詞中,術語「過程」很少使用。 C有一些函數返回一個值,其中一些沒有。我認爲這是C遺產的一個製品,在ANSI C中引入void之前,沒有辦法而不是返回一個值。默認情況下函數返回int,如果沒有指定明確的返回值,您可以忽略它(仍然可以),並且可能是一些隨機數。

在Pascal語言家族中,區別是顯式的,函數返回一個值,程序不會。每種情況下都使用不同的關鍵字進行定義。 Visual Basic還與函數和子例程(?)區分開來。

既然我們在談論Objective-C,還有一些問題會讓你困惑。與類或對象相關的函數被稱爲「方法」(分別是類方法和實例方法)。另外,如果我們正在迂腐,你不調用Objective-C方法,你可以通過向對象發送消息來調用它們。區別實際上非常重要,因爲消息名稱(又名「選擇器」)不一定總是指向相同的方法,它可以在運行時更改。這與Java和C++等語言根本不同,其中特定類的特定方法名稱實際上僅僅是構成方法主體的代碼塊地址的符號名稱。

2

傳統上,返回值的過程被稱爲函數(參見下文),但是,許多現代語言完全免除了術語過程,更喜歡對所有命名代碼塊使用術語函數。

Read more at Suite101:程序,子程序或函數?:編程術語101 - 查看程序,子程序和函數在方法和定義上的差異。 http://www.suite101.com/content/procedure--subroutine-or-function--a8208#ixzz1GqkE7HjE

+3

除此之外,關於對象,我們經常使用術語「方法」。 – JeremyP 2011-03-17 10:06:17

1

根據編程語言的不同,區別可能不那麼清楚。讓我們採取保守的語言,帕斯卡爾

  • procedure確實沒有返回值。它用於沒有返回值或具有多個返回值的操作。在後一種情況下,多個參數(返回參數或輸出參數)通過引用傳遞(使用關鍵字var),並且它們的值直接從過程中修改。 (請注意,根據具體情況,後一種情況可能不被視爲良好做法)。
  • function有一個單一的返回值,通常我們不希望它改變其任何參數的值(然後可以通過值或通過關鍵字const傳遞哪些參數)。將多個返回值綁定到記錄中可能會返回多個返回值。

Ç爪哇不區分語法,所以返回類型void的函數可以被認爲是一個過程。 斯卡拉區分他們之間的方法頭和方法體之間的等號

一般,無論實際的語言如何調用它的結構,我們將理想預計

  • 一個function接受參數,不修改任何狀態(如變異參數,全局變量,或將用戶的信息打印到控制檯),並返回計算結果。
  • A procedure需要參數,執行可能產生副作用的操作(寫入數據庫,打印到控制檯,可能會突變變量),但希望不會改變任何參數。

但實際上,根據情況,可以觀察到這些期望的混合。堅持這些準則有助於我思考。

相關問題