Code Fragment-对于if语句中的boolean值分开判断的处理。

来源:互联网 发布:杭州网络诈骗判决书 编辑:程序博客网 时间:2024/05/17 21:53

本文参考自《代码整洁之道》,这本书,非常好!

向方法中传入boolean值参数,用于判断逻辑并分开执行。缺点:

  • 方法签名立即变得复杂起来。
  • 此方法做的事情多余一件。

实例:

    /**     * @param isChecked     */    protected void setAllDayViewsVisibility(boolean isChecked) {        if (isChecked) {            if (mEndTime.hour == 0 && mEndTime.minute == 0) {                mEndTime.monthDay--;                long endMillis = mEndTime.normalize(true);                // Do not allow an event to have an end time                // before the                // start time.                if (mEndTime.before(mStartTime)) {                    mEndTime.set(mStartTime);                    endMillis = mEndTime.normalize(true);                }                setDate(mEndDateButton, endMillis);                setTime(mEndTimeButton, endMillis);            }            mStartTimeButton.setVisibility(View.GONE);            mEndTimeButton.setVisibility(View.GONE);            mTimezoneRow.setVisibility(View.GONE);        } else {            if (mEndTime.hour == 0 && mEndTime.minute == 0) {                mEndTime.monthDay++;                long endMillis = mEndTime.normalize(true);                setDate(mEndDateButton, endMillis);                setTime(mEndTimeButton, endMillis);            }            mStartTimeButton.setVisibility(View.VISIBLE);            mEndTimeButton.setVisibility(View.VISIBLE);            mTimezoneRow.setVisibility(View.VISIBLE);        }        updateHomeTime();    }
重构以后,变成2个方法

protected void setAllDayViewsGone() {if (mEndTime.hour == 0 && mEndTime.minute == 0) {mEndTime.monthDay--;long endMillis = mEndTime.normalize(true);// Do not allow an event to have an end time// before the// start time.if (mEndTime.before(mStartTime)) {mEndTime.set(mStartTime);endMillis = mEndTime.normalize(true);}setDate(mEndDateButton, endMillis);setTime(mEndTimeButton, endMillis);}mStartTimeButton.setVisibility(View.GONE);mEndTimeButton.setVisibility(View.GONE);mTimezoneRow.setVisibility(View.GONE);updateHomeTime();}protected void setAllDayViewsVisible() {if (mEndTime.hour == 0 && mEndTime.minute == 0) {mEndTime.monthDay++;long endMillis = mEndTime.normalize(true);setDate(mEndDateButton, endMillis);setTime(mEndTimeButton, endMillis);}mStartTimeButton.setVisibility(View.VISIBLE);mEndTimeButton.setVisibility(View.VISIBLE);mTimezoneRow.setVisibility(View.VISIBLE);updateHomeTime();}