Eiffel:getters 的最佳实践 return 如果找不到对象是否无效?

Eiffel: Best practices with getters return Void if object not found?

Eiffel 的最佳实践是什么return 如果未找到,则从函数中获取对象。我看到许多集合,例如 ARRAY,例如基于先决条件或其他功能的未找到行为。

许多语言在找不到对象时 returning Void(或 null)。在埃菲尔铁塔中,这意味着有一个可拆卸的物体吗?

无政治

item_at_index (index: INTEGER): detachable FOO
    do
        if bar_collection.valid_index(i) then
            Result := bar_collection.item_at(i)
        else
            Result := Void 
        end
    end

从不空政治

item_at_index (index: INTEGER): detachable FOO
    require
        bar_collection.valid_index(i)
    do
        Result := bar_collection.item_at(i)
    end

策略取决于底层结构、业务逻辑等

一个例子是已知元素位于特定索引、键等处。类似数组的结构属于此类。尝试检索数组边界外的元素会被视为错误。因此,有一个前提条件是一个合适的方法。

另一个例子是当不知道一个元素是否存在时。考虑一个 XML DOM 树和一个获取给定名称的所有元素的查询。这些元素是否存在尚无先验知识。因此,一个合理的做法是returnVoid当没有找到匹配的元素时

所以,这不是非黑即白的两难选择,决策应该考虑上下文。