什麼是程式設計中的函式?

如果您正在學習如何編寫自己的程式碼,則需要了解函式是什麼。...

您經常發現自己複製和貼上程式碼以便在程式的不同部分重用嗎?

copy and paste

如果是這樣,您可能需要考慮使用函式。函式是程式語言的一個非常強大的功能。它們可以使程式碼更高效、更易讀、更優雅。

什麼是函式(a function)?

函式是執行任務的程式碼塊。它可以被多次呼叫和重用。您可以將資訊傳遞給函式,它也可以將資訊傳送回去。許多程式語言都有內建函式,您可以在它們的庫中訪問這些函式,但您也可以建立自己的函式。

呼叫函式時,程式將暫停當前程式並執行該函式。函式將從上到下讀取。函式完成後,程式將繼續在暫停的位置執行。如果函式返回一個值,則該值將用於呼叫函式的位置。

如何編寫函式?

編寫函式的方法有很多種。確切的語法將取決於您正在使用的語言。我們將在Python、JavaScript和C++中演示示例,以演示一系列程式設計語法。

相關:為什麼程式語言離不開函式

虛擬函式

我們將看到的第一種函式型別是一個空函式。這只是意味著函式不返回值。Void函式用於完成一組指令。在這些例子中,我們編寫的函式稱為HellofnContation。該函式的目的是輸出“HelloWorld”。

提示:給出函式名稱,解釋它們的工作。隨著程式變得更加複雜,管理函式和讀取程式碼會更容易。

python

def helloFunction(): print("Hello World")helloFunction()

關鍵字def在Python中用於定義和建立函式。接下來是函式的名稱。函式中的指令緊跟在冒號後面的下一行。在Python中,空格很重要,所以一定要縮排希望函式執行的所有程式碼。在上面的例子中,函式執行一行程式碼。

您敏銳的眼睛可能已經注意到print()也是一個函式,但它的呼叫與我們的函式不同。現在請堅持這個想法,我們稍後將探討函式和引數。

javascript語言

function helloFunction(){ alert("Hello World!");}helloFunction();

在JavaScript中,關鍵字函式用於建立函式。接下來,我們有了函式的名稱。任何落在花括號之間的程式碼都將在呼叫函式時執行。

空格在JavaScript中並不重要,但通常在函式中縮排程式碼。縮排使程式碼更易於閱讀,這在程式變得更復雜時非常重要。

注意:與前面示例中的print()非常相似,alert()也是一個函式。

c級++

#include <iostream>using namespace std;void helloFunction(){ cout << "Hello World!";}int main(){ helloFunction(); return 0;}

函式在C++中被不同地建立。第一個詞不是定義函式的關鍵字,而是描述函式將返回的資料型別。在這種情況下,我們的函式不返回任何資料,因此資料是無效的。接下來,我們有函式的名稱。與JavaScript類似,花括號之間的所有程式碼都是在呼叫函式時執行的。同樣與JavaScript類似,空格不影響函式,但是一種很好的做法。

你在C++程式碼中發現了另一個函式嗎?是的,main()是一個函式。當你執行C++程式時,你會自動呼叫main函式。當main函式成功完成時,它在退出程式時返回0,表示執行程式時沒有錯誤。

需要值的函式

如果您發現自己在一遍又一遍地編寫相同的程式碼,那麼Void函式是非常好的。但它們可能是有限的。它們是靜態的,不會改變。他們總是完成同樣的指令。我們可以增加它們的有用性的一種方法是向函式傳遞不同的值。

你會注意到我們所有函式的名字後面都有括號。在括號中,我們可以宣告執行函式需要資料。然後我們可以在函式中使用傳遞給函式的資料。讓我們再看一次前面的例子,但這一次傳遞一個短語,我們希望輸出。

python

def helloFunction(newPhrase): print(newPhrase)helloFunction("Our new phrase")

