如何避免幻数?
How to avoid magic numbers?
我正在制作一个 class 来识别扑克手牌。它用于扑克之类的游戏,但它还有一些其他卡片不能成为 straight/pair/etc.
的一部分
class 获取纸牌列表并检查它们的数值以查看它们是否与一手牌相匹配。
我的问题是在我的应用程序中,有些卡片没有数值。像通配符和其他一些。
最简单的做法是让这些卡片具有负值或类似的值。我不喜欢这个想法,原因很明显。
我想过在卡片的数值字段中使用一个可为空的整数,但在使用之前我总是要检查它是否为空。
这是有道理的,因为我使用的卡片没有价值,但它增加了代码的复杂性,我认为这是不必要的。出于这个原因,我考虑实现一个 属性 (C#)*,如果数值为 null,returns 一个不可为 null 的负整数。但这也是 returns 一个神奇的数字。
执行此操作的正确方法是什么?完全避免幻数,每次都检查是否为空,或者我没有想到的东西?
更新: 我认为最好的办法是为值创建一个可为 null 的 Int,并创建一个 属性* returns值,如果值为 null 则抛出异常。这样我就不必每次都检查是否为 null,如果发生异常就捕获异常。这有什么不对吗?
*想想没有属性的语言中的 getter 方法,因此 returns variable/field.
的值的方法
尝试对问题域建模。
从一张 class Cards
开始,一张卡片的构造提供 等级 (A、2、3、..、J、Queen、..)、suit(梅花、方块、红心)和一个 int value,这取决于你玩的游戏。在任何游戏中,一张牌都代表某种价值,也许什么都不是 (0) 但永远不会是 -1。
接下来,通过创建 class Hand
来完成您的域,它是 Card
的集合,以及一些根据组成手牌的牌计算总价值的方法.
也许添加一个 class Deck
可以用来初始化所有 52 张牌并从中发牌。
等等
我正在制作一个 class 来识别扑克手牌。它用于扑克之类的游戏,但它还有一些其他卡片不能成为 straight/pair/etc.
的一部分class 获取纸牌列表并检查它们的数值以查看它们是否与一手牌相匹配。
我的问题是在我的应用程序中,有些卡片没有数值。像通配符和其他一些。
最简单的做法是让这些卡片具有负值或类似的值。我不喜欢这个想法,原因很明显。
我想过在卡片的数值字段中使用一个可为空的整数,但在使用之前我总是要检查它是否为空。
这是有道理的,因为我使用的卡片没有价值,但它增加了代码的复杂性,我认为这是不必要的。出于这个原因,我考虑实现一个 属性 (C#)*,如果数值为 null,returns 一个不可为 null 的负整数。但这也是 returns 一个神奇的数字。
执行此操作的正确方法是什么?完全避免幻数,每次都检查是否为空,或者我没有想到的东西?
更新: 我认为最好的办法是为值创建一个可为 null 的 Int,并创建一个 属性* returns值,如果值为 null 则抛出异常。这样我就不必每次都检查是否为 null,如果发生异常就捕获异常。这有什么不对吗?
*想想没有属性的语言中的 getter 方法,因此 returns variable/field.
的值的方法尝试对问题域建模。
从一张 class Cards
开始,一张卡片的构造提供 等级 (A、2、3、..、J、Queen、..)、suit(梅花、方块、红心)和一个 int value,这取决于你玩的游戏。在任何游戏中,一张牌都代表某种价值,也许什么都不是 (0) 但永远不会是 -1。
接下来,通过创建 class Hand
来完成您的域,它是 Card
的集合,以及一些根据组成手牌的牌计算总价值的方法.
也许添加一个 class Deck
可以用来初始化所有 52 张牌并从中发牌。
等等