`
yaasshole
  • 浏览: 666084 次
文章分类
社区版块
存档分类
最新评论

模块化编程:函数定义

 
阅读更多

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

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

q 有参数,有返回值:yfx

q 有参数,无返回值:fx

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

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

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

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->///<summary>
///计算长方形面积
///</summary>
///<paramname="x"></param>
///<paramname="y"></param>
///<returns></returns>
publicstaticdoubleRectangleArea(intx,inty)
{
returnx*y;
}

///<summary>
///计算正方形的面积
///</summary>
///<paramname="x">边长</param>
///<returns></returns>
publicstaticdoubleSquareArea(intx)
{
returnx*x;
}

///<summary>
///计算梯形的面积
///</summary>
///<paramname="top">上底</param>
///<paramname="bottom">下底</param>
///<paramname="h"></param>
///<returns></returns>
publicstaticdoubleTrapeziumArea(inttop,intbottom,inth)
{
return(top+bottom)*h/2;
}

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

q Double是定义了返回值

q RectangleArea是函数的名字

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

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

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->staticvoidMain(string[]args)
{

doublerectArea=RectangleArea(10,12);
System.Console.WriteLine(
"该长方形的面积为{0}",rectArea);
System.Console.WriteLine(
"该正方形的面积为{0}",SquareArea(11));
System.Console.WriteLine(
"该梯形的面积为{0}",TrapeziumArea(7,8,9));

}

初学者注意:

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

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

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->classProgram
{
staticvoidMain(string[]args)
{
RectangleArea(
10,12);
SquareArea(
11);
TrapeziumArea(
7,8,9);
}

///<summary>
///计算长方形面积
///</summary>
///<paramname="x"></param>
///<paramname="y"></param>
///<returns></returns>
publicstaticvoidRectangleArea(intx,inty)
{
System.Console.WriteLine(
"该长方形的面积为{0}",x*y);
}

///<summary>
///计算正方形的面积
///</summary>
///<paramname="x">边长</param>
///<returns></returns>
publicstaticvoidSquareArea(intx)
{
System.Console.WriteLine(
"该长方形的面积为{0}",x*x);
}

///<summary>
///计算梯形的面积
///</summary>
///<paramname="top">上底</param>
///<paramname="bottom">下底</param>
///<paramname="h"></param>
///<returns></returns>
publicstaticvoidTrapeziumArea(inttop,intbottom,inth)
{
System.Console.WriteLine(
"该梯形的面积为{0}",(top+bottom)*h/2);
}
}

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->staticvoidMain(string[]args)
{
RectangleArea(
10,12);
SquareArea(
11);
TrapeziumArea(
7,8,9);
}

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

分享到:
评论

相关推荐

    MATLAB中没有输出变量的函数和模块化编程示例.md

    本文介绍了在MATLAB中定义没有输出变量的函数和模块化编程的示例。我们提供了详细的源代码和解析,包括打印输入向量平均值的函数和模块化编程的示例。此外,还给出了使用示例和调用函数的说明。希望本文能够帮助您更...

    c语言头文件如何模块化编程-有最清晰的链接关系.docx

    在C语言中,头文件(.h 文件)用于存放函数声明、宏定义、类型定义等接口信息,它是模块化编程的重要组成部分。下面是一个清晰的C语言模块化编程中头文件与源文件之间的链接关系示例: 模块化编程的基本步骤: ...

    精通WindowsAPI 函数 接口 编程实例

    6.5.5 声明导出函数、创建lib库,为其他模块提供导入表调用接口 190 6.5.6 通过构建导入表调用DLL导出函数 191 第7章 线程同步 192 7.1 基本原理 192 7.1.1 线程同步的过程 193 7.1.2 同步对象 193 ...

    模块化程序设计实验.pdf

    《C 语言程序设计》实验指导书 第 1 页 共 14 页 实验 7 模块化程序设计 一、实验目的 【知识点】 1. 掌握全局变量、 局部变量的作用域和存储类别的区别, 以及它们在程序中的使用方法。 2. 掌握函数间数据传递的 3 ...

    精通Windows.API-函数、接口、编程实例.pdf

    6.5.5 声明导出函数、创建lib库,为其他模块提供导入表调用接口 190 6.5.6 通过构建导入表调用DLL导出函数 191 第7章 线程同步 192 7.1 基本原理 192 7.1.1 线程同步的过程 193 7.1.2 同步对象 193 ...

    C51的模块化设计方法

    首先抛开单片机不谈,简单的说一下C语言的模块化思想, 简而言之就是好多的 .C .H 文件,通过对变量作用范围的定义,利用C中最经典的子函数概念,有效的将大系统分割成小模块,模块之间动过变量(经过范围定义处理的...

    函数式python编程.docx

    这种方式可以使代码更加模块化和可复用,也更容易进行测试和调试。在Python中,我们可以使用lambda表达式和高阶函数来实现函数式编程。 lambda表达式是一种匿名函数,它可以在需要时定义并传递给其他函数。例如,...

    python定义函数语法.docx

    在Python中,定义函数是一种非常重要的编程技巧,它可以帮助我们将代码模块化,提高代码的可读性和可维护性。本文将介绍Python中定义函数的语法。 Python中定义函数的语法如下: ``` def function_name(parameters):...

    Python知识点归纳项目

    函数与模块: 函数的定义和调用、模块的导入和使用等。 文件操作: 读写文本文件、二进制文件、文件系统操作等。 面向对象编程: 类和对象、继承、多态、封装等面向对象概念。 异常处理: 异常捕获和抛出、自定义异常等...

    单片机模块化编程串口中断怎么处理

    单片机编程时,如果代码量不多,可以将所有的函数和定义等放在一个main.c文件中,但是随着代码量的增加,如果将所有代码都放在同一个.C文件中,会使得程序结构混乱、可读性与可移植性变差,而模块化编程就是解决这个...

    JavaScript函数-深入解析与使用指南(很详细)

    函数在JavaScript中扮演着至关重要的角色,它使得代码更加模块化、可维护,并提高了代码的重用性。 3. JavaScript函数的特点 模块化:通过将代码划分为不同的函数,我们可以将复杂的任务分解为更小的、更易于管理的...

    objc.io|objc中国 函数式Swift(4.0)(PDF+EPUB+MOBI)

    模块化: 相较于把程序认为是一系列赋值和方法调用,函数式开发者更倾向于强调每个程序都能够被反复分解为越来越小的模块单元,而所有这些块可以通过函数装配起来,以定义一个完整的程序。当然,只有当我们能够避免...

    C语言课程设计(成绩管理系统)

    C语言课程设计的成绩管理系统是一个基于C语言开发的应用程序,旨在帮助教师和学生更有效地管理成绩信息。该系统通常包括以下功能: ...函数和模块化编程:将不同的功能划分为不同的函数,提高代码的可读

    C语言编程 C语言程序设计 C语言入门教程 第7章 用函数实现模块化程序设计 共211页.ppt

    7.2怎样定义函数 7.3调用函数 7.4对被调用函数的声明和函数原型 7.5函数的嵌套调用 7.6函数的递归调用 7.7数组作为函数参数 7.8局部变量和全局变量 7.9变量的存储方式和生存期 7.10 关于变量的声明和定义 7.11 ...

    python深入和提高,包括异常机制、文件处理、模块使用、GUI编程、游戏开发-坦克大战

    Python的深入学习和提高涉及到多个方面,包括异常机制、文件处理、模块使用、GUI编程以及游戏开发等。具体如下: 异常机制:是Python中用于处理...GUI编程:是指使用图形用户界面进行编程,它允许用户通过图形化的界面

    C程序结构化设计.pptx

    定义:结构化程序设计方法是程序设计的先进方法和工具,其主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。 分类:三种基本结构 顺序结构:是一种简单的程序设计,它是最基本、最常用的结构。 选择...

    C#中的高阶函数介绍

    我们来看下它的基本定义: 1:函数自身接受一个或多个函数作为输入 2:函数自身能输出一个函数。 //函数生产函数   满足其中一个就可以称为高阶函数。高阶函数在函数式编程中大量应用。c#在3.0推出Lambda表达式后...

    温度报警电子钟加仿真

    算是自己单片机的入门吧,一起学的初学者可以拿去借鉴一下,刚开始不用模块化编程写的时候程序很乱,找函数找半天,模块化编程还是要好很多(实际上就是自己定义头文件,分模块写),有问题欢迎大家提出。

    Python笔记.docx

    函数和模块: 讲解如何定义和调用函数,以及如何组织代码为模块,实现代码的模块化和重用。笔记会提供函数定义、参数传递、返回值等方面的内容。 面向对象编程: 介绍如何在 Python 中进行面向对象编程,包括类的...

Global site tag (gtag.js) - Google Analytics