2011-07-26 97 views
0

我有以下代码,我的老板要我减少代码行来做这个工作。在这个vb.net代码中可以减少代码行吗?

Private Function getClientSheetNames(Optional ByVal type As String = "all") As List(Of String) 
    If type = "extra" Then 
     Return clientExtraSheetNames 
    End If 
    Dim prev, curr As New List(Of String) 
    For Each name In clientMonthlySheetNames 
     curr.Add(name + " (" + currMonth + ")") 
    Next name 
    If type = "currMonth" Then 
     Return curr 
    End If 
    For i = 1 To clientMonthlySheetNames.Count - 1 
     prev.Add(clientMonthlySheetNames(i) + " (" + prevMonth + ")") 
    Next 
    If type = "prevMonth" Then 
     Return prev 
    End If 
    If type = "monthly" Then 
     Return curr.Union(prev).ToList 
    End If 
    Return clientExtraSheetNames.Union(curr.Union(prev)).ToList 
End Function 

Private Function getDevSheetNames(Optional ByVal type As String = "all") As List(Of String) 
    If type = "extra" Then 
     Return devExtraSheetNames 
    End If 
    Dim sheetNames, prev, curr As New List(Of String) 
    For Each name In devMonthlySheetNames 
     curr.Add(name + " (" + currMonth + ")") 
    Next name 
    If type = "currMonth" Then 
     Return curr 
    End If 
    For Each name In devMonthlySheetNames 
     prev.Add(name + " (" + prevMonth + ")") 
    Next name 
    If type = "prevMonth" Then 
     Return prev 
    End If 
    If type = "monthly" Then 
     Return curr.Union(prev).ToList 
    End If 
    sheetNames.Add(devExtraSheetNames(0)) 
    sheetNames.AddRange(curr.Union(prev).ToList) 
    sheetNames.AddRange(devExtraSheetNames.GetRange(1, devExtraSheetNames.Count - 1)) 
    Return sheetNames 
End Function 

我无法弄清楚如何切割线条并具有相同的功能!

是否有任何vb.net构造可以通过更好的实现来减少loc?

我可以从getClientSheetNames和getDevSheetNames调用一个新的函数来实现代码resue吗?

我可以在可能的新函数中引入多态吗?

任何性能改进都非常值得欢迎!

请帮忙!!

+0

“我的雇主希望我减少代码以完成这项工作。” - 为什么? –

+0

嗯,我不知道!他认为我做了一个非常糟糕的实现,所以如果我减少LOC,我会改进逻辑。 –

+0

改善逻辑与减少代码行数有些不同(也是更重要的)要求(尽管有时是相关的) –

回答

4

函数应该做一件事。这两个功能都执行五个独立的,不相关的任务。画一个流程图,你会看到你几乎结束了五个不同的功能。因此将每个功能分成五个单独的功能。

Function getAllClientSheetNames() As List(Of String) 
Function getExtraClientSheetNames() As List(Of String) 
Function getCurrentMonthClientSheetNames() As List(Of String) 
Function getPreviousMonthClientSheetNames() As List(Of String) 
Function getMonthlyClientSheetNames() As List(Of String) 

他们关联最深的是,getAll~包括getCurrentMonth~getPreviousMonth~,你可以从getAll~调用。

这会改善逻辑和可读性。它可能(没有gaurantees)甚至减少你的LoC。

+0

那么,我同意..但我想保持它在逻辑上1功能获取sheetNames。我不想摆弄3-4个功能来获取我的sheetNames。保持它们在1个函数中的目的是逻辑上的1个实体! –

+1

我看不到你的逻辑。你的一个功能不会做一件事,它会做几件独立的事情。通过将它保存在一个函数中,如果它们是单独的,那么更容易对代码更改造成损害。 –

+1

如果类型是“prevMonth”,你会运行什么代码?我认为你花时间建立你不使用的curr数组。我同意@Hand。您的代码不清晰且效率低下。不要害怕单独的功能,如果你的名字很好,它们确实有帮助。 – djna