如果在字符串返回方法中找不到字符串,则返回替代值
本文关键字:字符串 返回 方法 如果 找不到 | 更新日期: 2023-09-27 18:24:38
我有一个返回字符串的方法。在正常操作条件下,可能会返回空白字符串或null。但是,从这种方法返回null
或""
是一种好的编码实践吗?
是的,在这种情况下,我更喜欢返回null
来显示未找到字符串。空字符串通常用于显示空结果。
另一种方法是抛出一些Exception
,但作为程序员,我觉得不适合处理Exceptions。返回null
是好多了。
null
和空字符串之间存在语义差异。一个说"它不是为该输入定义的",另一个则说"该输入的正确值是空字符串"。
想象一下,您已经为C的一个子集编写了一个编译器,该编译器允许main
-函数不返回任何结果。编译器返回一个带有某种幻想汇编语言的字符串。
// Testcode 0
void main() {
为此,您将返回null
,因为缺少大括号,所以代码的格式不正确(不,不要抛出异常,用户编写的代码中会出现错误)。没有有效的输出。
// Testcode 1
void main() { printf("hello!"); }
为此,您将返回"push 'hello!''ncall printf"
// Testcode 2
void main() {}
为此,您可能会返回""
,该代码不执行任何操作,也不返回任何内容,但它是有效的。
这取决于方法的用途,如果您有一个方法string GetCustomerName(int custId)
,您宁愿在客户不存在时抛出异常,而不是返回null
。另一方面,如果有一个方法将字符串的第一个字母改为大写,并且您在输入中提供了null
,则返回null
是可以接受的。
是的,我认为是的(如果您希望从方法中得到字符串结果),但如果不是(例如错误/警告),我会考虑在方法中抛出异常的替代方案。在这种情况下,我通常使用这种方法,而不是返回字符串。
例如
try
{
Validate();
}
catch(NotValidException ex)
{
// Report
}
如果没有在这里捕捉到异常,则会出现,并且与忘记检查Validate方法的返回值相比,更少静默。
值null
通常用于"没有字符串"(某个地方"没有找到"字符串),或者简单地说,不适用任何字符串。空字符串通常用于有字符串的情况,但它实际上是空的。
例如,如果您在StackOverflow中搜索某个用户的配置文件描述,如果用户没有输入任何配置文件说明,则空字符串将是正确的结果;以及CCD_ 16。