gpt4 book ai didi

java - 使用数组来最小化变量的使用

转载 作者:行者123 更新时间:2023-12-02 12:03:37 29 4
gpt4 key购买 nike

为了不创建不必要的变量并在方法范围内变得困惑,否则方法可能会非常小,所以我创建了一个临时变量来保存我要保存的所有文件在该方法的其余部分中引用。

我不喜欢这个解决方案,因为它每次运行时都会创建一个数组对象,而无需创建数组对象。

我也不能使用数组或变量墙,而是直接引用 get 方法,但这会产生大量冗余,因为我重复执行相同的方法,我更不喜欢这样做。

public void savePrices() {
MFilePrices file[] = {AutoEcon.files().getPrices(), AutoEcon.files().getIntangibles(), AutoEcon.files().getGroups()};
for (String price : sellPrices.keySet()) {
if (EconItem.fromString(price) != null) {
file[0].setPrice(price, sellPrices.get(price).getExpression());
file[0].setBuyRate(price, sellPrices.get(price).getBuyRate());
} else if (file[1].getLabels().contains(price)) {
file[1].setPrice(price, sellPrices.get(price).getExpression());
file[1].setBuyRate(price, sellPrices.get(price).getBuyRate());
} else if (file[2].getLabels().contains(price)) {
file[2].setPrice(price, sellPrices.get(price).getExpression());
file[2].setBuyRate(price, sellPrices.get(price).getBuyRate());
}
}
}

public Double setExpression(String id, String expr) {
savePrices();
MFilePrices file[] = {AutoEcon.files().getPrices(), AutoEcon.files().getIntangibles(), AutoEcon.files().getGroups()};
if (EconItem.fromString(id) != null)
file[0].setPrice(id, expr);
else if (file[1].getLabels().contains(id))
file[1].setPrice(id, expr);
else if (file[2].getLabels().contains(id))
file[2].setPrice(id, expr);
else return null;
sellPrices.clear();
total=0;
loadPrices(AutoEcon.plugin());
return sellPrices.get(id).getPrice();
}

另一个解决方案可能是在我从中获取文件的 FilePool 类中创建一个数组,其中包含这三个配置文件,或者创建一个将它们放入数组并通过数组发送的方法。然而,后者只是将问题转移到另一个类,而前者仍然创建一个并非完全必要的单个数组。这两种解决方案只是将问题从一个类别转移到另一个类别。

public class FilePool {

private Config config;
private Prices prices;
private Intangibles i;
private Groups groups;
private Logs econLogs;
private ItemAliases a;

public FilePool(AutoEcon pl) {
config = new Config(pl);
prices = new Prices(pl);
i = new Intangibles(pl);
econLogs = new Logs(pl);
a = new ItemAliases(pl);
new ReadMe(pl);
}

public Config getConfig() {
return config;
}

public Prices getPrices() {
return prices;
}

public Groups getGroups() {
return groups;
}

public Intangibles getIntangibles() {
return i;
}

public Logs getLogs() {
return econLogs;
}

public ItemAliases getAliases() {
return a;
}

}

(忽略 FilePool 类中的愚蠢变量名称,我只是喜欢它们都排列得如此完美。将在发布之前适当命名)我知道我对这个根本不会影响正在运行的程序的小事情有点过分了,但是在过去我的同事不断地骚扰我的代码的每个小细节之后,我已经成长为有点完美主义者。

感谢所有花时间阅读本文的人。 <3

最佳答案

数组的创建没有问题。创建数组的资源是没有意义的。更重要的问题是,任何阅读您代码的人都将很难理解魔术索引所代表的含义,而不需要返回数组。这意味着您应该将它们转换为命名常量,这将使您的代码进一步复杂化。

更好的是拥有清晰的变量名称来表示每个元素所代表的内容。迭代 map 也是一个好主意,这样您就可以避免获取每个项目的值:

FilePool files = AutoEcon.files();
final MFilePrices prices = files.getPrices();
final MFilePrices intangibles = files.getIntangibles();
final MFilePrices groups = files.getGroups();
sellPrices.forEach((price, value) -> {
if (EconItem.fromString(price) != null) {
setPriceAndBuyRate(prices, price, value);
} else if (intangibles.getLabels().contains(price)) {
setPriceAndBuyRate(intangibles, price, value);
} else if (groups.getLabels().contains(price)) {
setPriceAndBuyRate(groups, price, value);
}
});

private void setPriceAndBuyRate(MFilePrices filePrices, Price price, Value value) {
filePrices.setPrice(price, value.getExpression());
filePrices.setBuyRate(price, value.getBuyRate());
}

如果您担心变量的数量使该方法难以阅读,则将用于将价格与标签进行比较以及将价格和购买率设置为单独的类的逻辑移动。无论如何,这都是一个很好的做法,因为它给了类(class)一个改变的理由。

关于java - 使用数组来最小化变量的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47066051/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com