C#与代码重构(入门)

  重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

单从概念少来理解重构可能很抽象,那么通过下面的代码来看就比较好理解了。

public class Sample

{

  public static void main(String args[])

  {

    int r=Console.ReadLine();

    r=Convert.ToDouble(r);

    Console.WriteLine(4.0/3*3.14*r*r*r);

    Console.ReadKey();    

  }

}

这是一个简单的求球的体积的函数,r为球的半径,然后通过公式计算出结果并打印到显示屏上,但你可以看看,在没有注释的前提下理解这段代码,要花费你多少时间。

public class Sample

{

  public static void main(String args[])

  {

    int radius=Console.ReadLine();

    radius=Convert.ToDouble(radius);

    Console.WriteLine(4.0/3*3.14*radius*radius*radius);

    Console.ReadKey();    

  }

}

这段代码实现的功能与上面完全一样,但你可以比较一下两段代码的差别,可以看出,就只是把 r 换成了 radius (半径),然后再看你理解这段代码要花费多长的时间,很明显所花的时间要少一些,应为此时你不必去思考 radius 的含义,它就是 半径 ,而上面的那段代码所要表示的意义必须要通过后面的代码才能知道 r 所要表示的含义。

public class Sample

{

  public static void main(String args[])

  {

    const double PI=3.141592654;

    int radius=Console.ReadLine();

    radius=Convert.ToDouble(radius);

    Console.WriteLine(4.0/3*PI*radius*radius*radius);

    Console.ReadKey();

  }

}

这段代码与上面的区别在于把 3.14 换成了常量 PI ,这样做的好处在于如果代码中多次的出现了 3.14 这个值,那么通过 PI 常量来修改就显得很方便,其次就是便于阅读(比如:本例,通过定义常量 PI 代替公式中的 ∏ ,而不是直接使用其值3.1415.....)

public class Sample

{

  public static void main(String args[])

  {

    const double PI=3.141592654;

    int radius=Console.ReadLine();

    radius=Convert.ToDouble(radius);

    double Volume=4.0/3*PI*radius*radius*radius;

    Console.WriteLine(Area);

    Console.ReadKey();

  }

}

这段代码又定义了一个新的变量 Volume(体积) 用来标识所求的面积,而不是直接使用公式本身,这样做的好处很明显,使得代码的结构更清晰,可读性增加。

public class Sample

{

  public static double VolumeOfBall(double radius)

  {

    const double PI=3.141592654;

    double Area=4.0/3*PI*radius*radius*radius;

    return Area;

  }

  public static void main(String args[])

  {

    int radius=Convert.ToDouble(Console.ReadLine());

    Console.WriteLline(VolumeOfBall(radius));

    Console.ReadKey();

  }

}

这段代码通过提取出一个函数 VolumeOfBall() 来封装求球的体积的代码,增加了代码的重用性,而且看函数名就可以理解这个函数的作用,省去了在代码中添加注释的必要,即实现了代码的精简,又使得代码结构更加优上面这个例子就简单解释了什么是代码重构--即调整代码的结构,比如一些常用的数学符号用特定的标识,一些变量在命名是尽量使其可读性更强,能从变量名就可以

  理解这个变量的作用,将一些反复出现的代码段提取成一个函数(方法){方法名也应简单,易读,能从方法名中理解这个方法的功能},尽量少的使用注释,把更多的信息

整合到代码中(即变量名和函数名以及一些常量名等),这样做的好处是使代码看起来不杂乱,更清晰易读。

  总的来说,重构不仅仅是更改已经编写的代码的结构,而且是一种思想(它指导我们在编写代码时如何使得代码更“优美”)。代码重构的作用很大,好处很多。也许

从这个例子中看不出来,当然也许你会说通过重构使得这段代码的执行时间变得更长了,效率变低了,但你可以想一下,当你在做一个很大的工程,而这个工程有成千上万

行代码时,如果不注意使用重构的思想和方法,而单纯的考虑效率,那将会是一个无比复杂的任务,但使用重构,不仅代码更易读,易改,而且节省开发时间。所以学好重

构对我们以后的编程生涯都是有巨大的好处的。

