当前位置: 首页 > 面试题库 >

使用变量存储值还是直接从对象获取值?

倪炎彬
2023-03-14
问题内容

场景是我需要至少两次访问一个值。即我正在使用记录器来跟踪应用程序中正在发生的事情。我想记录该函数正在运行的对象的名称,然后再执行具有相同名称的操作(即检查它是否包含一些字符串或将其放入数组中)。

将名称存储在变量中:

foo(Bar bar){
    String name = bar.getName();
    logger.info("I am working with "+name);
    this.doSomethingWith(name);
}

或两次调用getName():

foo(Bar bar){
    logger.info("I am working with "+bar.getName());
    this.doSomethingWith(bar.getName());
}

我了解,在第一种情况下,我将创建一个新的String,为其分配一个值,然后两次检索该值。这样,我正在使用更多的内存资源,对吗?

在第二种情况下,我是否两次访问对象栏,然后两次访问其名称。我想这不是DRY方法。但另一方面,我不是在记忆中重复自己,对吗?

哪种方法更好?


问题答案:

就个人而言,我更喜欢第二种方法。确实,我通常仅在必要时创建临时变量。

Martin
Fowler(http://en.wikipedia.org/wiki/Martin_Fowler)也遵循此准则。他在我读过的书中提到了它:

http://www.amazon.fr/Refactoring-Improving-Design-Existing-
Code/dp/0201485672

有关此主题的书的免费摘录在这里:

http://sourcemaking.com/refactoring/replace-temp-with-
query

有人会认为删除临时变量可能会导致性能问题。

正如马丁·福勒(Martin Fowler)所说:

在这种情况下,您可能会担心性能。与其他性能问题一样,让它暂时滑动。十分之九,没关系。当这很重要时,您将在优化过程中解决问题。更好地分解代码后,您通常会发现更强大的优化,而无需重构就可能会错过这些优化。如果情况变得更糟,将温度恢复原状很容易。

但是无论如何,这是一个品味问题。有些人发现第一种方法更具可读性,其他人则发现第二种。我真的更喜欢第二种,因为我讨厌为临时变量添加行,而没有实际值:)



 类似资料:
  • 问题内容: 我已经学习Python几个月了,对C语言的了解也很少,我想知道是否有人可以帮我解决这个疑问: 变量是名称,值还是存储位置? 例如: 变量x,x的值还是x在内存中的位置? 我正在寻找关于什么是变量的清晰解释。我已经看过Wikipedia上有关变量和此问题的页面,但对我来说都不是很清楚。如果这是一个重复的问题,那么指向正确答案的链接将非常有用。 谢谢! 问题答案: 语句发生了几件事: 创建

  • 我有以下数据库结构: 对于如何从April和May键获取对象的值,我有点困惑。使用*ngFor在对象上迭代时。我将所有关键点都作为对象。我试图使用,但不起作用。 完整代码: Html 输出 如上所述,我的数据现在位于下。那么,我如何避免或访问密钥以获取数据呢?是否可以使用?

  • 我正在编写在坐标系上运行的程序,所以我需要经常使用坐标。我决定使用类,因为它显然允许轻松存储点的坐标。 问题是在我的程序中的任何地方,我都将其存储为,而在使用和方法时返回双倍。当然,我可以轻松地将其强制转换为,但它看起来不是很优雅,并且会给代码添加不必要的混乱。 如果我直接得到值,可以吗?这样地: 而不是: 我甚至不确定它是否有任何区别,我只知道getter和setter存在是有原因的,应该使用。

  • 我有一个vue.js应用程序,在一个组件中有一个返回嵌套对象的数据方法,如下所示: 在模板中,具有v模型的输入来填充这些值: 我可以使用JSON.stringify方法将此值保存到localStorage: 我可以用JSON.parse从localStorage获取这些值: 但是,当我这样做到创建的模板中的输入字段不会自动填充保存在localStorage中的obj值时,字段仍然为空。如何将这些值

  • 我有一个名为AnimalsData的文件,它有一个由数组组成的对象。数组由一个对象和另一个数组组成。它看起来像这样: 我的HTML文件如下所示: 我正试图获取的值的类名对象从动画类数组。我一直在使用以下两个stackoverflow页面作为指南: 访问JSON数组中的对象和访问/处理(嵌套)对象、数组或JSON 我有另一个javascript文件,其中包含以下内容: 编辑我将for in循环中的"

  • 我正在尝试编写一个可以搜索对象[]数组的SpEL表达式。下面是一些示例代码: 有谁能帮我写一个SpEL来搜索arr并找到第一个具有属性“bar”的对象并返回bar的值吗? 它的实际应用是,我正在为一个方面编写注释,并试图在注释中声明参数的路径: 非常感谢你的帮助!