如果在字符串返回方法中找不到字符串,则返回替代值

本文关键字:字符串 返回 方法 如果 找不到 | 更新日期: 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。