[英]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()
,則簡單地返回一個隨機值(因為“違反前提會導致未定義的行為”)。
找不到名稱時引發異常。
為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.