如何编写更简洁的 if-else 语句并防止嵌套?
how to write cleaner if-else statements and prevent nesting?
所以我知道嵌套代码很快就会变得丑陋。因此,我查找了一种防止嵌套的方法,发现您可以执行以下操作
if (user == null) return;
console.log('Deleting');
user.delete();
而不是像那样使用大括号
if (user != null) {
console.log('Deleting');
user.delete();
}
但是我看不出这在使用 if-else 语句时有何帮助。例如:我的项目中有这段代码,我真的很想用比那更干净的方式编写。但我正在努力弄清楚如何做到这一点。
if (parseInt(year) == joinTime.getFullYear()) {
if (parseInt(month) == joinTime.getMonth() + 1) {
if (parseInt(day) == joinTime.getDay()) {
channel.send(message);
} else {
comparison(day, hour, minute);
}
} else {
comparison(day, hour, minute);
}
} else {
comparison(day, hour, minute);
}
我不认为删除大括号是处理嵌套 if else 语句时的解决方案。在这种情况下,我会尝试限制使用的语句数量。您可以将此代码转换为:
if(parseInt(year) == joinTime.getFullYear() && parseInt(month) == joinTime.getMonth() + 1 && parseInt(day) == joinTime.getDay()){
channel.send(message);
}
else {
comparison(day, hour, minute);
}
或者您可以使用解析的年、月和日来构造一个日期对象,然后将其与 joinTime 进行比较。
你可以这样写
if (
parseInt(year) == joinTime.getFullYear() &&
parseInt(month) == joinTime.getMonth() + 1 &&
parseInt(day) == joinTime.getDay()
) {
channel.send(message);
} else {
comparison(day, hour, minute);
}
旁观者眼中的风格,但假设您想要更简洁的代码,那么我会做这样的事情:
const yearMatch = (parseInt(year) == joinTime.getFullYear());
const monthMatch = (parseInt(month) == joinTime.getMonth() + 1);
const dayMatch = (parseInt(day) == joinTime.getDay());
if (yearMatch && monthMatch && dayMatch) {
channel.send(message);
} else {
comparison(day, hour, minute);
}
或者,如果您不关心额外的 return
(这不会破坏您的逻辑):
const yearMatch = (parseInt(year) == joinTime.getFullYear());
const monthMatch = (parseInt(month) == joinTime.getMonth() + 1);
const dayMatch = (parseInt(day) == joinTime.getDay());
if (yearMatch && monthMatch && dayMatch) return channel.send(message);
comparison(day, hour, minute);
当然,请根据需要更改变量名称。
所以我知道嵌套代码很快就会变得丑陋。因此,我查找了一种防止嵌套的方法,发现您可以执行以下操作
if (user == null) return;
console.log('Deleting');
user.delete();
而不是像那样使用大括号
if (user != null) {
console.log('Deleting');
user.delete();
}
但是我看不出这在使用 if-else 语句时有何帮助。例如:我的项目中有这段代码,我真的很想用比那更干净的方式编写。但我正在努力弄清楚如何做到这一点。
if (parseInt(year) == joinTime.getFullYear()) {
if (parseInt(month) == joinTime.getMonth() + 1) {
if (parseInt(day) == joinTime.getDay()) {
channel.send(message);
} else {
comparison(day, hour, minute);
}
} else {
comparison(day, hour, minute);
}
} else {
comparison(day, hour, minute);
}
我不认为删除大括号是处理嵌套 if else 语句时的解决方案。在这种情况下,我会尝试限制使用的语句数量。您可以将此代码转换为:
if(parseInt(year) == joinTime.getFullYear() && parseInt(month) == joinTime.getMonth() + 1 && parseInt(day) == joinTime.getDay()){
channel.send(message);
}
else {
comparison(day, hour, minute);
}
或者您可以使用解析的年、月和日来构造一个日期对象,然后将其与 joinTime 进行比较。
你可以这样写
if (
parseInt(year) == joinTime.getFullYear() &&
parseInt(month) == joinTime.getMonth() + 1 &&
parseInt(day) == joinTime.getDay()
) {
channel.send(message);
} else {
comparison(day, hour, minute);
}
旁观者眼中的风格,但假设您想要更简洁的代码,那么我会做这样的事情:
const yearMatch = (parseInt(year) == joinTime.getFullYear());
const monthMatch = (parseInt(month) == joinTime.getMonth() + 1);
const dayMatch = (parseInt(day) == joinTime.getDay());
if (yearMatch && monthMatch && dayMatch) {
channel.send(message);
} else {
comparison(day, hour, minute);
}
或者,如果您不关心额外的 return
(这不会破坏您的逻辑):
const yearMatch = (parseInt(year) == joinTime.getFullYear());
const monthMatch = (parseInt(month) == joinTime.getMonth() + 1);
const dayMatch = (parseInt(day) == joinTime.getDay());
if (yearMatch && monthMatch && dayMatch) return channel.send(message);
comparison(day, hour, minute);
当然,请根据需要更改变量名称。