• 为什么我们推荐语义明确的方法使用布尔参数
  • 发布于 2个月前
  • 178 热度
    0 评论
  • 我怕黑
  • 22 粉丝 40 篇博客
  •   
在创建一个方法的时候,有时候会遇见这样的情况,比如 方法 setEnabled ,字面意思是可用,或者启用
public static CheckBoxListExtension setEnabled(this CheckBoxListExtension f)
{
   ...
   return f;
}
但是往往会加一个参数 bool 来判断 是否启用
public static CheckBoxListExtension setEnabled(this CheckBoxListExtension f,bool isEnabled)
{
   if(isEnabled)
   {
       ...
   }
   return f;
}
这里我一直以为是多此一举,既然 setEnabled 本身就是设置启用,那为什么还要传一个bool呢,在调用时 checkbox1.setEnabled(false);并没有什么意义,如果传false,我直接把这行注释掉就可以了,即使 需要判断 那我写成:
if(isEnabled) checkbox1.setEnabled();
也可以,难道就为了省下一个 if 么?

其实就是为了省一个if !其实这里的使用场景就是满足 链式调用(瀑布式调用) 或者高大上叫 FluentAPI 设计模式 ,
像这样:
checkbox1.setText("").setEnabled().setValue("").SelectOnly();
这时如果setEnabled没有接参 而需要if判断时,代码就断开了:
checkbox1.setText("");
if(isEnabled) checkbox1.setEnabled()
checkbox1.setValue("");
if(isSelectOnly) checkbox1.SelectOnly();
为了提高可读性可维护性 所以使用接参的写法:
checkbox1.setText("").setEnabled(isEnabled).setValue("").SelectOnly(isSelectOnly);
所以大家在写这种自引用方法的时候,应该根据场景增加参数,让方法本身失去意义。
用户评论