我不是一个完全没有经验的程序员,但今天当我为一个方法想一个正确的名字时,我的脑袋变得一团糟。我正在对游戏Battleship进行编程,我开始制作简化版的 Board 类,如下所示:
class Board:
SHIP_MISS = 0
SHIP_HIT = 1
SHIP_DEAD = 2
def __init__(self):
self.ships = [
[(1,1), (1,2)],
[(5,6), (5,7), (5,8)],
]
def hit(self, target):
"""
Find out if any ship has been hit or has been sunk and
return an appropriate value (one of SHIP_MISS, SHIP_HIT, SHIP_DEAD)
"""
稍后在我的代码中,我从用户(一个镜头)读取输入坐标并调用 hit 方法,如下所示:
# testing if Board works
board = Board()
result = board.hit(coords)
print result
现在我真的被卡住了board.hit(coords)
。我开始想知道hit
该方法是否真的是一个好名字。我当时在想:“板子被击中,它没有击中任何东西。应该调用该方法process_hit
以使其服从该命令吗?我是告诉对象该做什么还是我声明对它们做了什么? ?” 不知从何而来,我脑子里乱七八糟。
考虑一下:
dog.bark()
有什么dog
?它是吠叫的主题吗?或吠叫的对象(没有意义,是吗?)。
但这是来自 OOP 的一个经典示例:
bankAccount.deposit(50)
bankAccount
语言意义上有什么?它是存款的对象吗,这是考虑银行账户的常见方式。或者它是一个主题,这意味着它应该向自己存入 50 美元。
我的问题是:我应该将编程对象视为语言(语义)意义上的对象,还是应该将它们视为主题并相应地命名它们的所有方法(process_hit
而不是hit
在我的示例中)。还是两种方法都可以?如果是这样,可以将它们混合在我的代码中吗?
(我只是希望这个问题有意义。)