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. Java学习路线-知乎

    鼬自来晓 378 人赞同 可以从几方面来看Java:JVM Java JVM:内存结构和相关参数含义 · Issue #24 · pzxwhc/MineKnowContainer · GitHub J ...

  2. java 终端输入小结,输入到数组、文件等(持续更新)

    一:将键盘输入的数存到数组中,数组长度未知 public class Test{ public static void main(String[] args){ Scanner sc = new Sc ...

  3. service的生命周期以及两种service的差异

    可以看到,两种service的生命周期都相对简单,有一点不同的是,Intentservice每次调用的时候都执行onstartcommand,而boundservice一旦启动了之后,就不会每次执行o ...

  4. sort命令实战

    本文参考:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html 东方雨中漫步者 sort命令,帮助我们依据不同的数据类型进 ...

  5. 6.7 通过终端连接jboss,连接数据库

    进入终端,通过 ssh jboss@ip地址即可. 然后通过sqlplus 数据库名,输入密码,即可连接数据库. 具体不懂的可以查看对应文档进行操作.

  6. hdu1073

    #include<iostream> using namespace std; #define N 5050 char a[N],b[N],tmp[N]; void Read(char p ...

  7. hdu1072

    #include <iostream> #include <cstdio> #include <cstring> #include <queue> us ...

  8. 【lunux-make: *** 没有规则可以创建目标“install”。 停止。问题】

    [root@localhost nginx-1.8.0]# make installmake: *** 没有规则可以创建目标“install”. 停止.

  9. PHP开源系统学习之fluxbb_1

    最近一直忙于做项目,虽说做了点新东西.感觉自己进步不是很大,总体水平还是跟半年前差不多,想到的东西跟以前差不多,写出来的东西也跟以前差不多.只是现在做的东西多些,比以前敢做了. 近期准备利用点时间,读 ...

  10. Python-OpenCV中的图像轮廓检测

    目录 cv2.findContours()   主要记录Python-OpenCV中的cv2.findContours()方法:官方文档: cv2.findContours()   在二值图像中寻找图 ...