party_bid重构

本文探讨了代码重构的目的与方法,旨在让代码变得更简洁易懂。介绍了如何优化逻辑控制、使用三目运算符、抽取方法等内容,并提供了重构的具体示例。

正文:

 

      重构的目的就是使代码更加简单,更易读懂.重构就是在原来代码的基础上进行改进,减少函数内圈复杂度,不会改变代码要实现的功能,有时,重构后的代码量比之前更大了,但代码的结构也更清晰了.

 

. 原代码重构的主要方面:

 

      1.在逻辑控制方面用的最多的便是if..else,而过多的if..else虽在逻辑上很正确,但计算机有时却不能更好的执行此逻辑,故用if..retrun代替;在用活动状态决定开始按钮状态时用了哈希的方法

 

 

 function check_current_page_activity_status() {
        var status = Activity.get_current_page_activity_status();
        var check_current_page_activity_status = {
            unStart: function () {
                $scope.start_or_unStart = Activity.start_or_cannot_click_start_button();//如果活动状态为unStart执行此function,以下类似
            },
            start: function () {
                $scope.start_or_unStart = 'unStart';
            },
            end: function () {
                $scope.start_or_unStart = 'end_sign_up';
            }
        }
        if (check_current_page_activity_status [status]) {
            check_current_page_activity_status [status]()
        }
    }//if可以省略,因为活动的状态仅有上述三种(if的作用是,如果此状态存在则执行相应的方法)

 

 

      2.if()判断条件处如果是一个方法的返回值(或者是一个很长的判断条件)可以先定义一个变量等于要返回的那个函数(判断条件),这样会更一目了然

 

 

$scope.go_create = function () {
        var current_activity_bid = Bid.get_current_activity_bid();
        if (!current_activity_bid) {
            $navigate.go('/create active')
        }
    }

 

 

 

        同理如果一个函数的返回值很长也可以把返回值抽成方法,再返回

       3.三目运算符的使用

 

    之前:

 

if(activity_names.length==0){return false;
          }else{return true;
}

 

    之后:

 

 return activity_names.length == 0 ? false : true

 

       4.使用_.chain来解决需要多次处理一个数组却得多次定义的复杂性

          例如:

 

_.chain(biddings[bid_name])
        .groupBy(function (bidding) {
            return parseInt(bidding.price);
        })
        .map(function (value, key) {
            return{"price": key, "count": value.length}//.map的为.groupBy处理后的biddings[bid_name]
        })
        .value();//存在返回值

 

 

.重构的方向

      view:通过写haml来生成主界面,所需要的指示性数据,controller提供  

      controller:中只写与界面交互的内容,不写具体的方法,通过调用方法来实现对界面的控制(提供view所需的数据源),

      model:把所有controller所调的方法写在此model,实现数据的增删改查

        例如:

 

%button.btn.btn-primary(ng-switch-when ='start' ng-tap='start_sign_up()')开始

 

      呈现在用户界面的是开始按钮可以点击,start状态是在controller中提供的,而控制开始的方法又是在model定义的,controller调用

      start_sign_up()方法也是在controller中调用的

 

.model中方法的抽取

      1.每个函数只实现一种功能

      2.只有函数对象有prototype属性,每个函数都有构造函数constructor,当函数作为构造函数器构造一个新对象时函数的prototype属性才有意义,它所指的对象保留了新对象继承的属性

        例如:

function Bid(activity_name) {
    var num = Activity.get_the_activity(activity_name).bids.length + 1;
    var name = '竞价' + num
    this.name = name;
    this.biddings = [];
};//为函数对象

Bid.prototype.create = function (activity_name) {
    var activities = Activity.get_activities()
    var bid = this//新对象继承了Bid(activity_name)的属性,减少了数据传送(注:使用this要提前定义,因为在经过_.map后this的值会改变)
     _.map(activities, function (the_activity) {
        the_activity['name'] == Activity.get_current_activity() ? the_activity['bids'].push(bid) : '';

 

基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值