iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
Software Development

程式淨化計畫:痛苦是重構的起源!系列 第 13

Replace Exception with Test 的重構

  • 分享至 

  • xImage
  •  

Replace Exception with Test

簡介

假如有段邏輯, 只需要做個簡單的測試(判斷)即可完成功能, 但卻有例外狀況的處理.

重構前範例

假如有個函數, 需要從List<double> _studentScores學生列表裡取得指定學生的分數:

class Course
{
    private List<double> _studentScores;
    private double GetScoreForOneStudent(int studentIndex)
    {
        try
        {
            return _studentScores[studentIndex];
        }
        catch(ArgumentOutOfRangeException)
        {
            return 0;
        }
    }
}

重構後範例

把例外狀況的處理, 改成條件測試:

class Course
{
    private List<double> _studentScores;
    private double GetScoreForOneStudent(int studentIndex)
    {
        if(studentIndex >= _studentScores.Count)
        {
            return 0;
        }

        return _studentScores[studentIndex];
    }
}

為何要重構

  1. 例外狀況處理該用來handle非預期錯誤的非正規行為. 這些例外狀況處理不單單以條件測試來取代.
  2. 但如果例外狀況能在執行前, 用個簡單的條件測試來避免, 就該這麼做.

比喻

想像今天要去遊樂園玩, 有個世界數一數二刺激的雲霄飛車, 於是你很高興地坐上去玩.
但不幸的是, 坐到中途而你的心臟病復發, 昏倒在飛車上.
這種例外狀況發生有被安全處理, 由遊樂園的員工帶你去醫療團隊就診.

回過頭想想, 是不是在搭乘雲霄飛車前, 閱讀搭乘限制就可以避免?


上一篇
保持邏輯的局部性
下一篇
Replace Error Code with Exception 的重構
系列文
程式淨化計畫:痛苦是重構的起源!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言