在軟體開發的過程中,我們經常會重複的使用一些代碼片段,是以我們往往将這樣的代碼片段作為函數進行調用。
函數有4種模式的定義和使用
q 有參數,有傳回值:y=f(x)
q 有參數,無傳回值:f(x)
q 無參數,有傳回值:y=f()
q 無參數,無傳回值:f()
在遊戲、圖形、建築領域的軟體應用中,我們經常需要計算幾何圖形的面積。對于這些經常需要使用的計算,我們往往将計算的代碼封裝為函數進行使用。
/// <summary>
/// 計算長方形面積
/// </summary>
/// <param name="x">長</param>
/// <param name="y">寬</param>
/// <returns></returns>
public static double RectangleArea(int x, int y)
{
return x * y;
}
/// 計算正方形的面積
/// <param name="x">邊長</param>
public static double SquareArea(int x)
return x * x;
/// 計算梯形的面積
/// <param name="top">上底</param>
/// <param name="bottom">下底</param>
/// <param name="h">高</param>
public static double TrapeziumArea(int top,int bottom,int h)
return (top + bottom) * h / 2;
}
我們來分析第一個double RectangleArea(int x, int y)函數的定義:
q Double是定義了傳回值
q RectangleArea是函數的名字
q int x, int y稱為函數的參數
以上函數的調用方式可以如下
static void Main(string[] args)
double rectArea = RectangleArea(10, 12);
System.Console.WriteLine("該長方形的面積為{0}",rectArea);
System.Console.WriteLine("該正方形的面積為{0}", SquareArea(11));
System.Console.WriteLine("該梯形的面積為{0}", TrapeziumArea(7, 8, 9));
初學者注意:
現代的商業軟體開發,要求代碼具有優秀的可讀性和維護性,是以我們需要将重複使用的算法用子產品的方式提煉為函數,通過對函數的調用優化代碼。
在編寫函數的時候要牢記一個原則,即:單一職責原則。一個函數所執行的功能應該非常的單一,不應該有不同的行為。比如以下代碼就是違反環了單一職責原則。
class Program
static void Main(string[] args)
{
RectangleArea(10, 12);
SquareArea(11);
TrapeziumArea(7, 8, 9);
}
/// <summary>
/// 計算長方形面積
/// </summary>
/// <param name="x">長</param>
/// <param name="y">寬</param>
/// <returns></returns>
public static void RectangleArea(int x, int y)
System.Console.WriteLine("該長方形的面積為{0}", x * y);
/// 計算正方形的面積
/// <param name="x">邊長</param>
public static void SquareArea(int x)
System.Console.WriteLine("該長方形的面積為{0}", x * x);
/// 計算梯形的面積
/// <param name="top">上底</param>
/// <param name="bottom">下底</param>
/// <param name="h">高</param>
public static void TrapeziumArea(int top, int bottom, int h)
System.Console.WriteLine("該梯形的面積為{0}", (top + bottom) * h / 2);
仔細比較兩段代碼,你會發現後續的代碼僅僅是把WriteLine遷移到了計算面積的方法體内,在這樣的情況下,你似乎覺得在調用的時候隻有更友善了
static void Main(string[] args)
{
RectangleArea(10, 12);
SquareArea(11);
TrapeziumArea(7, 8, 9);
}
其實不然,新處理的三個方法違反了職責單一原則,在方法中又作了計算又參與了呈現。這樣的模型不合理之處是當使用者需要不同的呈現樣式的時候,你必須修改這三個方法,而無法将算法重用。
本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/805194