java 卫语句_Java规约-卫语句(guard clauses)

本文介绍了Java编程中的卫语句概念,强调将复杂的条件逻辑转化为多个简单的if语句,以提高代码可读性和维护性。卫语句主要用于处理不常见的情况,通过提前返回或抛出异常来简化函数的执行路径。文章提供了重构示例,展示如何将嵌套的if-else结构转换为卫语句,以增强代码的清晰度。

Java规约-卫语句(guard clauses)

 2017-9-29 /

 0评 /

 码

46.html移动设备上继续阅读

首先说一下“卫语句”是什么东东?

卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if-then-else语句,

转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句.

其实几行简单的代码说明一下:

if(obj != null){

doSomething();

}

转换成卫语句以后的代码如下:

if(obj == null){

return;

}

doSomething();

其他地方使用时:

一.使用卫语句取代嵌套表达式

函数中的条件逻辑使人难以看清正常的执行途径。使用卫语句表现所有特殊情况。

动机:条件表达式通常有2种表现形式。

第一:所有分支都属于正常行为。

第二:条件表达式提供的答案中只有一种是正常行为,其他都是不常见的情况。

这2类条件表达式有不同的用途。如果2条分支都是正常行为,就应该使用形如if-else的条件表达式;

如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回。这种单独检查也称“卫语句”。

Replace Nested Conditional with Guard Clauses (以卫语句取代嵌套条件表达式)的精髓是:

给某个分支以特别的重视。它告诉阅读者:这种情况很罕见,如果它真的发生了,请做一些必要的整理工作,然后退出。

“每个函数只能有一个入口和一个出口”的观念,根深蒂固于某些程序员的脑海里。现今的编程语言都会强制保证每个函数只

有一个入口,至于“单一出口”规则,其实不是那么有用。保持代码清晰才是最关键的:如果单一出口能使这个函数更清晰易

读,那么就使用单一出口;否则就不必这么做。

做法:1、对于每个检查,放进一个卫语句。卫语句要不就从函数返回,要不就抛出一个异常。

2、每次将条件检查替换成卫语句后,编译并测试。如果所有卫语句都导致相同的结果,请使用 Consolidate Conditional

Expression(合并条件表达式)。

二.卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if-then-else语句,

转换为多个if语句,处理它的逻辑,这多条的if语句就是卫语句.

三.有时候条件式可能出现在嵌套n次才能真正执行,其他分支只是简单报错返回的情况,对于这种情况,应该单独检查报错

返回的分支,当条件为真时立即返回,这样的单独检查也是卫语句(guard clauses)。卫语句可以把我们的视线从异常

处理中解放出来,集中精力到正常处理的代码中。

void getIsWorkDay()  {

if(IsWorkDay())  {

printf("Error,is work day");

}else {

if(IsWorkTime())  {

printf("Error ,is work time");

}else {

rest();

}

}

}

使用卫语句替换以后:

void getIsWorkDay() {

if(IsWorkDay()) {

printf("Error,is work day");

return;

}

if(IsWorkTime())  {

printf("Error,is work time");

return;

}

rest();

}

本文共计 2311 字,感谢您的耐心浏览与评论。

你说错了6.0和6.3的序列顺序应该是这样的:6.0pass: 222 1 Simple Register Coalescing histogram_even-llc-after-all-60_out/000222_0001_Simple Register Coalescing.after.ll 223 1 Rename Disconnected Subregister Components histogram_even-llc-after-all-60_out/000223_0001_Rename Disconnected Subregister Components.after.ll 224 1 AMDGPU Pre-RA optimizations histogram_even-llc-after-all-60_out/000224_0001_AMDGPU Pre-RA optimizations.after.ll 225 1 Machine Instruction Scheduler histogram_even-llc-after-all-60_out/000225_0001_Machine Instruction Scheduler.after.ll 226 1 SI Whole Quad Mode histogram_even-llc-after-all-60_out/000226_0001_SI Whole Quad Mode.after.ll 227 1 Virtual Register Map histogram_even-llc-after-all-60_out/000227_0001_Virtual Register Map.after.ll 228 1 Live Register Matrix histogram_even-llc-after-all-60_out/000228_0001_Live Register Matrix.after.ll 229 1 SI Pre-allocate WWM Registers histogram_even-llc-after-all-60_out/000229_0001_SI Pre-allocate WWM Registers.after.ll 230 1 SI optimize exec mask operations pre-RA histogram_even-llc-after-all-60_out/000230_0001_SI optimize exec mask operations pre-RA.after.ll 6.3pass: 223 1 AMDGPU Pre-RA optimizations histogram_even-llc-after-all-63_out/000223_0001_AMDGPU Pre-RA optimizations.after.ll 224 1 Machine Instruction Scheduler histogram_even-llc-after-all-63_out/000224_0001_Machine Instruction Scheduler.after.ll 225 1 SI Whole Quad Mode histogram_even-llc-after-all-63_out/000225_0001_SI Whole Quad Mode.after.ll 226 1 SI optimize exec mask operations pre-RA histogram_even-llc-after-all-63_out/000226_0001_SI optimize exec mask operations pre-RA.after.ll 227 1 SI Form memory clauses histogram_even-llc-after-all-63_out/000227_0001_SI Form memory clauses.after.ll 228 1 AMDGPU Pre-RA Long Branch Reg histogram_even-llc-after-all-63_out/000228_0001_AMDGPU Pre-RA Long Branch Reg.after.ll 229 1 Debug Variable Analysis histogram_even-llc-after-all-63_out/000229_0001_Debug Variable Analysis.after.ll 230 1 Live Stack Slot Analysis histogram_even-llc-after-all-63_out/000230_0001_Live Stack Slot Analysis.after.ll 231 1 Virtual Register Map histogram_even-llc-after-all-63_out/000231_0001_Virtual Register Map.after.ll 232 1 Live Register Matrix histogram_even-llc-after-all-63_out/000232_0001_Live Register Matrix.after.ll 233 1 Greedy Register Allocator histogram_even-llc-after-all-63_out/000233_0001_Greedy Register Allocator.after.ll 234 1 Virtual Register Rewriter histogram_even-llc-after-all-63_out/000234_0001_Virtual Register Rewriter.after.ll 235 1 SI lower SGPR spill instructions histogram_even-llc-after-all-63_out/000235_0001_SI lower SGPR spill instructions.after.ll 236 2 Virtual Register Map histogram_even-llc-after-all-63_out/000236_0002_Virtual Register Map.after.ll 237 2 Live Register Matrix histogram_even-llc-after-all-63_out/000237_0002_Live Register Matrix.after.ll 238 1 SI Pre-allocate WWM Registers histogram_even-llc-after-all-63_out/000238_0001_SI Pre-allocate WWM Registers.after.ll 239 2 Greedy Register Allocator histogram_even-llc-after-all-63_out/000239_0002_Greedy Register Allocator.after.ll 240 1 SI Lower WWM Copies histogram_even-llc-after-all-63_out/000240_0001_SI Lower WWM Copies.after.ll 241 2 Virtual Register Rewriter histogram_even-llc-after-all-63_out/000241_0002_Virtual Register Rewriter.after.ll 242 1 AMDGPU Reserve WWM Registers histogram_even-llc-after-all-63_out/000242_0001_AMDGPU Reserve WWM Registers.after.ll重新分析为什么6.3保留了,6.0没有保留
最新发布
09-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值