【问题标题】:What does "hard coded" mean?“硬编码”是什么意思?
【发布时间】:2009-12-13 06:55:00
【问题描述】:

我的任务要求我访问test.txt 文档,因此文件名必须硬编码到我的 C 盘。我不知道硬编码是什么意思。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: definition hard-coding


    【解决方案1】:

    “硬编码”意味着在你的源代码中加入一些东西。如果你不是硬编码,那么你可以做一些事情,比如提示用户输入数据,或者允许用户将数据放在命令行上,或者类似的事情。

    因此,要将文件的位置硬编码为位于 C: 驱动器上,您只需将文件的路径名放在源代码中即可。

    这是一个例子。

    int main()
    {
        const char *filename = "C:\\myfile.txt";
    
        printf("Filename is: %s\n", filename);
    }
    

    文件名被“硬编码”为:C:\myfile.txt

    反斜杠加倍的原因是因为反斜杠在 C 字符串中是特殊的。

    【讨论】:

    • 顺便说一句,许多文件系统也接受正斜杠“/”作为目录分隔符。主要优点是您不会遇到使用可能被视为转义字符的反斜杠。示例:“C:\temp”与“C:/temp”;其中 \t 是表格字符。
    • Windows 支持“/”就好了,但其他广泛使用的文件系统不支持“\”。出于这个原因,我总是使用“/”作为我的路径分隔符。
    【解决方案2】:

    “硬编码”是指您想嵌入到您的程序或任何无法直接更改的项目中的内容。 例如,如果您使用的是数据库服务器,那么您必须硬编码以将数据库与您的项目连接起来,并且用户无法更改。 因为你已经硬编码了。

    【讨论】:

      【解决方案3】:

      Hard-Coding的反义词是Soft-Coding。为了更好地理解硬编码,我将介绍这两个术语。

      • 硬编码:功能被编码到系统中,不允许配置;
      • 参数化:功能可通过表格驱动或具有有限参数值的属性文件进行配置;
      • 软编码:功能使用基于任意数量的参数值(例如 BRE 中的业务规则)得出结果的“引擎”;规则是编码的,但作为参数存在于系统中,以脚本形式编写

      例子:

      // firstName has a hard-coded value of "hello world"
      string firstName = "hello world";
      
      // firstName has a non-hard-coded provided as input
      Console.WriteLine("first name :");
      string firstName = Console.ReadLine();
      

      硬编码常量[1]

      float areaOfCircle(int radius)
      {
          float area = 0;
          area = 3.14*radius*radius;  //  3.14 is a hard-coded value
          return area;
      }
      

      此外,硬编码和软编码可以被视为反模式[2]。因此,人们应该努力在硬编码和软编码之间取得平衡。

      1. 硬编码硬编码”是一种众所周知的反模式,大多数 Web 开发书籍都在前言中警告我们。硬编码是一种不幸的做法,在这种做法中,我们将配置或输入数据(例如文件路径或远程主机名)存储在源代码中,而不是从源代码中获取。配置文件、数据库、用户输入或其他外部源。

        硬代码的主要问题是它只在一定的环境下才能正常工作,而任何时候条件发生变化,我们都需要修改源代码,通常在多个分开的地方。

      2. 软编码
        如果我们非常努力地避免硬编码的陷阱,我们很容易遇到另一种称为“软编码”的反模式,它正好相反。

        在软编码中,我们将应该在源代码中的东西放到外部源中,例如我们将业务逻辑存储在数据库中。我们这样做的最常见原因是担心未来业务规则会发生变化,因此我们需要重写代码。

        在极端情况下,软编码程序可能变得如此抽象和复杂,以至于几乎无法理解(尤其是对于新团队成员),并且极其难以维护和调试.

      来源和引文:

      1:Quora: What does hard-coded something mean in computer programming context?
      2:Hongkiat: The 10 Coding Antipatterns You Must Avoid

      进一步阅读:

      Software Engineering SE: Is it ever a good idea to hardcode values into our applications?
      Wikipedia: Hardcoding
      Wikipedia: Soft-coding

      【讨论】:

        【解决方案4】:

        场景

        一所大学有很多学生在学习不同的课程,考试结束后我们必须准备一张成绩卡。我可以通过两种方式计算成绩

        1.我可以写一些这样的代码

            if(totalMark <= 100 && totalMark > 90) { grade = "A+"; }
            else if(totalMark <= 90 && totalMark > 80) { grade = "A"; }
            else if(totalMark <= 80 && totalMark > 70) { grade = "B"; }
            else if(totalMark <= 70 && totalMark > 60) { grade = "C"; }
        

        2。您可以要求用户在某处输入成绩定义并保存该数据

        类似于存储到数据库表中的东西

        在第一种情况下,所有课程的成绩都是通用的,如果规则发生变化,则需要更改代码。但是对于第二种情况,我们为用户提供了根据他们的要求输入等级的规定。所以当等级规则改变时,代码不会改变。

        当您为用户定义业务逻辑提供更多条件时,这一点很重要。第一种情况只不过是硬编码

        所以在您的问题中,如果您要求用户在开始时输入文件的路径,那么您可以删除代码中的硬编码路径。

        【讨论】:

          【解决方案5】:

          有两种类型的编码。

          (1) 硬编码 (2) 软编码

          硬编码。在编写源代码的过程中为程序赋值,并制作程序的可执行文件。现在,更改或修改程序源代码值是非常困难的过程。与区块链技术一样,创世块是不可更改或修改的硬代码。

          软编码:将外部来源的值插入计算机程序的过程。比如通过键盘、命令行界面插入值。软编码被认为是良好的编程实践,因为开发人员可以轻松地修改程序。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-07-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多