Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
改进VB.NET URL缩短器的建议?_Vb.net_Url_Function - Fatal编程技术网

改进VB.NET URL缩短器的建议?

改进VB.NET URL缩短器的建议?,vb.net,url,function,Vb.net,Url,Function,这是我的功能(已更新): 我修复了它没有返回maxLengthchars的问题,因为它没有考虑省略号 在我看来,这太复杂了;欢迎提出任何建议、意见和顾虑。为什么不这样做 Public Shared Function shortenUrl(ByVal URL As String) As String Return shortenUrl(URL, 29) End Function Public Shared Function shortenUrl(ByVal URL As String,

这是我的功能(已更新):

我修复了它没有返回
maxLength
chars的问题,因为它没有考虑省略号


在我看来,这太复杂了;欢迎提出任何建议、意见和顾虑。

为什么不这样做

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
这至少可以消除所有临时声明

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

不知道为什么人们如此讨厌自选论点。他们做了完全相同的事情,并向用户公开了如果他们不提供默认值,默认值是多少。

嗯,我不知道这是否太复杂……但这是错误的。如果我调用shortenUrl(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
公共函数shortenUrl2(ByVal URL作为字符串,ByVal maxLength作为整数)作为字符串
常量中间为字符串=“…”
如果maxLength<0,则
抛出新ArgumentOutOfRangeException(“maxLength”,“必须大于或等于0”)

ElseIf String.IsNullOrEmpty(URL)或Else URL.Length这就是它看起来过于复杂的原因,谢谢!我把这归咎于大脑疲劳!它发生了!尤其是在做了一段时间的项目之后!在其他语言中的支持通常是主要原因,不同的方法签名更为常见。此外,如果您重载(这是技术术语)函数而不是函数本身,则可以预处理输入。我想更干净的代码,但仍有更多的代码需要编写和维护,这在少数潜在情况下只是一个明显的好处。CLR不支持可选参数。如果您试图编写符合CLS的代码,那么就不能编写具有可选参数的代码。除非您需要做的不仅仅是使用您喜欢的默认值调用变形,否则可选参数也会做同样的事情。如果您确实需要做更多的工作,那么是的,当然重载函数是一种方法。
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