我目前正在做一项大学作业,我知道设计对于评分标准至关重要。
目标基本上是读取文本文件并返回每个单词出现的次数。有一些小的要求,包括实现一个二叉树(属于单词类,它有一个单词的字符串和它出现的次数)和文本文件中的单词总数的计数。
当我填满树时,我可以统计我读过的单词数。我的方法 fillTree 可以返回文件中的单词数,而无需再次遍历它,但显然方法名称与它根本不相关,我们被教导一个方法应该只做一件事。将这两个过程分开还是保持原样更好?或者我是否需要完全重新考虑我的整个方法?
请耐心等待,因为这是我关于 SO 的第一个问题。谢谢!
最佳答案
优雅与性能之间常常存在张力。
假设您有一个函数 std::map<std::string, size_t> computeStatistics(std::istream& input)
它解析输入流并计算每个单词的出现次数,将它们存储到 map
中.
然后你可以实现:
-
size_t countOccurrencesOfWord(std::string const& word, std::istream& input)
,作为解析然后查看 map 。 -
size_t countWords(std::istream& input)
,作为解析然后总结计数。
每个方法都有单一职责,但有很多重复工作。我建议公开中间步骤:
class FileStatistics;
FileStatistics computeStatistics(std::istream& input);
并且这个类可以暴露简单的方法:
size_t FileStatistics::getOccurrencesOfWord(std::string const& word) const;
size_t FileStatistics::getTotalNumberOfWords() const;
在内部,您可以选择它的结构。我的建议是 std::map<std::string, size_t>
对于事件和只是一个 size_t
总计。
关于c++ - 使用一种方法可以返回与方法目标无关的值或相应命名的两个单独方法更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579293/