C#与重构(入门)的更多相关文章

  1. Django入门三之urls.py重构及参数传递

    1. 内部重构 2. 外部重构 website/blog/urls.py website/website/urls.py 3. 两种参数处理方式 -1. blog/index/?id=1234& ...

  2. C#零基础入门07:打老鼠之面向对象重构

    一:前言 有了上面两节的知识,尤其是第六节之后,现在我们回过头看我们的打老鼠游戏,我们是不是会发现:这个程序也太不面向对象了.我们所有的代码逻辑都分布在Code-Hide中(UI的后台代码,称之为Co ...

  3. C#零基础入门04:打老鼠初级之枚举、重构、事件处理器

    一:为界面加入"开始"."暂停"."停止" 经过上节课程我们的交互的过程,我们的程序增加了用户友好度,同时也可以记录更为详尽的成绩了.但是我 ...

  4. Re:《Unity Shader入门精要》13.3全局雾效--如何从深度纹理重构世界坐标

    如何从深度纹理重构世界坐标 游戏特效,后处理是必不可少的,而后处理经常需要我们得到当前画面的像素对应世界空间的所有信息. 思路 通过深度纹理取得NDC坐标,然后再通过NDC坐标还原成世界空间坐标 // ...

  5. 接口测试入门(5)----新框架重构,使用轻量级的HTTP开发库 Unirest

    之前的第一套框架在使用过程中发现存在以下问题: 一.  框架1缺点: 1.登陆的账号每个人写的不一样,一旦用户在测试环境被修改,则导致用例失败 2.每次读取访问网址,需要在同一个java文件下切换测试 ...

  6. 简单易懂的程序语言入门小册子(7):基于文本替换的解释器,加入continuation,重构解释器

    或许在加入continuation之前要先讲讲费这么大劲做这个有什么意义. 毕竟用不用continuation的计算结果都是一样的. 不过,这是一个兴趣使然的系列,学习这些知识应该完全出于好奇与好玩的 ...

  7. Android MVC,MVP,MVVM模式入门——重构登陆注册功能

    一  MVC模式: M:model,业务逻辑 V:view,对应布局文件 C:Controllor,对应Activity 项目框架: 代码部分: layout文件(适用于MVC和MVP两个Demo): ...

  8. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  9. 学习WCF入门的第一个实例

    一.概述 WCF说白了就是一个基于终结点的通信手段!就是Service端提供一定的功能实现,然后暴露出一个或多个终结点,Client端调用Service端的功能(可以理解为调用一个函数),那么Clie ...

随机推荐

  1. asp中实现lable自动换行

    asp中实现lable自动换行 因为在用Label标签显示内容时,内容太多,想实现自动换行.我们知道在WINFORM中程序中,有一个属性是AUTOSIZE 改成FALSE 是可以实现的.但是在ASP. ...

  2. [java] volatile关键字对while循环条件提升问题补充

    在java并发编程中,代码如下: volatile boolean asleep; ... while(!asleep){ countSomeSheep(); } 如果此处忘记将asleep变量设置为 ...

  3. Linux 启动顺序

    Linux 启动顺序:1. BIOS自检2. 运行系统内核并检测硬件3. 运行系统的第一个进程init4. init读取系统引导配置文件/etc/inittab中的信息进行初始化            ...

  4. 手机连接fiddler后,浏览器无法打开网页或者fiddler抓取不到手机应用相关数据的情况

    关于手机如何连接fiddler,网上有很多教程,我暂时就不写了 今天在使用fiddler的过程中,发现fiddler突然无法抓取移动端应用的数据包,再三确认连接无误.因此就开始了解决之旅 起因是安卓手 ...

  5. Extjs知识点汇总

    自定义渲染单元格内容 { name:"device.flag", header: '确认', dataIndex: 'flag', width:50, renderer: func ...

  6. Cactus项目(又叫MVCAdmin),开源(2016-11-26更新)

    Cactus基于之前简单后台管理的改良版本,完善了权限管理,为后续的扩展和管理做了铺垫. 完全开放代码,可供学习交流 目前采用MVC4+Autofac+Dapper制作而成,集成一个简单的Blog和权 ...

  7. 详细讲解MapReduce二次排序过程

    我在15年处理大数据的时候还都是使用MapReduce, 随着时间的推移, 计算工具的发展, 内存越来越便宜, 计算方式也有了极大的改变. 到现在再做大数据开发的好多同学都是直接使用spark, hi ...

  8. Spring第一天:Spring的概述、SpringIOC入门(XML)、Spring的Bean管理、Spring属性注入

    记得引入约束 上图路径. 此时 只需修改配置文件 便可以随意更换实现类 无需修改代码. 传统方法必须用实现类(不面向接口了)来调用方法设置属性. 而在Spring中:在创建类的过程中发现实现类有nam ...

  9. hdu2586(lca模板 / tarjan离线 + RMQ在线)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意: 给出一棵 n 个节点的带边权的树, 有 m 个形如 x y 的询问, 要求输出所有 x, ...

  10. springMVC容器加载源码分析

    springmvc是一个基于servlet容器的轻量灵活的mvc框架,在它整个请求过程中,为了能够灵活定制各种需求,所以提供了一系列的组件完成整个请求的映射,响应等等处理.这里我们来分析下spring ...