為什麼大多數程式設計語言被設計成函數只有一個傳回值,而不是多個?

來源:互聯網
上載者:User
程式語言的發展很大的部分受人類正常思維方式的影響,在生活中,給一個輸入,有兩個輸出很常見,而大多數程式設計語言為什麼不這麼設計?

—————————————————————
不同程式設計語言因設計的不同支援1個或多個傳回值,故於2016—02—06更改問題。

回複內容:

python允許你幹多個傳回值的事情。然並卵,其實會包裹成一個tuple,加之tuple本來就可以原素綁定…其實這個問題也不是一句「返回一個資料結構」就可以清楚解決的。既然傳回值可以是一個資料結構,那麼參數其實也可以。 為什麼從C、Pascal這些古老的語言開始,參數就可以是多個,而傳回值卻是一個呢?這個問題值得探討一下。

假設我們設計了一個語言叫C-,函數的參數和傳回值都只能是一個,那麼在C-裡,一個多參數多傳回值的函數的定義和使用過程就是這樣的:

struct Para...;//define a parameter structstruct Ret...;//define a return structRet func(Para p){    ...}Para para = XXX;Ret ret;ret = func(para);
在runtime允許多值return並不是很有用,雖然看上去好像非常有用,如果這是一個必要的語言機制,那現在大多數語言就應該已經都支援了。如果你用過有這個功能的語言,比如Go,也多用來方便錯誤處理,它不一定要這麼用,但實際的代碼裡通常就是這樣
result, err := func()result, _   := func()
fork被你吃了?(ー`´ー)C裡調一個指標或者結構體指標,你想返回多少都行,只要記憶體夠。請看Lua,函數參數可多可少,傳回值可多可少,接收傳回值也是可多可少。流行得比較早的語言,比如pascal和c,都只有一個返回比較簡單類型的傳回值,這可能是為了把傳回值放到某寄存器中返回,這樣調用者可以直接用,有利於提高程式的速度。過去cpu是很慢的,這種最佳化很有價值。

c++大概是繼承了c,所以只有一個i傳回值。java從文法上模仿c++,所以也只有一個傳回值。

設計一個多個傳回值的語言,並不困難。golang就是一個。個人理解,多傳回值的函數一定可以通過多個單傳回值的函數來實現。對於早起的語言設計者而言,這應該是一個錦上添花而不是必須的功能,優先順序不高。
當然,後來的語言,很多已經實現了這個功能,因為畢竟不難
ps,說通過指標在參數裡傳遞的,可以退散了,不是一個問題好吧。現代程式設計語言中「函數」概念多來自 ALGOL 和 Fortran
ALGOL 和 Fotrean 的概念借自數學
數學函數有多元之說,然而你見過幾個「多傳回值」的?這是一個好問題。為什麼函數只返回一個值。這是儲存和計算的一種統一。一個沒有副作用的函數,返回一個值,那他在使用上其實是可以看做一個變數,一個有條件的變數,可以很好的簡化程式。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.