現在,在括號之間,我們的函式宣告它需要一個變數來執行。我們已經將變數命名為newPhrase,現在可以在函式中使用它。當我們呼叫函式時,我們需要透過將請求的資訊放在括號之間來傳遞它。JavaScript中也做了同樣的更改。

javascript語言

function helloFunction(newPhrase){ alert(newPhrase);}helloFunction("Our new phrase");

c級++

#include <iostream>using namespace std;void helloFunction(string newPhrase){ cout << newPhrase;}int main(){ helloFunction("Our new Phrase"); return 0;}

我們的C++函式需要更多的資訊。我們知道你的函式需要字串資料,但這對C++來說不夠好。建立函式時,必須指定函式需要的資料型別。如果您沒有傳送正確型別的資料,則該函式將建立錯誤。

這可能看起來有點煩人,但嚴格的語言通常可以幫你省去頭痛。如果您在JavaScript中編寫一個需要整數的函式,但該數字是以字串形式傳送的,則可能會建立一個很難跟蹤的bug。

相關:你應該知道的5種函數語言程式設計語言

返回值的函式

我們將要討論的最後功能是返回資料。當您想在使用資料之前更改資料時,這一點特別有價值。雖然可以在內聯中編寫,但是如果您將多次使用相同的計算,如將imperial轉換為metric,將其作為函式編寫可能更有意義。我們的例子將更簡單。我們的函式需要兩個整數,並返回總和。

python

def addingFunction(a, b): return a + bprint(addingFunction(2, 4))

在這個例子中,我們的函式需要兩個變數而不是一個變數。我們用逗號分隔變數名來表示。關鍵字返回告訴函式返回以下資料,在這種情況下,返回2+4或6。我們呼叫print()函式中的函式。

一旦程式到達該行,它將暫停、執行我們的函式,然後繼續,好像addingFunction(2,4)實際上只是返回的值6。

javascript語言

JavaScript程式碼與Python程式碼非常相似。主要區別在於函式是在警報中呼叫的。

function addingFunction(a, b){ return a + b;}alert(addingFunction(2, 4));

c級++

#include <iostream>using namespace std;int addingFunction(int a, int b){ return a + b;}int main(){ cout << addingFunction(2, 4) ; return 0;}

C++程式碼執行類似,但通常情況下,需要更多的資訊。首先,我們必須說明函式將返回什麼型別的資料。您將看到void已更改為int。這意味著函式將返回一個整數,而不是不返回任何資料。除此之外,程式碼與我們已經研究過的程式碼類似。

管理你的職能

函式的有趣之處在於,函式可以呼叫其他函式。他們甚至可以自稱!但權力越大,責任越大。不要瘋狂地用呼叫其他函式的函式來建立程式碼。

如前所述,每次呼叫函式時,程式都會在執行函式時暫停。這意味著程式被儲存在活動記憶體中。如果您呼叫多個函式而沒有完成它們,那麼您將使用更多的活動記憶體。如果你不小心,你的程式就會失控。

  • 發表於 2021-03-29 16:35
  • 閱讀 ( 74 )
  • 分類:程式設計

你可能感興趣的文章

實際的(actual)和形式引數(formal parameters)的區別

...叫函式時接收值。 目錄 1. 概述和主要區別 2. 實際引數是什麼 3. 什麼是形式引數 4. 實際引數與形式引數的相似性 5. 並列比較-實際引數與表格形式的形式引數 6. 摘要 什麼是實際引數(actual parameters)? 實際引數是呼叫函式時傳遞...

  • 發佈於 2020-10-09 05:51
  • 閲讀 ( 86 )

巨集(macro)和行內函數(inline function)的區別

...時,它將被巨集的內容替換。 目錄 1. 概述和主要區別 2. 什麼是巨集 3. 什麼是行內函數 4. 並排比較-表格形式的巨集與行內函數 5. 摘要 什麼是巨集(macro)? 前處理器是在原始碼透過編譯器之前對其進行處理的程式。它使用前處...

  • 發佈於 2020-10-19 00:27
  • 閲讀 ( 44 )

