在軟體開發的過程中,我們經常會重複的使用一些**片段,因此我們往往將這樣的**片段作為函式進行呼叫。
函式有4種模式的定義和使用
q有引數,有返回值:y=f(x)
q有引數,無返回值:f(x)
q無引數,有返回值:y=f()
q無引數,無返回值:f()
在遊戲、圖形、建築領域的軟體應用中,我們經常需要計算幾何圖形的面積。對於這些經常需要使用的計算,我們往往將計算的**封裝為函式進行使用。
//////
計算長方形面積
//////
長///
寬///
public
static
double
rectanglearea(
intx,
inty)
//////
計算正方形的面積
//////
邊長///
public
static
double
squarearea(
intx)
//////
計算梯形的面積
//////
上底///
下底///
高///
public
static
double
trapeziumarea(
inttop,
intbottom,
inth)
我們來分析第乙個double rectanglearea(int x, int y)函式的定義:
qdouble是定義了返回值
qrectanglearea是函式的名字
qint x, int y稱為函式的引數
以上函式的呼叫方式可以如下
static
void
main(
string
args)
",rectarea);
system.console.writeline(
"該正方形的面積為
",squarearea(
11));
system.console.writeline(
"該梯形的面積為
",trapeziumarea(7,
8,9));}
初學者注意:
現代的商業軟體開發,要求**具有優秀的可讀性和維護性,因此我們需要將重複使用的演算法用模組的方式提煉為函式,通過對函式的呼叫優化**。
在編寫函式的時候要牢記乙個原則,即:單一職責原則。乙個函式所執行的功能應該非常的單一,不應該有不同的行為。比如以下**就是違反環了單一職責原則。
class
program
//////
計算長方形面積
//////
長///
寬///
public
static
void
rectanglearea(
intx,
inty)",x
*y);
}///
///計算正方形的面積
//////
邊長///
public
static
void
squarearea(
intx)",x
*x);
}///
///計算梯形的面積
//////
上底///
下底///
高///
public
static
void
trapeziumarea(
inttop,
intbottom,
inth)
",(top
+bottom)*h
/2);}
} 仔細比較兩段**,你會發現後續的**僅僅是把writeline遷移到了計算面積的方法體內,在這樣的情況下,你似乎覺得在呼叫的時候只有更方便了
static
void
main(
string
args)
其實不然,新處理的三個方法違反了職責單一原則,在方法中又作了計算又參與了呈現。這樣的模型不合理之處是當使用者需要不同的呈現樣式的時候,你必須修改這三個方法,而無法將演算法重用。
模組化程式設計
將乙個5元素陣列,右移n位,n從鍵盤輸入,首尾相接 例如 陣列中的元素為 那麼 n 3 的結果如下 資料是向右邊移三位,那麼,我轉化成先移一位的情況。因為當移一位的問題解決了,移動n位只需要將此過程迴圈n次即可 1.把a 1 放到臨時空間t t a 1 2.依次把前面元素的值放到後面的空間裡面.從後...
函式 模組化的程式設計
可擴充套件性,可維護性 避免 冗長 可讀性函式 函式是具備某一特定功能的工具 使用原則 先定義後呼叫 函式的定義 函式的三種形式 def 函式名 arg1,arg2 注釋函式體 return 返回值 1.定義無參函式 函式的執行不依賴於呼叫者傳入的引數就能執行時,需要定義為無參函式 def main...
模組化程式設計小結
模組化程式設計,可以讓程式變得容易理解,結構更加清晰,下面小結一下如何進行模組化程式設計 本文以keil軟體進行舉例 1 將所需要的程式分為 c 和 h 兩類,其中 c 中用來實現程式,h 則用來宣告程式 2 在 c 的檔案中,包含所需的標頭檔案,如 include reg52.h 3 在宣告函式的...