最佳实践:当 datetime 为空或 null 时自 datetime 以来的秒数
Best Practice : Seconds Since datetime when datetime is empty or null
我觉得这个问题与语言无关,但我将使用 PHP 作为示例
abstract class myUserClass {
private $last_visit = null;
abstract getLastVisit() ?string;
abstract secondsSinceLastVisit() int;
}
假设你有一些日期时间(比如 last_visit)属性 对象
last_visit
= 2020-10-10 09:25:25
last_visit
可以是日期时间的字符串表示形式或 null
用户从未访问过
然后你有一个像 secondsSinceLastVisit() : int
这样的方法
而这个函数return是一个int
,表示自last_visit
以来的秒数
当 last_visit
为空时 returning 的最佳实践是什么?
我们可以:
return null
这意味着这是未定义的
Return some_really_large_number
意思是很久以前
还有别的吗???
我 运行 在做这件事时遇到了麻烦
if( !$user->secondsSinceLastVisit() )
{
//user has never visited
}
当 secondsSinceLastVisit()
return 为零时,这在某些单元测试期间失败了! 0
所以,我通过测试更改为 is_null( $user->secondsSinceLastVisit() )
解决了这个问题
我的问题是一般性问题 - 当 last_visit
为 null 时,secondsSinceLastVisit()
的 return 值有什么好的做法?
确实有 2 个不错的选择:
- Return
null
。 null
通常是 stand-in 表示没有值,所以这在这里很有意义。
- 抛出异常
我觉得哪个都可以,但是你选择哪个取决于问题的答案:
“当用户尚未访问时有人为用户调用 secondsSinceLastVisit()
是否是错误?”
我觉得这个问题与语言无关,但我将使用 PHP 作为示例
abstract class myUserClass {
private $last_visit = null;
abstract getLastVisit() ?string;
abstract secondsSinceLastVisit() int;
}
假设你有一些日期时间(比如 last_visit)属性 对象
last_visit
= 2020-10-10 09:25:25
last_visit
可以是日期时间的字符串表示形式或 null
用户从未访问过
然后你有一个像 secondsSinceLastVisit() : int
而这个函数return是一个int
,表示自last_visit
当 last_visit
为空时 returning 的最佳实践是什么?
我们可以:
return null
这意味着这是未定义的
Return some_really_large_number
意思是很久以前
还有别的吗???
我 运行 在做这件事时遇到了麻烦
if( !$user->secondsSinceLastVisit() )
{
//user has never visited
}
当 secondsSinceLastVisit()
return 为零时,这在某些单元测试期间失败了! 0
所以,我通过测试更改为 is_null( $user->secondsSinceLastVisit() )
解决了这个问题
我的问题是一般性问题 - 当 last_visit
为 null 时,secondsSinceLastVisit()
的 return 值有什么好的做法?
确实有 2 个不错的选择:
- Return
null
。null
通常是 stand-in 表示没有值,所以这在这里很有意义。 - 抛出异常
我觉得哪个都可以,但是你选择哪个取决于问题的答案:
“当用户尚未访问时有人为用户调用 secondsSinceLastVisit()
是否是错误?”