어디서나 사용되는 함수에 새로운 선택적 매개 변수를 추가하면 대규모 프로젝트의 기존 코드가 폭탄을 터질 위험이 있습니까? 대신에 함수에 과부하를 걸고 위험을 최소화 할 수 있지만 실제로는 선택적 매개 변수를 사용하는 것이 위험 할 수 있습니다.VB.NET 함수에 선택적 매개 변수를 추가하여 기존 코드를 위반할 가능성이 있습니까?
다음은 예입니다 :
Public Function GetContent(ByVal URL As String, ByVal ID As String, Optional ByRef PageTitle As String = "") As String
Try
Dim web As New HtmlWeb()
Dim doc As HtmlDocument = web.Load(URL)
ID = "//div[@id='" & ID & "']"
Dim ContentNode As HtmlNode = doc.DocumentNode.SelectSingleNode(ID)
' The two lines below are the mere extent of what's new inside this function, besides the new Optional ByRef parameter in its signature
Dim PageTitleNode As HtmlNode = doc.DocumentNode.SelectSingleNode("//title")
If Not PageTitleNode Is Nothing Then PageTitle = PageTitleNode.InnerHtml
Return ContentNode.InnerHtml
Catch ex As Exception
Return "<h4> Bad. Very bad. </h4>"
End Try
End Function
PS : 나는, 사실 후 내 질문에 대해 언급하고 싶습니다 아래 다른 사람의 응답을 읽은 일부 추가 연구 자신을 수행하는 데. 원래 선택적 매개 변수를 사용하는 접근 방법의 유효성에 대해서는 질문하지 않았습니다. 그게 VB.NET에서 할 수있는 일이었고, 나는 모든 권리가 있음을 느꼈다. 게다가 그것은 매우 편리했다! 그러나 원래의 질문은 컴파일부터 실행까지 선택적 매개 변수가 구현되는 방법에 차이가 있는지 여부와 관련이 있습니다. 코드를 설계 할 때 고려해야 할 차이가 있습니다. 과부하 접근법과 관련하여 선택적 매개 변수 접근법의 역사적 중요성을 알지 못했습니다. 나는 옵션 매개 변수 접근법에 결함이나 결함이있는 것이 아니라는 것을 알게되었다. 오히려 공통 언어 런타임 (Common Language Runtime)의 출현으로 간단하게 재정의 된 여러 다른 관심사에 맞게 고안된 솔루션이었습니다. VS2013을 사용하고 있습니다. 물론 모든 것이 선택적 매개 변수 접근법으로 잘 컴파일되어 실행되는 것처럼 보였습니다. 그러나 선택적 매개 변수를 추가하여 잠재적으로 다른 것을 깨뜨리지 않는지 확인하고 싶었습니다. 특히 누군가가 내 코드를보고 대신 함수 오버로드를 제안했기 때문입니다. . 나는 왜 내가 선택적 매개 변수 방법을 유지하면 안되는 지 증명하고 싶었다. 제임스 소프 (James Thorpe)는 저의 질문에 지금 대답했습니다. 그러나 Tim Schmelter가 질문했듯이 과부하 접근법과 반대로이 방법 (옵션 매개 변수)을 수행하는 것이 이점이 있습니까? 나에게 이제는 과부화 접근 방식이 가장 좋고 유일한 방법 인 것 같습니다. Microsoft의 이전 구성 요소 개체 모델 (COM)에 구현 된 선택적 매개 변수 접근 방식을 사용하는 새로운 기술 집합을 사용하고 있기 때문입니다. 해결하기 위해 고안된 것입니다 (책의 83 페이지, "Microsoft Visual C# 2013 Step By Step" by John Sharp 참조). 특히, 이전 함수 시그니처 (예 : 새로운 선택적 매개 변수를 추가하기 전에 존재했던 함수 매개 변수 레이아웃)를 찾을 외부 모듈이있는 경우에는 다시 컴파일하지 않으면 중단됩니다. 그것은 저를위한 방해물입니다. 그러나 오버로드는 재 컴파일을 필요로하지 않고이 소프트웨어 개발 문제를 훨씬 잘 처리합니다. 새로운 Common Languange Runtime (CLR)에서만 지원됩니다. VB.NET의 선택적 매개 변수 지원은 이전 COM 일의 역사적인 한계점에 더 가깝습니다. 내 특정 요구 사항에 가장 적합한 솔루션이 아닙니다. 또한 "모든 언어에서 지원해야하는 CLR의 하위 집합을 정의하는 공용 언어 사양 (Common Language Specification)은 선택적 매개 변수에 대한 의존성을 명시 적으로 허용하지 않습니다. 즉, 기본 클래스 라이브러리에서 사용할 수있는 후보가 아닙니다. .NET Framework의 일부로 출하 된 다른 라이브러리에서 볼 수 없었을 것입니다. " (온라인 기사, "Optional Parameters Are Gaining Ground in .NET", by Jonathan Allen). Microsoft 기술을 사용하는 일반 개발자는 규칙이 더 느리지 만 선택적 매개 변수에 의존하지 않도록 내부 결정을 내릴 때 뭔가가 있다고 생각합니다. 나는 단지 당신이 여기에 와서 궁금해지기를 원한다면 당신과 함께 게시하고 공유하기를 원했습니다!
새로운 선택적 매개 변수가 기능을 추가하는 경우에만 매개 변수와 상관없이 기존 기능을 변경하면 문제가 발생할 수 있습니다. – Icepickle
"폭탄"이라면 위험이 아니라 "폭탄" 당신은 당신이 그걸 가지고 도망하지 않았다는 것을 알게 될 것입니다. 보증을받을 수 없으며 모든 것을 다시 컴파일해야합니다. –
오른쪽. 그리고 코드의 기능을 변경하는 것이 아니라 함수 내부에서 수행해야했던 모든 것을 변경하지 않는 새로운 선택적 기능을 추가하는 것입니다. 내 유일한 관심사는 다른 곳에서 코드를 호출하는 다른 코드가 딸꾹질을 일으킬 가능성이 있는지 여부입니다. 코드가 호출되는 방식에 따라 다양한 소스가 있다는 것을 알고 있습니다. – ShieldOfSalvation