programing

VB.NET 함수 반환

goodsources 2023. 5. 21. 11:23
반응형

VB.NET 함수 반환

VB.NET 함수에서 값을 반환하려면 "Functions Name"에 값을 할당하거나 "return value"를 사용할 수 있습니다.

저는 가끔 이것들이 같은 기능에 섞여 있는 것을 봅니다.저는 개인적으로 반품을 선호합니다.

제 질문은, 만약 있다면, 그 둘 사이의 내부적인 차이는 무엇인가요?

차이점은 그들이 다른 일을 한다는 것입니다!

'반환값'은 두 가지 기능을 수행합니다.
이는 해당 지점 2에서 함수 반환 값을 설정합니다.합니다.

함수의 코드가 더 이상 실행되지 않습니다!

'함수 이름 = value'는 1가지 기능을 합니다.해당 지점에서 함수 반환 값을 설정합니다.

함수의 다른 코드가 계속 실행됩니다. 이를 통해 함수 반환 값을 조정하거나 재정의할 수 있는 추가 로직이 활성화됩니다.

큰 차이가 납니다.그것은 상태에 관한 것이 아니라 흐름에 관한 것이라는 것을 기억하세요.

어디 보자꾸나...이상하게도 "functionName ="은 더 적은 IL을 생성합니까?

코드:

Public Function Test() As String
    Test = "Test"
End Function


Public Function Test2() As String
    Return "Test"
End Function

IL:

.method public static string Test() cil managed
{
    .maxstack 1
    .locals init (
        [0] string Test)
    L_0000: nop 
    L_0001: ldstr "Test"
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: ret 
}

.method public static string Test2() cil managed
{
    .maxstack 1
    .locals init (
        [0] string Test2)
    L_0000: nop 
    L_0001: ldstr "Test"
    L_0006: stloc.0 
    L_0007: br.s L_0009
    L_0009: ldloc.0 
    L_000a: ret 
}

아마 차이가 없을 것입니다.IIRC, 컴파일러가 생성한 IL은 _returnValue 변수를 추가로 사용하지 않는 한 둘 다 반환문으로 변환합니다.

FunctionName 과제의 가독성이 떨어지는 것은 VB6의 나쁜 습관의 예라고 생각합니다._returnValue(NOT RETVAL) 변수 방법도 선호합니다.

Visual Basic 6.0 개발자가 코드를 쉽게 포팅할 수 있도록 다음 작업만 제공됩니다.

Public Function MyFunction() As String
    MyFunction = "Hello"
End Function

Visual Basic 6.0을 사용하지 않은 사용자가 프로젝트에 포함된 경우 이 구문이 혼란스러울 수 있으므로 계속 사용하는 것이 좋습니다.

Tools/Options/Text Editor/All Languages/Code Lens가 활성화되면 Reference Count가 각 Sub, Function 또는 Property 문 위에 표시됩니다.

"반환 값"은 "함수 이름에 값 할당"보다 더 나은 것 같습니다.후자의 경우 "코드 렌즈"는 팽창된 기준 카운트를 생성합니다.

' Code Lens reports "0 references" here for Sub Rosa().
Public Sub Rosa()
    Diagnostics.Debug.WriteLine(Test())
    Diagnostics.Debug.WriteLine(Test2())
End Sub

' Code Lens reports "2 references" here for Function Test().
Public Function Test() As String
    Test = "Test"       ' Code Lens counts this as a reference.
End Function

' Code Lens reports "1 reference" here for Function Test2().
Public Function Test2() As String
    Dim strTest2 as String = "Test"
    Return strTest2     ' Code Lens does NOT count this as a reference.
End Function

100점 만점에 99번 "반환가"를 사용합니다.

때때로 다른 유형의 함수를 사용하여 변수 선언을 저장할 수 있을 뿐만 아니라 실제로 함수를 상당히 명확하게 할 수도 있습니다.일반적으로 반환 값의 이름을 함수와 동일하게 지정하고 싶을 때 발생합니다. 종종 이것들은 재귀 함수입니다. 해당 구조에 대한 어떤 것이 암시적 반환 변수에 그것을 빌려줍니다.하지만, 그 시나리오는 매우 희귀합니다.현재 프로젝트에서 암묵적인 반환 변수를 사용하는 기능이 있는지 모르겠습니다.

Return Value 구문이 One True .NET Way Of Things라는 것을 읽고 "좋아요, 그럼 그렇게 하겠습니다."라고 생각했습니다.그런 다음 제가 알고 있는 함수를 작성했는데, 마음속으로는 모든 상황에서 반환문의 값을 반환하거나 예외의 값을 반환했지만, 여전히 "모든 경로에서 값을 반환하지 않는다"는 컴파일러의 경고를 받았습니다.

다행히 스택 오버플로 문제를 발견했습니다. 이 함수가 "모든 경로에서 값을 반환하지 않음" 경고를 생성하지 않도록 하려면 어떻게 해야 합니까?그 이유를 설명했습니다. 함수의 머리 부분에 있는 프로시저 이름에 기본값 할당을 추가하면 제 경우에도 경고가 방지됩니다.

따라서 구문의 일관성을 위해 반환값 구문을 계속 사용할 것이지만 컴파일 프로세스가 잘못된 경고로 혼란스러워지는 것을 방지하기 위해 함수 이름에 기본값을 할당할 것입니다.

타사 공장(_hsf)과 함께 작업할 때 매우 편리하므로 반환 변수를 선언하는 것을 피할 수 있습니다.

Public Function CreateExtremum(iShape As INFITF.Reference, iDir1 As HybridShapeTypeLib.HybridShapeDirection, iSide1 As Integer, iDir2 As HybridShapeTypeLib.HybridShapeDirection, iSide2 As Integer, iDir3 As HybridShapeTypeLib.HybridShapeDirection, iSide3 As Integer) As HybridShapeTypeLib.HybridShapeExtremum
    CreateExtremum = _hsf.AddNewExtremum(iShape, iDir1, iSide1)
    CreateExtremum.Direction2 = iDir2
    CreateExtremum.ExtremumType2 = iSide2
    CreateExtremum.Direction3 = iDir3
    CreateExtremum.ExtremumType3 = iSide3
    CreateExtremum.Compute()
End Function

언급URL : https://stackoverflow.com/questions/451025/vb-net-function-return

반응형