我做了大量的数据分析脚本,比较两个对象或字符串来确定差异或提出需要填补的空白。
当你处于循环中时,将对象a与对象b进行比较,你是否有一个有意义的首选编码标准(即,它是自我记录的)并且可以很好地传播到其他代码?或者这类代码中的变量名称无关:
for (String a : TreeMapvar) {
// Read b from data source
if (a.equals(b)) {
// Update a
} else {
TreeMapvar.add(b);
}
另一个例子:
TreeMap<String, MyObject> TreeMapvar = new TreeMap<String, Object>();
File f = "Somefile";
// Open the file with bufferedReader br
while ((line=br.readLine)!=null)) {
//insert code parse line to get object a
if (TreeMapvar.containsKey(a)) {
if (TreeMapvar.get(a).somefield.equals(a.somefied)) {
//insert code to update a
} else {
//insert code to insert new object
}
}
}
答案 0 :(得分:3)
我认为变量名称根本不相关,但是在这样的循环中没有适合所有可能情况的良好通用名称。它取决于存储在TreeMap中的内容和数据源包含的内容。不过,我们可以说像
for (String localData : TreeMapvar) {
// Read remoteData from data source
if (localData.equals(remoteData)) {
// Update or add to a counter
}
}
如果我得到你的漂移。
事实是,通过使用.equals()可以明显地进行比较,因此我们不需要使用变量名(一般来说)来表示要比较值,哪些不明显(和因此更重要的是比较什么价值。
编辑:你的第二个例子什么都没改变。你还在使用糟糕的varnames a和b,在那里你应该使用描述a和b实际表示的描述。我仍然看到比较清楚,因此与命名无关。
编辑(重新,你的评论):这很容易。唯一需要的是一些上下文,假设Map包含与您喜欢的任何内容相关联的用户名,并且您将它们与现有用户信息进行比较。
for (String a : TreeMapvar) {
// Read b from data source
if (a.equals(b)) {
// Update or add to a counter
}
}
for (String userName : TreeMapvar) {
String existingUserName = getNextUserName();
if (userName.equals(existingUserName)) {
// Update or add to a counter
}
}
答案 1 :(得分:2)
变量名称应该增强代码的可读性,在您的示例中(不尝试修改代码):
所以如果(a.equals(b)){
变
if(baseValue.equals(compareToValue)){
答案 2 :(得分:1)
好吧,如果你需要2个变量名,让我们称它们为a和b,那么你可能有3个对象:self,a,b。
现在,这对我来说相当多,我试着让事情变得更小。
所以,考虑你的第一个例子:
for (String a : TreeMapvar) {
// Read b from data source
if (a.equals(b)) {
// Update a
} else {
TreeMapvar.add(b);
}
那么,为什么不让你的整个片段成为b类定义的一部分并将b重命名为“this”?
lookAtYourTreeMap() {
for( String a : TreeMapvar) {
this.accomodateTreemapIfNecessaryTo(a);
}
}
然后我会有一个方法
accomodateTreemapIfNecessaryTo(a) {
if(a .equals( this)) {
a.update();
} else {
TreeMapVar.add(a);
}
}
请注意,现代计算机的发明者Kent Beck说,方法需要简短。
在第三个组件中启动整个事情,如下所示:
B b = loadBFromSource();
b.lookAtYourTreemap();
像你这样的循环我称之为“结构代码”。
答案 3 :(得分:0)
如果有问题的语言实现了运算符重载,那么我将实现==运算符。如果没有,那么您可以使用上述等于或实现“比较”功能
您的语言或框架可能已经为字符串实现了这两个。你必须记住,大多数语言中的“等于”功能都会比较参考(浅层)经文(深层)。
比较功能如下所示:
int Compare(string a, string b)
{
if(a < b) return -1;
else if (a == b) return 0;
else return 1;
}
答案 4 :(得分:0)
简而言之,上下文(变量的名称代表它所拥有的内容)&amp;可读性是我认为重要的。
foreach(Order order in Orders)
{
if (order.ID == queriedOrderID)....
}