在功能方面,此代码的分配有啥不同吗?

Posted

技术标签:

【中文标题】在功能方面,此代码的分配有啥不同吗?【英文标题】:Is there a difference in this code's assignment when it comes to functionality?在功能方面,此代码的分配有什么不同吗? 【发布时间】:2020-03-13 06:48:41 【问题描述】:

按照一本书的例子,我想在看答案之前自己尝试一下。我的答案与书本不同。

    示例 1 更好还是示例 2 更好? 它们是否同样出色? 主要问题:是否有任何理由执行示例 1 和示例 2? 一种被认为是更好的编程方式吗?

示例 1)

        

            Console.WriteLine("How many pills do you take per day?");

            int pillsPoppedPerDay = int.Parse(Console.ReadLine());

            Console.WriteLine(pillsPoppedPerDay);
        

示例 2)

        
            Console.WriteLine("How many pills do you take per day?");

            string pillzPoppedPerDay = Console.ReadLine();
            int PillzPoppedPerday = int.Parse(pillzPoppedPerDay);

            Console.WriteLine(pillzPoppedPerDay);
        

(source is a slight variation of from : C# Programming Yellow Book, Rob Miles)

【问题讨论】:

两者都不好,如果用户输入“我喜欢药丸”,程序就会崩溃。与用户打交道时,您应该使用TryParse 版本。否则,“更好”是一个很大的意见问题 @ŇɏssaPøngjǣrdenlarp 不是问题的重点。它还需要更多的改变。就像一个 do...while 循环。 @ŇɏssaPøngjǣrdenlarp 我刚开始看这本书。我相信作者很快就会教退出(或者程序不崩溃所需的任何东西)。我会尝试你所说的,谢谢你的建议。 @Christopher 我将很快了解循环,Christopher。一旦我学会了它,我会看看我是否可以更改代码。谢谢!! @ŇɏssaPøngjǣrdenlarp 关于它们都不是好的编程是正确的,因为它们不会处理错误的用户输入。但是,忽略这一点,两种样式(定义一个变量与没有额外变量)都有用途——例如,如果您需要使用原始输入执行多个操作,您可能想要定义一个变量。在您的简短示例中,您只使用一次原始输入,因此无需存储它。 【参考方案1】:

在功能上它们是相同的。实际上,在发布版本中,它们相同的可能性很大。 JiT 编译器和通用编译器优化喜欢删除未充分利用的临时变量,例如 string pillzPoppedPerDay

为了调试和可读性*,我更喜欢示例 2。在代码行中有超过 1 个点实际上只会使调试变得异常困难。正如我所说,无论如何,在发布时它可能会以相同的 MSIL 结束。无需担心几乎不使用的临时变量会减慢发布速度。

*感谢笔展

【讨论】:

一旦我获得 15 个代表点数,我就可以给你点赞。谢谢。

以上是关于在功能方面,此代码的分配有啥不同吗?的主要内容,如果未能解决你的问题,请参考以下文章

node.js 中的闭包有啥不同吗?

gradle和maven有啥用?分别有啥区别

C 内存的动态分配怎么用?有啥建议吗?内存分配中栈与堆到底有啥不同啊?

idea和eclipse有啥区别

PHP:编写严格的代码有啥好处吗?

tornado v6 似乎已经放弃了 tornado.web.asynchronous 协程。在代码中解决这个问题有啥不同的方法吗?