这是我在大学课堂上一直在思考的一个问题,我需要征服其他人的观点。我进行了搜索,但在编码实践方面找不到与这个问题非常相似的问题。
(示例用Java编写)
当我编写代码时,通常会编写如下方法:
public void myMethod(int one, int two) {
if (one >= two) return;
// do things
if (two != one) return;
// do other things
}
代替编写这样的方法:
public void myMethod(int one, int two) {
if (one < two) {
// do things
if (two != one) {
// do other things
}
}
}
类似地,我将这样编写循环:
for (int i = 0; i < x.length; i++) {
if (x[i].getValue() > 4) continue;
// do things
if (!xConditionTwo) continue;
// do other things
}
而不是这样:
for (int i = 0; i < x.length; i++) {
if (x[i].getValue() <= 4) {
// do things
if (xConditionTwo) {
// do other things
}
}
}
如此处所示,我按顺序查看内容(从顶部到底部),如果那不是我们想要的东西,而我不这样做,那么退出方法/循环对我来说是有意义的不需要else语句。
但是,当我与大学讲师交谈时,他们都同意,如果有人要编写这样的代码,他们将不会被录用,因为该人无法找出不需要使用continue /的算法。返回。
我对所有人的问题是:什么时候可以使用继续/返回来中断呢?为什么这被认为是不好的做法?如何避免在没有else的情况下使用if语句来避免额外的缩进?
答案 0 :(得分:1)
这将是一个主要处理意见的问题,但是对于您的两个示例,我都会像您一样在第一行中使用continue / return,而在另一行中使用if语句。
int ocgToDelete = -1;
List < Object > objects = Lists.newArrayList();
pdPage = doc.getDocumentCatalog().getPages().get(0);
PDResources resources = pdPage.getResources();
PDFStreamParser parser = new PDFStreamParser(pdPage);
parser.parse();
objects = parser.getTokens();
int index = -1;
/* Looping through Tokens */
for (Object obj: objects) {
index++;
if (obj instanceof COSName) {
PDPropertyList prop = resources
.getProperties((COSName) obj);
if (prop != null &&
prop instanceof PDOptionalContentGroup) {
String ocgName = ((PDOptionalContentGroup) prop)
.getName();
if (StringUtils.equals(ocgName, OCName)) {
/*Found OCG to Delete */
ocgToDelete = index;
break;
}
}
}
}
/*Generating New Tokens */
List < Object > newTokens = Lists.newArrayList();
for (int i = 0; i < pdParser.getTokens().size(); i++) {
/*Skipping this token */
if (i == ocgToDelete) {
continue;
}
newTokens.add(pdParser.getTokens().get(i));
}
/*Updating page contents */
ByteArrayOutputStream pdfOutStream = new ByteArrayOutputStream();
PDStream newContents = new PDStream(doc);
OutputStream output = newContents
.createOutputStream();
ContentStreamWriter writer = new ContentStreamWriter(output);
writer.writeTokens(newTokens);
output.close();
pdPage.setContents(newContents);
doc.save(pdfOutStream);
doc.close();
FileOutputStream out = new FileOutputStream(
new File("test/emitted/OCGResult.pdf"));
out.write(pdfOutStream.toByteArray());
out.close();
对我来说,这样读起来更好,并且可以限制嵌套的if语句