博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模块化编程:函数定义
阅读量:5958 次
发布时间:2019-06-19

本文共 2479 字,大约阅读时间需要 8 分钟。

在软件开发的过程中,我们经常会重复的使用一些代码片段,因此我们往往将这样的代码片段作为函数进行调用。

函数有4种模式的定义和使用

q 有参数,有返回值:yfx

q 有参数,无返回值:fx

q 无参数,有返回值:yf()

q 无参数,无返回值:f()

在游戏、图形、建筑领域的软件应用中,我们经常需要计算几何图形的面积。对于这些经常需要使用的计算,我们往往将计算的代码封装为函数进行使用。

 
  1. /// <summary>  
  2. /// 计算长方形面积  
  3. /// </summary>  
  4. /// <param name="x">长</param>  
  5. /// <param name="y">宽</param>  
  6. /// <returns></returns>  
  7. public static double RectangleArea(int x, int y)  
  8. {  
  9.     return x * y;  
  10. }  
  11.       
  12. /// <summary>  
  13. /// 计算正方形的面积  
  14. /// </summary>  
  15. /// <param name="x">边长</param>  
  16. /// <returns></returns>  
  17. public static double SquareArea(int x)  
  18. {  
  19.     return x * x;  
  20. }  
  21.  
  22. /// <summary>  
  23. /// 计算梯形的面积  
  24. /// </summary>  
  25. /// <param name="top">上底</param>  
  26. /// <param name="bottom">下底</param>  
  27. /// <param name="h">高</param>  
  28. /// <returns></returns>  
  29. public static double TrapeziumArea(int top,int bottom,int h)  
  30. {  
  31.     return (top + bottom) * h / 2;  

我们来分析第一个double RectangleArea(int x, int y)函数的定义:

q Double是定义了返回值

q RectangleArea是函数的名字

q int x, int y称为函数的参数

以上函数的调用方式可以如下

 
  1. static void Main(string[] args)  
  2. {  
  3.  
  4.     double rectArea = RectangleArea(10, 12);  
  5.     System.Console.WriteLine("该长方形的面积为{0}",rectArea);  
  6.     System.Console.WriteLine("该正方形的面积为{0}", SquareArea(11));  
  7.     System.Console.WriteLine("该梯形的面积为{0}", TrapeziumArea(7, 8, 9));  
  8.  
  9. }  
  10.  

初学者注意:

现代的商业软件开发,要求代码具有优秀的可读性和维护性,因此我们需要将重复使用的算法用模块的方式提炼为函数,通过对函数的调用优化代码。

在编写函数的时候要牢记一个原则,即:单一职责原则。一个函数所执行的功能应该非常的单一,不应该有不同的行为。比如以下代码就是违反环了单一职责原则。

 

 
  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         RectangleArea(10, 12);  
  6.         SquareArea(11);  
  7.         TrapeziumArea(7, 8, 9);  
  8.     }  
  9.  
  10.     /// <summary>  
  11.     /// 计算长方形面积  
  12.     /// </summary>  
  13.     /// <param name="x">长</param>  
  14.     /// <param name="y">宽</param>  
  15.     /// <returns></returns>  
  16.     public static void RectangleArea(int x, int y)  
  17.     {  
  18.         System.Console.WriteLine("该长方形的面积为{0}", x * y);  
  19.     }  
  20.  
  21.     /// <summary>  
  22.     /// 计算正方形的面积  
  23.     /// </summary>  
  24.     /// <param name="x">边长</param>  
  25.     /// <returns></returns>  
  26.     public static void SquareArea(int x)  
  27.     {  
  28.         System.Console.WriteLine("该长方形的面积为{0}", x * x);  
  29.     }  
  30.  
  31.     /// <summary>  
  32.     /// 计算梯形的面积  
  33.     /// </summary>  
  34.     /// <param name="top">上底</param>  
  35.     /// <param name="bottom">下底</param>  
  36.     /// <param name="h">高</param>  
  37.     /// <returns></returns>  
  38.     public static void TrapeziumArea(int top, int bottom, int h)  
  39.     {  
  40.         System.Console.WriteLine("该梯形的面积为{0}", (top + bottom) * h / 2);  
  41.     }  
  42. }  

仔细比较两段代码,你会发现后续的代码仅仅是把WriteLine迁移到了计算面积的方法体内,在这样的情况下,你似乎觉得在调用的时候只有更方便了

 

static
 
void
 Main(
string
[] args)
{
RectangleArea(
10
12
);
SquareArea(
11
);
TrapeziumArea(
7
8
9
);
}

 

其实不然,新处理的三个方法违反了职责单一原则,在方法中又作了计算又参与了呈现。这样的模型不合理之处是当用户需要不同的呈现样式的时候,你必须修改这三个方法,而无法将算法重用。

本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/805194

转载地址:http://gorxx.baihongyu.com/

你可能感兴趣的文章
React中那些纠结你的地方(一)
查看>>
Docker入门安装教程
查看>>
PhoneGap极光推送 cordova消息推送
查看>>
Subarray Sum Equals K
查看>>
preventDefault, stopPropagation, stopImmediatePropagation 三者的区别
查看>>
超级账本HyperLedger初体验
查看>>
完美解决html中select的option不能隐藏的问题。
查看>>
推荐5大开源工具,用于开发Kubernetes项目
查看>>
制定2015年的移动开发策略
查看>>
JPA 2.2改进了易用性
查看>>
从蚂蚁金服实践入手,带你深入了解 Service Mesh
查看>>
24周年,“常青树”Delphi发布新版本10.3.1
查看>>
7. 从数据库获取数据- 从零开始学Laravel
查看>>
阿里百川码力APP监控 来了!
查看>>
使用dotenv管理环境变量
查看>>
温故js系列(11)-BOM
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>
切图崽的自我修养-[ES6] 编程风格规范
查看>>
[React Native Android 安利系列]样式与布局的书写
查看>>