Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

李大松Calculator任务反馈 #18

Closed
raytaylorlin opened this issue Mar 6, 2014 · 4 comments
Closed

李大松Calculator任务反馈 #18

raytaylorlin opened this issue Mar 6, 2014 · 4 comments
Assignees

Comments

@raytaylorlin
Copy link
Contributor

功能基本实现,但还存在以下bug:

  • 先输入百分号,后面接数字和接符号都会有问题
  • 先输入等号,再输入其他东西,也有问题
  • 输入数字(或者不输数字也行),输入加号,然后我现在想纠正点减号,就出错了
  • 计算1/0得到Infinity(这个结果是对的),但是后面还可以继续输入,输入内容就接在了Infinity后面

此外,功能以外的方面再提几点建议:

  • press()函数明显存在着大量的冗余。当你发现你的代码里面有某一个片段被你复制粘贴了3次以上并且每次只修改一点点,你就应该开始考虑你的代码结构设计或者思路是不是有问题。这时候你就需要一个叫代码重构的武器,请自行了解这个概念,并思考如何重构你的press()函数
  • 再次强调代码是写给别人看的。你的switch case段写得就有点让人不太明白,0-9的值还说得过去,但是10以上的case就很莫名其妙了。还有str,str1,arr[0],arr[2]这些,你把代码拿给李青霖看,看她能能不能理解你的用意
  • 注释里提到的问题不明白什么意思,当面说
@lidasong
Copy link
Contributor

lidasong commented Mar 6, 2014

我是没有考虑先输入%或者=的情况,这一点我再改进!
infinity后可以继续加减乘除得到的都还是infinity这个不行吗?
代码命名有问题,我会再进一步改进。代码重构会跟进!
谢谢寿寿学长指导

@raytaylorlin
Copy link
Contributor Author

infinity是一个类似error的情况,现实的计算器的处理方式是必须按AC来清空才可以继续输入,你参照windows自带计算器的处理方式

@lidasong
Copy link
Contributor

lidasong commented Mar 6, 2014

好的!

@raytaylorlin
Copy link
Contributor Author

#20 JS代码重构得不错,懂得抽象出numberClicksymbolClick函数就算达到了了解重构的目的。请以后在写代码的时候随时随地保持重构代码的思考。当然,press函数还可以再精简,设想我现在要你再添加“sin”“log”等等10几个按钮来做一个科学计算器,那你岂不是每添加一个按钮,就得在HTML中添加onclick="press('sin')",例如下面这样:

function press() {
    buttonId = document.getElementById("result");

    //定义符号表
    var SYMBOL_LIST = ['+', '-', 'x', '/', '%'];

    //用内置的event.target来获取点击的按钮内容
    var value = event.target.innerHTML;
    console.log(value);

    //处理数字
    if(value >= '0' && value <= '9') {
        numberClick(value);
    } else if (SYMBOL_LIST.indexOf(value) > -1) {
        //处理符号
        symbolClick(value);
    } else {
        //处理其他
        switch(value) {
            case 'AC':
            //......
        }
    }
    //......

当然还有更高级代码健壮性更强的重构方法,用到Javascript的function对象来处理不同的功能,这里就不再展开了。

任务3完成

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants