如果我有一个函数,它执行一些过程,然后需要返回某个值的真值,那么是否有一个令人信服的理由使用int或bool作为返回类型?
int
bool
bool Foo() { // ... } // vs. int Foo() { // ... }
字符串这两个功能之间有什么明显的区别吗?它们都有哪些潜在的缺陷和优点?
wf82jlnq1#
如果它是一个真正的真值,那么你应该使用一个bool,因为它可以让调用者非常清楚地知道将返回什么。当返回一个int时,它可以被视为一个code/enum类型的值。无论是函数名、参数名和类型,还是返回代码的类型,代码都应该尽可能清晰明了。这提供了更多的自文档化代码,更容易维护的代码,以及更低的可能性,有人会误解你的“意思”。
5rgfhyps2#
有一点在现有的答案中没有得到足够的强调:当然可以使用bool,但是为了获得最大的好处,你必须为你的bool变量和函数使用好的名字。我提到这个是因为truthValue是一个典型的糟糕的名字。你的bool名字应该总是让你使用的约定很明显。不要让其他编码人员猜测bool变量的工作方式。所以;好名字
bool okay; bool error; bool success; bool IsWidget();
字符串恶名市场
bool truthValue; bool status; bool result; bool Widget();
型你看到区别了吗?诚然,你的truthValue比status或result更好,但基本上,坏的名字会让代码混乱;
// Bad bool result = Func(); if( result ) { // Did Func() succeed or fail ? who knows } // Good bool okay = Func(); if( okay ) { // Func() succeeded }
型
alen0pnh3#
如果你想返回一个二进制真值,那么你应该在可用的地方使用布尔数据类型。如果需要的话,开发人员会进行优化,你应该尽可能多地编写代码,这样,你或你的继任者就可以毫无疑问地在五年内完成预期的目标。
uz75evzq4#
使用bool--它更清楚地传达了代码的语义。如果另一个开发人员读了你的代码,看到返回类型为bool,他会立即理解它返回了一个真值。如果他看到它返回了一个int,他不得不进一步挖掘并花费更多的时间来弄清楚函数的接口(例如,阅读文档或阅读代码),这会减慢他的速度。使用int的唯一原因是,如果你需要与遗留代码接口和/或符合特定的接口(例如,你的函数获取其地址并传递给第三方库,该库需要某个原型的函数)。
nnt7mjpx5#
使用bool的最大优势是语义。如果我看到一个返回bool的函数,我知道它只会返回true或false,甚至不用看或想太多关于函数的名称。如果它返回一个int,我必须更努力地思考,仔细观察函数。当你使用它的时候(也就是说,使用bool作为返回值),也要用一种方式来命名你的bool返回函数,这种方式使得true和false作为返回值的含义变得明显。
6bc51xsx6#
有几个注意事项:如果Foo是可以从C调用的,那么你不能返回bool,因为C不知道bool是什么。int也可以返回true或false以外的值。这是好事还是坏事取决于Foo是否可以有其他有意义的返回值。然而,如果可以,Foo返回enum值而不是int可能更有意义。如果你不需要与C兼容,我建议你使用bool。
Foo
true
false
enum
ftf50wuq7#
Re:陷阱。int-as-bool的问题是当人们这样做的时候(有点做作,但你明白了):
typedef int BOOL #define TRUE 1 #define FALSE 0 BOOL FDoSomething() { // code code code return numTimesIDidSomething; } void Func() { // code code code if(FDoSomething() == TRUE) // ERROR! { //etc } }
字符串如果numTimesIDidSomething大于1,这是一个错误。这导致两件事,1.要求您使用奇怪的构造(如!!boolVariable)将所有ints-as-bool“规范化”为TRUE
oo7oh9g98#
bool过去只是一个宏.现在编译器强制它只有0或1的值(除非它未初始化)。我肯定会使用bool -它是自文档化的,除了bool你不需要任何东西。保持简单,具体。
uidvcgyl9#
如果truthValue是bool,则返回bool。这可以防止类型强制(没什么大不了的)。另一个原因是传统上返回一个int来报告状态,其中0表示成功,非零数字表示错误条件。因此,从调用者的Angular 来看,以下内容可能是不直观的:
int process() { bool success = false if (the process was successful) success = trrue; return success; };
字符串按照惯例,它应该是
bool process() { bool success = false if (the process was successful) success = true; return success; }
型所以main是:
int main() { return process() ? EXIT_SUCCESS : EXIT_FAILURE; }
型或
int process() { int result = EXIT_FAILURE if (the process was successful) result = EXIT_SUCCESS return result; };
int main() { return process(); }
9条答案
按热度按时间wf82jlnq1#
如果它是一个真正的真值,那么你应该使用一个bool,因为它可以让调用者非常清楚地知道将返回什么。当返回一个int时,它可以被视为一个code/enum类型的值。
无论是函数名、参数名和类型,还是返回代码的类型,代码都应该尽可能清晰明了。这提供了更多的自文档化代码,更容易维护的代码,以及更低的可能性,有人会误解你的“意思”。
5rgfhyps2#
有一点在现有的答案中没有得到足够的强调:当然可以使用bool,但是为了获得最大的好处,你必须为你的bool变量和函数使用好的名字。我提到这个是因为truthValue是一个典型的糟糕的名字。你的bool名字应该总是让你使用的约定很明显。不要让其他编码人员猜测bool变量的工作方式。所以;
好名字
字符串
恶名市场
型
你看到区别了吗?诚然,你的truthValue比status或result更好,但基本上,坏的名字会让代码混乱;
型
alen0pnh3#
如果你想返回一个二进制真值,那么你应该在可用的地方使用布尔数据类型。
如果需要的话,开发人员会进行优化,你应该尽可能多地编写代码,这样,你或你的继任者就可以毫无疑问地在五年内完成预期的目标。
uz75evzq4#
使用
bool
--它更清楚地传达了代码的语义。如果另一个开发人员读了你的代码,看到返回类型为bool
,他会立即理解它返回了一个真值。如果他看到它返回了一个int
,他不得不进一步挖掘并花费更多的时间来弄清楚函数的接口(例如,阅读文档或阅读代码),这会减慢他的速度。使用
int
的唯一原因是,如果你需要与遗留代码接口和/或符合特定的接口(例如,你的函数获取其地址并传递给第三方库,该库需要某个原型的函数)。nnt7mjpx5#
使用bool的最大优势是语义。如果我看到一个返回bool的函数,我知道它只会返回true或false,甚至不用看或想太多关于函数的名称。如果它返回一个int,我必须更努力地思考,仔细观察函数。
当你使用它的时候(也就是说,使用bool作为返回值),也要用一种方式来命名你的bool返回函数,这种方式使得true和false作为返回值的含义变得明显。
6bc51xsx6#
有几个注意事项:如果
Foo
是可以从C调用的,那么你不能返回bool
,因为C不知道bool
是什么。int
也可以返回true
或false
以外的值。这是好事还是坏事取决于Foo
是否可以有其他有意义的返回值。然而,如果可以,Foo返回enum
值而不是int
可能更有意义。如果你不需要与C兼容,我建议你使用
bool
。ftf50wuq7#
Re:陷阱。int-as-bool的问题是当人们这样做的时候(有点做作,但你明白了):
字符串
如果numTimesIDidSomething大于1,这是一个错误。
这导致两件事,
1.要求您使用奇怪的构造(如!!boolVariable)将所有ints-as-bool“规范化”为TRUE
使用bool。
oo7oh9g98#
bool过去只是一个宏.现在编译器强制它只有0或1的值(除非它未初始化)。我肯定会使用bool -它是自文档化的,除了bool你不需要任何东西。保持简单,具体。
uidvcgyl9#
如果truthValue是bool,则返回bool。
这可以防止类型强制(没什么大不了的)。
另一个原因是传统上返回一个int来报告状态,其中0表示成功,非零数字表示错误条件。因此,从调用者的Angular 来看,以下内容可能是不直观的:
字符串
按照惯例,它应该是
型
所以main是:
型
或
型
所以main是:
型