簡體   English   中英

getObjByName()應該返回什么?

[英]What should getObjByName() return?

我正在處理一些這樣的c ++代碼:

//c++ code
class MovieInfo;

MovieInfo getMovieInfoByName(String movieName)
{
    //search the movieInfoList with movieName
    if(FOUND)
        return movieInfo;
    //TODO: **what should i return if the movieInfo can't be found in the list?**
} 

問題是,如果在列表中找不到movieInfo,我應該返回什么?

您有幾種選擇:

  • 定義MovieInfo類,以使“無效”實例成為可能(類似於默認構造的std::thread不代表實際線程)並返回此類實例。

  • 使該名稱對應有效的電影信息成為getMovieInfoByName()的前提, getMovieInfoByName()如果名稱不getMovieInfoByName() ,則簡單地返回一個隨機值(因為“違反前提會導致未定義的行為”)。

  • 找不到名稱時引發異常。

  • 返回類似boost::optional<MovieInfo>

  • getMovieInfoByName()一個MovieInfo類型的額外參數,如果找不到與該名稱匹配的參數,它將用作返回值。

這完全取決於您對功能的預期用途。

這取決於必須滿足的環境和前提條件。 例如,如果您不確定在調用時列表中是否包含這樣的電影,那么這樣做是合理的:

bool getMovieInfoByName(const std::string& movieName, MovieInfo& movieInfo)
{
    ...
    if (FOUND) {
        movieInfo = ...;
        return true;
    }
    return false;
}

因為呼叫者很可能必須知道是否存在帶有此類電影的電影。

如果不應該發生getMovieInfoByName找不到電影的情況,即調用者應該已經通過其他方式知道列表中是否包含這樣的電影,則拋出異常是非常合理的,因為它是特殊狀態,而是指示錯誤此方法的用法。

還有一種稱為Null Object的設計模式,該模式基於構造一個對象,其狀態可以指示它是有效/初始化的對象還是代表NULL的虛擬實例。
在這種情況下,調用方很可能仍然必須檢查是否已返回適當的MovieInfo實例,並且此類應提供諸如bool isValid();類的方法bool isValid();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM