声明变量

时间:2009-06-19 22:14:32

标签: architecture variables declaration

假设您有一个名为 hotelPropertyNumber 的变量。内容将始终是一个数字,但通常用作字符串。将它声明为字符串是否有任何“错误”,以便您不必将其连续转换为字符串....或者这是一个糟糕的编程习惯?

感谢。

12 个答案:

答案 0 :(得分:6)

数字是用于计数和测量的数学对象。如果您使用hotelPropertyNumber进行计数,即对其应用任何算术运算,则编号,应存储为数字类型。

如果没有,则不是数字;它是一个字符串。

答案 1 :(得分:6)

在某些语言中,您可以创建用户定义的类型,例如“class HotelPropertyNumber”,其中包含:

  • 完全支持您需要的方法
  • 可以在内部将其数据存储为字符串
  • 可以验证(在其构造函数中)其值具有类似数字的语法
  • 不能与不是HotelPropertyNumber实例的其他数字和/或字符串类型实例混淆。

答案 2 :(得分:3)

始终以最简单的形式存储您的信息。在这种情况下,一个整数。必要时将其转换为字符串。几乎所有语言都使这几乎无痛,特别是对于字符串的整数。

一个很好的例子就是StackOverflow Podcast #58,当时Jeff将标题的HTML存储在数据库中,而不仅仅是标题本身。当他想稍后添加功能并显示不需要HTML的标题时,这会带来很多问题。

ChrisW也提出了一个很好的观点,就是这样做type safety。我认为这很重要,需要注意。

答案 3 :(得分:2)

这取决于你想要用它们做什么。

你可能永远不会对它们进行算术运算,但排序怎么样?整数将以与字符串不同的方式排序。你想要它们是1,10,2等吗?如果没有,则使用整数或特殊排序方法。

另一方面,使用字符串将允许更多类型的“数字”。例如,“10090A”。并且整数都不会出现溢出问题。

答案 4 :(得分:2)

Igor Krovokon已经说过了,但我想详细说明一下。

为什么您认为酒店号码的内容是一个数字? “12”不是数字。它是一个包含几个数字的字符串。您不能使用#153房间的平方根,但您可以使用数字153。

酒店房间号码表现为数字。数字是一个数学概念,可以用很多不同的方式用文本表示。 14可以用罗马数字写成XIV,“十四”,或十六进制为0xfe,或二进制为11111110。但是如果你要求“一对一 - 一对一 - 一对一的房间”,酒店工作人员可能会给你一个非常奇怪的外观。

酒店房间号码不是数学数字,因此不应将它们表示为整数。

那么他们是字符串吗?是的,或多或少,但他们确实有一些额外的限制,正如你所注意到的那样。

并非每个字符串都是有效的酒店编号。 “14”是好的,但“西瓜”不是。

理想情况下,它应该表示为包装字符串的抽象数据类型,并确保字符串中不存在非数字。

在实践中,当然,如果你采取简单的方法,你不可能遇到很多问题,并将房间号码表示为整数或字符串。但最好的设计是确保房间号码像房间号码一样。字符串或整数都没有。

答案 5 :(得分:0)

不一定错了。但您可能需要考虑重命名变量以反映它是一个字符串。我不认为你是否应该保留一个数字或将其转换为字符串有一个简单的答案。这取决于实际情况。如果您选择将其作为整数存储在应用程序中并且必须在代码中将其转换为字符串1000次,则可能值得将转换为字符串一次。你必须根据情况考虑权衡。

答案 6 :(得分:0)

我同意@Eric。您会发现,如果将其声明为字符串,则会将其解析为int,或将其强制为int。只需使用int。

答案 7 :(得分:0)

我不同意Eric。

开发中没有“始终”规则。

如果您主要将此变量用作字符串,则将其存储为字符串更有意义,并从变量名称中删除“数字”。

如果您对此变量进行更多数值运算,那么它就是一个数字,应该存储为数值,并转换为字符串以用作字符串。

答案 8 :(得分:0)

将名称更改为hotelPropertyIdentifier是否有意义?这可能会避免调用某个数字的所有内涵。

答案 9 :(得分:0)

您可以随时创建一个公共的“HotelPropertyNumber()”函数,该函数将数字作为字符串返回,但int仍然保留在封面下。

如果你确定你真的不需要在封面下使用int,那么HotelPropertyNumber()只能返回私有字符串。

答案 10 :(得分:0)

永远不要说。它可能并不总是用数字表示。例如,可以将图14的细分为14a和14b。或者21和22可以合并到21-22。它比用它们做算术更有可能。

查看街道地址,通常以数字为目的开始。 (非常接近类比。)

答案 11 :(得分:-1)

这不是一个习惯,但以后可能会导致麻烦。

现在从个人经验说起:我曾经是存储数字值的忠实粉丝,这些数值总是在字符串变量中用作字符串。我的意思是,为什么不呢,对吧?为您节省所有繁琐的演员和诸如此类的东西,您可以继续解决问题的真正含义。 (当然,这决定了午餐的订购方式。)

然后,我花了一天的时间来试图弄清楚为什么现场系统会抛出各种疯狂的异常。事实证明,我在数据中看到的“1”实际上是一个小写的“l”。

然后,正如他们所说,我开悟了。

(当然,这真的可以根据你所使用的语言而改变。在类似Java的东西中,几行的定义可以解决所有这些问题。在Python或Perl中,这个问题甚至都没有意义 - 语言只是“正确”。好吧,对于某些“权利”的定义,无论如何。)