【发布时间】:2019-05-09 14:29:09
【问题描述】:
我正在编写一个基于图块的小游戏,我很难决定应该使用哪种语言来尽可能简单地描述一些功能。我希望我的函数名称能够表达函数的作用,而不会使它们太长。这是我的问题:
这些函数在给定点的 x 和 y 坐标的情况下计算平铺地图中的行和列位置。
var tile_width = 32;
var tile_height = 32;
function getColumnFromX(x) { return Math.floor(x / tile_width); }
function getRowFromY(y) { return Math.floor(y / tile_height); }
如您所见,这些功能非常具有表现力。您知道一个获取 x 所在的映射中的列位置,另一个获取 y 所在的映射中的行位置。问题是我不需要两个函数来执行此操作,因为 tile_width 和 @ 987654323@ 具有相同的值。
所以我真正拥有的是:
var tile_size = 32;
function getColumnOrRowFromXOrY(x_or_y) { return Math.floor(x_or_y / tile_size); }
这个名字太长太麻烦了,像getColumnOrRowCenterFromColumnOrRow这样的其他函数是不可接受的,即使它们的名字准确地描述了正在做的事情。
我未完成的解决方案是将ColumnOrRow 和XOrY 替换为他们自己的描述性词语。 XOrY 在逻辑上可以替换为Coordinate,但我不知道用什么替换ColumnOrRow。
我的问题是,什么是列和行?如果 x 和 y 是坐标,那么列和行是什么?我知道它们是网格坐标,但复合词有点违背了简化名称的目的。
知道描述词可以把上面的函数名变成:
function getWordFromCoordinate(coordinate) { /* ... */ }
其中 Word 是描述列和行的单词。
这个问题的核心是想知道哪个英文单词可以用数学上准确的方式描述行或列。
了解数据库表的解剖结构可能会有所帮助,但我在网上发现没有什么用处。此外,JavaScript 不支持函数重载这一事实使得命名具有相同功能但参数略有不同的函数变得更加乏味。
【问题讨论】:
-
你可以使用一个非常笼统的
getProportion => Math.floor(y / tile_height),它不会太麻烦,但也不是很有描述性。您仍然可以通过将它们命名为getColumnFromX = getProportion来获得以前的函数名称。您仍在重用代码并对其进行适当命名。如果getColumnOrRowFromXOrY(5)是给X或Y打电话,你真的不想走神。 -
问题的出现是由于我拥有的不同功能以及它们的相似程度。
getColumnOrRowCenterFromColumnOrRow和getColumnOrRowCenterFromXOrY从不同的输入返回相同的东西。它们都很有用,但命名不佳。我试图将其缩小到getWordFromWord和getWordFromCoordinate(Word 可以描述列或行)。真的,这是一个英语问题。我可能应该将它发布在技术作家论坛上,但 Stack Overflow 是我一直寻求答案的地方。 -
vectorToPos(x_or_y);
-
具有一行或一列的水平或垂直矩阵可以称为向量矩阵,但我不确定是否可以将矩阵的每一行和/或每一列视为自己的向量。或者可以吗...我现在正在研究更多。
-
我认为可以,但我想到了类似的东西,vectorToPos({x:64,y:32}) 返回 {col:2,row:1} 或者如果 x 或 y 未定义只需返回相应的行或列,每个位置都可以由具有标量值的向量定义,例如 n*[1,0]
标签: javascript overloading naming-conventions naming