屬性(attribute)和引數(parameter)的區別

...文討論了屬性與引數的區別。 目錄 1. 概述和主要區別 2. 什麼是屬性 3. 什麼是引數 4. 並列比較-表格形式的屬性與引數 5. 摘要 什麼是屬性(attribute)? Java等程式語言支援面向物件程式設計。這種程式設計正規化是基於物件的。物...

  • 發佈於 2020-10-19 02:04
  • 閲讀 ( 60 )

識別符號(identifier)和關鍵字(keyword)的區別

...字是程式語言提供的保留字。 目錄 1. 概述和主要區別 2. 什麼是識別符號 3. 什麼是關鍵字 4. 識別符號與關鍵字的相似性 5. 並排比較-識別符號與表格形式的關鍵字 6. 摘要 什麼是識別符號(an identifier)? 程式設計師為定義變數、...

  • 發佈於 2020-10-19 15:19
  • 閲讀 ( 48 )

功能原型(function prototype)和c語言中的函式定義(function definition in c)的區別

...語句,它們決定函式的作用。 目錄 1. 概述和主要區別 2. 什麼是C語言中的函式原型 3. C語言中的函式定義是什麼 4. C語言中函式原型與函式定義的相似性 5. 並列比較-函式原型與C中的函式定義的表格形式 6. 摘要 什麼是c語言中的...

  • 發佈於 2020-10-19 16:08
  • 閲讀 ( 76 )

班(class)和結構(c)#(structure in c#)的區別

...而結構是值型別的資料型別。 目錄 1. 概述和主要區別 2. 什麼是C課# 3. C語言中的結構是什麼# 4. C語言中類與結構的相似性# 5. 並列比較——C#表格形式的類與結構 6. 摘要 什麼是c類#(class in c#)? 在OOP中,一切都被視為一個物件。...

  • 發佈於 2020-10-19 17:15
  • 閲讀 ( 52 )

標頭檔案(header file)和庫檔案(library file)的區別

...宣告函式的函式定義的檔案。 目錄 1. 概述和主要區別 2. 什麼是標頭檔案 3. 什麼是庫檔案 4. 標頭檔案與庫檔案的相似性 5. 並列比較-標頭檔案與表格形式的庫檔案 6. 摘要 什麼是標頭檔案(header file)? 標頭檔案包含函式宣告。程...

  • 發佈於 2020-10-19 18:35
  • 閲讀 ( 84 )

getc公司(getc)和getchar公司(getchar)的區別

...討論這兩個函式之間的區別。 目錄 1. 概述和主要區別 2. 什麼是getc 3. 什麼是getchar 4. getc和getchar的相似性 5. 並列比較-表格形式的getc與getchar 6. 摘要 什麼是getc公司(getc)? 它是一個函式,用於從輸入流(如檔案或鍵盤)中讀取字...

  • 發佈於 2020-10-19 22:52
  • 閲讀 ( 45 )

掃描(scanf)和得到(gets)的區別

...遇到newline或EOF時結束輸入。 目錄 1. 概述和主要區別 2. 什麼是scanf 3. 什麼是得到 4. scanf和gets之間的相似性 5. 並排比較-scanf和gets以表格形式顯示 6. 摘要 什麼是掃描(scanf)? scanf函式可以從鍵盤讀取輸入並根據給定的格式說明符...

  • 發佈於 2020-10-19 23:18
  • 閲讀 ( 46 )

系統呼叫(system call)和圖書館呼叫(library call)的區別

...),”來完成檔案開啟任務。 目錄 1. 概述和主要區別 2. 什麼是系統呼叫 3.什麼叫圖書館 4. 系統呼叫與庫呼叫的相似性 5. 並排比較-以表格形式顯示系統呼叫與庫呼叫 6. 摘要 什麼是系統呼叫(system call)? 計算機以兩種模式執行...

  • 發佈於 2020-10-20 00:18
  • 閲讀 ( 48 )