함수 인자 순서에 상관 없이 대입하기(:= 사용)
강좌는 아니구여...그렇다구 뭐 유용한 팁도 아니지만....혹시나마 한 명이라도...필요한 사람이 있을지도 몰라서....ㅡㅡ;
그냥 한 번 올려봅니다...
보통 우리가 생각할 때 함수에 인자값을 넘길 때에는 정의된 순서대로 넘기는 것으로 알고 있습니다.
하지만 ---> ": =" 를 사용하면 순서에 상관없이 인자값을 넘길 수 있습니다.
예를 들어,
Private Sub Test()
Call Operator(1,2,"func test")
End Sub
Private Sub Operator(oa As Integer, ob As Integer, oc As String)
Debug.Print oa
Debug.Print ob
Debug.Print oc
End Sub
위와 같이 하면 디버그 창에
1
2
func test
와 같이 찍힐 것입니다.
그러나 순서를 바꿔서 인자값을 넘길 수도 있습니다.
Test()만 수정을 해서
Private Sub Test()
Call Operator(oc:="func test", ob:=2, oa:=1) --> 수정부분
End Sub
Private Sub Operator(oa As Integer, ob As Integer, oc As String)
Debug.Print oa
Debug.Print ob
Debug.Print oc
End Sub
이렇게 해보면
1
2
func test
와 같이 동일한 결과값을 볼 수 있습니다.
이처럼 요거 ---> ": =" 를 사용하면 인자값의 넘기는 순서를 변경할 수 있습니다.
본론으로 들어가서...
질문답변 게시판에 아래 빨간색 부분의 의미를 물어보시는 글이 올라왔었었는데
Call objTV.Nodes.Add(nodParent, tvwChild, Text:=GetFolderDisplayName(isfParent, pidlrelChild, SHGDN_INFOLDER))
위의 경우는 아래와 같습니다.
Private Sub Operator()
Dim lValue1 As Long
Dim lValue2 As Long
lValue1 = Plus(1, 2, pc = Multiply(3, 4))
lValue2 = Plus(1, 2, pc := Multiply(3, 4))
Print lValue1 -------------------------> 결과값은 3이 출력됩니다.
Print lValue2 -------------------------> 결과값은 15가 출력됩니다.
End Sub
Private Function Plus(pa As Integer, pb As Integer, pc As Integer) As Long
Plus = pa + pb + pc
End Function
Private Function Multiply(oa As Integer, ob As Integer) As Long
Multiply = oa * ob
End Function
위에서
lValue1의 경우에는 Plus함수에 값을 넘길 때 1 , 2 , 0의 값이 넘어갑니다.
lValue2의 경우에는 Plus함수에 값을 넘길 때 1 , 2 , 12의 값이 넘어갑니다.
따라서, lValue1과 lValue2의 차이점은 Plus함수를 호출할 때 pc라는 변수에서
Multiply함수의 return값이 대입되느냐 안 되느냐의 차이겠지요.