改进 VB.NET URL 缩短器的建议?
Posted
技术标签:
【中文标题】改进 VB.NET URL 缩短器的建议?【英文标题】:Suggestions to improve VB.NET URL shortener? 【发布时间】:2010-09-18 15:38:21 【问题描述】:这是我的功能(更新):
Public Shared Function shortenUrl(ByVal URL As String) As String
Return shortenUrl(URL, 32)
End Function
Public Shared Function shortenUrl(ByVal URL As String, ByVal maxLength As Integer) As String
If URL.Length > maxLength Then
String.Format("0...1", URL.Substring(0, (maxLength / 2)), URL.Substring(URL.Length - ((maxLength / 2) - 3)))
Else
Return URL
End If
End Function
我修复了它没有返回 maxLength
字符的问题,因为它没有考虑到省略号。
在我看来它太复杂了;任何建议、cmets 和关注都非常受欢迎。
【问题讨论】:
【参考方案1】:嗯,我不知道是不是太复杂了……但这是错误的。如果我调用 shortUrl(URL, 29) 我希望返回的最大长度为 29 个字符。你的代码会给我 31。如果我用 30 的长度调用它,我会得到 33 个字符。您不包括插入的“...”,而是依靠舍入来获取子字符串长度并删除余数。
我会添加一些参数验证,并将其更改为:
Public Function shortenUrl2(ByVal URL As String, ByVal maxLength As Integer) As String
Const middle as String = "..."
If maxLength < 0 Then
Throw New ArgumentOutOfRangeException("maxLength", "must be greater than or equal to 0")
ElseIf String.IsNullOrEmpty(URL) OrElse URL.Length <= maxLength Then
Return URL
ElseIf maxLength < middle.Length Then
Return URL.Substring(0, maxLength)
End If
Dim left as String = URL.Substring(0, CType(Math.Floor(maxLength / 2), Integer))
Dim right as String = URL.Substring(URL.Length - (maxLength - left.Length - middle.Length))
Return left & middle & right
End Function
【讨论】:
【参考方案2】:Public Shared Function shortenUrl(ByVal URL As String, Optional ByVal maxLength As Integer = 29) As String
If URL.Length > maxLength Then
Return String.Format("0...1", URL.Substring(0, maxLength / 2), URL.Substring(URL.Length - (maxLength / 2)))
Else
Return URL
End If
End Function
不知道为什么人们如此讨厌可选参数。他们做完全相同的事情并且向用户公开如果他们不提供默认值将是什么值。
【讨论】:
其他语言的支持通常是主要原因,不同的方法签名,更常见。 另外,如果你重载(这是技术术语)一个函数而不是函数本身,你可以预处理输入。更清晰的代码 IMO 我想,但仍然需要编写和维护更多代码,以实现在少数潜在情况下的切实利益。 CLR 不支持可选参数。如果您尝试编写符合 CLS 的代码,则不能编写具有可选参数的代码。 安德斯我不确定你的意思。除非您需要做的不仅仅是简单地使用您喜欢的默认值调用多态,否则可选参数会做同样的事情。如果您确实需要做更多的事情,那么是的,当然重载函数是要走的路。【参考方案3】:为什么不这样做?
Public Shared Function shortenUrl(ByVal URL As String) As String
Return shortenUrl(URL, 29)
End Function
Public Shared Function shortenUrl(ByVal URL As String, ByVal maxLength As Integer) As String
If URL.Length > maxLength Then
Return String.Format("0...1", URL.Substring(0, maxLength / 2),URL.Substring(URL.Length - (maxLength / 2)))
Else
Return URL
End If
End Function
这至少摆脱了所有的临时声明
【讨论】:
这就是为什么它看起来过于复杂,谢谢!我把它归咎于大脑疲劳! 它发生了!尤其是在做了一段时间的项目之后!以上是关于改进 VB.NET URL 缩短器的建议?的主要内容,如果未能解决你的问题,请参考以下文章