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. LAMP 1.4 PHP编译安装

    1.下载                                                                                                 ...

  2. day03 hadoop的解压与配置文件的配置,还需要看视频

    拷贝hadoop1.2.1.tar.gz安装包到其他的节点上 scp -r ~/hadoop-1.2.1.tar.gz  root@node2:~/  tar -zxvf hadoop-1.2.1.t ...

  3. CentOS7 搭建LNMP

    一.        安装依赖文件 1.  sudo yum install gcc gcc-c++ zlib zlib-devel libxml2 libxml2-devel openssl open ...

  4. Material使用05 MdListModule模块 MdButtonToggleModule模块

    1 在共享模块中导入MdListModule模块 import { NgModule } from '@angular/core'; import { CommonModule } from '@an ...

  5. DOS查看端口占用及杀掉进程命令

    转载自:http://www.cnblogs.com/rainman/p/3457227.html 1. 查看端口占用 在windows命令行窗口下执行: netstat -aon|findstr & ...

  6. 功能:formatter 表单提交 拼接参数的形式

    datagarid的formatter属性 value: 代表当前单元格中的值.row:代表当前行.index: 代表当前行的下标. {field:'is_hot',title:'是否热门',widt ...

  7. eos命令

    ps -ef|grep javakill -9 端口号cd /opt/sudytrue>nohup.outnohup eos7.5/startServer.sh &

  8. C#中的单体设计模式Singleton

    经典的单体设计模式的实现就是 有一个Public的类,在这个类中,有一个私有的private的构造函数. 然后有一个静态方法,这个静态方法返回这个类的实例 举个例子如下 Public class My ...

  9. 【mysql-索引+存储过程+函数+触发器-更新。。。】

    BaseOn ===>MySQL5.6 一:索引 1:创建索引: create index nameIndex on seckill(name) ; 2:查看索引: show index fro ...

  10. 【MYSQL】删除数据后自动增长列归0的问题

    在清空数据表后发现自动增长id列在新增数据后仍然会按照之前的顺序生成 强迫症,就是想清空数据后让id从0开始,于是百度 执行以下sql语句可以让自动增长列归0 truncate table 表名 这是 ...