在这个重构案例中更好的技术?
The better technique in this refactoring case?
我需要做一些重构(实际上是很多,但这一小步对整个过程非常有帮助)。所以,假设我有这个代码片段:
If xmlDoc.SelectSingleNode("/dang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/dang")
Type = "dang"
ElseIf xmlDoc.SelectSingleNode("/nang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/nang")
Type = "nang"
ElseIf xmlDoc.SelectSingleNode("/lang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/lang")
Type = "lang"
ElseIf xmlDoc.SelectSingleNode("/tang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/tang")
Type = "tang"
ElseIf xmlDoc.SelectSingleNode("/xtang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/xtang")
Type = "xtang"
End If
它在一个大函数的主体中,我想把它拿出来放到一个单独的函数中。所以,我想知道的是,按值传递 universalNode
和 Type
并仅向它们分配值而不需要 return 任何东西是否会更好?这样做效果好还是有风险?
如果我正在处理的只是 Type
,即,那么我只会 return 它,但要更改的变量不止 1 个,而且都是本地变量大函数的变量,我从中取出这个代码片段。
还有其他建议吗?
您可以通过引用(而不是通过值)将变量传递给函数,这不是一个坏习惯并且应该有效:
Public Sub MyFunc(ByRef node As MyNode, ByRef typ As String)
node = ...
typ = ...
End Sub
或者您可以return一些复杂的数据持有者:
Public Class MyParams
Public node As MyNode
Public typ As String
End Class
Public MyParams MyFunc()
Dim result As New MyParams()
result.node = ...
result.typ = ...
Return result
End Sub
我需要做一些重构(实际上是很多,但这一小步对整个过程非常有帮助)。所以,假设我有这个代码片段:
If xmlDoc.SelectSingleNode("/dang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/dang")
Type = "dang"
ElseIf xmlDoc.SelectSingleNode("/nang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/nang")
Type = "nang"
ElseIf xmlDoc.SelectSingleNode("/lang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/lang")
Type = "lang"
ElseIf xmlDoc.SelectSingleNode("/tang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/tang")
Type = "tang"
ElseIf xmlDoc.SelectSingleNode("/xtang") IsNot Nothing Then
universalNode = xmlDoc.SelectSingleNode("/xtang")
Type = "xtang"
End If
它在一个大函数的主体中,我想把它拿出来放到一个单独的函数中。所以,我想知道的是,按值传递 universalNode
和 Type
并仅向它们分配值而不需要 return 任何东西是否会更好?这样做效果好还是有风险?
如果我正在处理的只是 Type
,即,那么我只会 return 它,但要更改的变量不止 1 个,而且都是本地变量大函数的变量,我从中取出这个代码片段。
还有其他建议吗?
您可以通过引用(而不是通过值)将变量传递给函数,这不是一个坏习惯并且应该有效:
Public Sub MyFunc(ByRef node As MyNode, ByRef typ As String)
node = ...
typ = ...
End Sub
或者您可以return一些复杂的数据持有者:
Public Class MyParams
Public node As MyNode
Public typ As String
End Class
Public MyParams MyFunc()
Dim result As New MyParams()
result.node = ...
result.typ = ...
Return result
End Sub