Visual Basic에서 문장은 완전한 명령문입니다. 키워드, 연산자, 변수, 상수 및 식을 포함할 수 있습니다. 각 문은 다음 범주 중 하나에 속합니다.
변수, 상수 또는 프로시저의 이름을 지정하고 데이터 형식을 지정할 수도 있는 선언문입니다.
작업을 시작하는 실행 가능한 문 이러한 문은 메서드 또는 함수를 호출할 수 있으며 코드 블록을 반복하거나 분기할 수 있습니다. 실행 가능한 문에는 변수 또는 상수에 값 또는 식을 할당하는 Assignment Statements가 포함됩니다.
이 항목에서는 각 범주에 대해 설명합니다. 또한 이 항목에서는 한 줄에 여러 문을 결합하는 방법과 여러 줄에서 문을 계속 진행하는 방법에 대해 설명합니다.
선언문
선언 문을 사용하여 프로시저, 변수, 속성, 배열 및 상수의 이름을 지정하고 정의합니다. 프로그래밍 요소를 선언할 때 해당 데이터 형식, 액세스 수준 및 범위를 정의할 수도 있습니다. 자세한 내용은 선언된 요소 특성을 참조하세요.
다음 예제에는 세 개의 선언이 포함되어 있습니다.
Public Sub ApplyFormat()
Const limit As Integer = 33
Dim thisWidget As New widget
' Insert code to implement the procedure.
End Sub
첫 번째 선언은 Sub
문입니다. 일치하는 End Sub
문과 함께 이름이 지정된 applyFormat
프로시저를 선언합니다. 또한 이를 applyFormat
Public
지정합니다. 즉, 참조할 수 있는 모든 코드에서 호출할 수 있습니다.
두 번째 선언은 Const
문으로, limit
상수를 선언하고 Integer
데이터 형식을 지정하며 값 33을 갖습니다.
세 번째 선언은 Dim
문으로, 변수 thisWidget
을 선언합니다. 데이터 형식은 특정 개체, 즉 클래스에서 만든 개체입니다 Widget
. 변수를 기본 데이터 형식 또는 사용 중인 애플리케이션에 노출되는 개체 형식으로 선언할 수 있습니다.
초기 값
선언문이 포함된 코드가 실행되면 Visual Basic은 선언된 요소에 필요한 메모리를 예약합니다. 요소에 값이 있으면 Visual Basic은 해당 데이터 형식의 기본값으로 초기화합니다. 자세한 내용은 "동작"을 Dim 문의에서 참조하세요.
다음 예제와 같이 선언의 일부로 변수에 초기 값을 할당할 수 있습니다.
Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.
변수가 개체 변수인 경우 다음 예제와 같이 새 연산자 키워드를 사용하여 선언할 때 해당 클래스의 인스턴스를 명시적으로 만들 수 있습니다.
Dim f As New FileInfo("filename")
선언문에 지정한 초기 값은 실행이 선언 문에 도달할 때까지 변수에 할당되지 않습니다. 이 때까지 변수에는 해당 데이터 형식의 기본값이 포함됩니다.
실행 가능한 구문
실행 문은 작업을 수행합니다. 프로시저를 호출하거나, 코드의 다른 위치로 분기하거나, 여러 문을 반복하거나, 식을 평가할 수 있습니다. 대입 문은 실행 문의 특수한 경우입니다.
다음 예제에서는 컨트롤 구조를 사용하여 If...Then...Else
변수 값에 따라 다른 코드 블록을 실행합니다. 각 코드 블록 내에서 루프는 For...Next
지정된 횟수를 실행합니다.
Public Sub StartWidget(ByVal aWidget As widget,
ByVal clockwise As Boolean, ByVal revolutions As Integer)
Dim counter As Integer
If clockwise = True Then
For counter = 1 To revolutions
aWidget.SpinClockwise()
Next counter
Else
For counter = 1 To revolutions
aWidget.SpinCounterClockwise()
Next counter
End If
End Sub
이전 예제의 문은 If
매개 변수 clockwise
의 값을 확인합니다. 값이 True
이면 spinClockwise
의 aWidget
메서드를 호출합니다. 값이 False
이면 spinCounterClockwise
의 aWidget
메서드를 호출합니다. 컨트롤 구조는 If...Then...Else
.로 End If
끝납니다.
각 블록 내의 For...Next
루프는 매개 변수 revolutions
값과 같은 횟수로 적절한 메서드를 호출합니다.
대입문
할당 문은 다음 예제와 같이 할당 연산자(=
)의 오른쪽에 있는 값을 가져와서 왼쪽의 요소에 저장하는 것으로 구성된 할당 작업을 수행합니다.
v = 42
앞의 예제에서 assignment 문은 변수 v
에 리터럴 값 42를 저장합니다.
적격 프로그래밍 요소
대입 연산자의 왼쪽에 있는 프로그래밍 요소는 값을 수락하고 저장할 수 있어야 합니다. 즉 , ReadOnly가 아닌 변수 또는 속성이거나 배열 요소여야 합니다. 대입문 문맥에서 이런 요소를 lvalue(left value)라고 부르기도 합니다.
할당 연산자의 오른쪽에 있는 값은 리터럴, 상수, 변수, 속성, 배열 요소, 기타 식 또는 함수 호출의 조합으로 구성될 수 있는 식에 의해 생성됩니다. 다음 예제에서는 이를 보여 줍니다.
x = y + z + FindResult(3)
앞의 예제에서는 변수에 저장된 값을 변수 y
z
에 보관된 값에 추가한 다음 함수 findResult
호출에서 반환된 값을 추가합니다. 이 식의 총 값은 변수 x
에 저장됩니다.
할당문에서의 데이터 형식
다음 예제와 같이 대입 연산자는 숫자 값 외에도 값을 할당 String
할 수 있습니다.
Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.
다음 예제와 같이 리터럴 또는 Boolean
식을 사용하여 Boolean
에 Boolean
값을 할당할 수도 있습니다.
Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.
마찬가지로 , 또는 Char
데이터 형식의 프로그래밍 요소에 Date
Object
적절한 값을 할당할 수 있습니다. 개체 인스턴스를 해당 인스턴스가 만들어지는 클래스로 선언된 요소에 할당할 수도 있습니다.
복합 할당 구문
복합 할당 문은 먼저 프로그래밍 요소에 할당하기 전에 식에 대한 작업을 수행합니다. 다음 예제에서는 연산자 왼쪽의 변수 값을 오른쪽에 있는 식 값으로 증가시키는 이러한 연산 +=
자 중 하나를 보여 줍니다.
n += 1
앞의 n
예제에서는 값에 1을 추가한 다음 해당 새 값을 저장합니다 n
. 다음 구문에 해당하는 약식입니다.
n = n + 1
이 형식의 연산자를 사용하여 다양한 복합 할당 작업을 수행할 수 있습니다. 이러한 연산자 목록 및 이에 대한 자세한 내용은 대입 연산자를 참조하세요.
연결 할당 연산자(&=
)는 다음 예제와 같이 기존 문자열의 끝에 문자열을 추가하는 데 유용합니다.
Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".
할당 문에서의 형 변환
변수, 속성 또는 배열 요소에 할당하는 값은 해당 대상 요소에 적합한 데이터 형식이어야 합니다. 일반적으로 대상 요소의 데이터 형식과 동일한 데이터 형식의 값을 생성해야 합니다. 그러나 할당 중에 일부 형식을 다른 형식으로 변환할 수 있습니다.
데이터 형식 간 변환에 대한 자세한 내용은 Visual Basic의 형식 변환을 참조하세요. 간단히 말해 Visual Basic은 지정된 형식의 값을 확장되는 다른 형식으로 자동으로 변환합니다.
확대 변환은 항상 런타임에 성공하고 데이터를 잃지 않는 변환입니다. 예를 들어, Visual Basic은 적절한 경우 Integer
가 Double
로 확장되기 때문에 Integer
값을 Double
로 변환합니다. 자세한 내용은 확대 및 축소 변환을 참조하세요.
축소 변환 (확대되지 않는 변환)은 런타임에 실패하거나 데이터가 손실될 위험이 있습니다. 형식 변환 함수를 사용하여 명시적으로 축소 변환을 수행하거나 설정하여 암시적으로 모든 변환을 수행하도록 컴파일러에 Option Strict Off
지시할 수 있습니다. 자세한 내용은 암시적 및 명시적 변환을 참조하세요.
한 줄에 여러 문장 배치하기
콜론(:
) 문자로 구분된 한 줄에 여러 개의 문을 사용할 수 있습니다. 다음 예제에서는 이를 보여 줍니다.
Dim sampleString As String = "Hello World" : MsgBox(sampleString)
이 형식의 구문은 경우에 따라 편리하지만 코드를 읽고 유지 관리하기 어렵게 만듭니다. 하나의 문장을 한 줄에 쓰는 것이 좋습니다.
여러 줄에 걸쳐 문장을 계속하기
문은 일반적으로 한 줄에 맞지만 너무 길면 공백 뒤에 밑줄 문자(_
)와 캐리지 리턴으로 구성된 줄 연속 시퀀스를 사용하여 다음 줄로 계속 이동할 수 있습니다. 다음 예제 MsgBox
에서는 실행 문이 두 줄로 계속 진행됩니다.
Public Sub DemoBox()
Dim nameVar As String
nameVar = "John"
MsgBox("Hello " & nameVar _
& ". How are you?")
End Sub
암시적 줄 연속성
대부분의 경우 밑줄 문자(_
)를 사용하지 않고 다음 연속 줄에서 문을 계속할 수 있습니다. 다음 구문 요소는 다음 코드 줄에서 암시적으로 문을 계속합니다.
쉼표(
,
) 뒤 다음은 그 예입니다.Public Function GetUsername(ByVal username As String, ByVal delimiter As Char, ByVal position As Integer) As String Return username.Split(delimiter)(position) End Function
열린 괄호(
(
) 뒤 또는 닫는 괄호()
) 앞 다음은 그 예입니다.Dim username = GetUsername( Security.Principal.WindowsIdentity.GetCurrent().Name, CChar("\"), 1 )
열린 중괄호(
{
) 다음 또는 닫는 중괄호(}
) 전에. 다음은 그 예입니다.Dim customer = New Customer With { .Name = "Terry Adams", .Company = "Adventure Works", .Email = "terry@www.adventure-works.com" }
자세한 내용은 개체 이니셜라이저: 명명된 형식 및 익명 형식 또는 컬렉션 이니셜라이저를 참조하세요.
XML 문자열 내에서 열린 포함 식(
<%=
) 이후 또는 포함된 식(%>
)이 닫히기 전에. 다음은 그 예입니다.Dim customerXml = <Customer> <Name> <%= customer.Name %> </Name> <Email> <%= customer.Email %> </Email> </Customer>
자세한 내용은 XML에 포함된 식을 참조하세요.
연결 연산자(
&
) 다음에. 다음은 그 예입니다.cmd.CommandText = "SELECT * FROM Titles JOIN Publishers " & "ON Publishers.PubId = Titles.PubID " & "WHERE Publishers.State = 'CA'"
자세한 내용은 기능별로 나열된 연산자를 참조하세요.
대입 연산자(
=
,&=
,:=
,+=
,-=
,*=
,/=
,\=
,^=
,<<=
,>>=
) 후 다음은 그 예입니다.Dim fileStream = My.Computer.FileSystem. OpenTextFileReader(filePath)
자세한 내용은 기능별로 나열된 연산자를 참조하세요.
식 내의 이진 연산자 (
+
,-
,/
,*
,Mod
,<>
,<
,>
,<=
,>=
,^
,>>
,<<
,And
,AndAlso
,Or
,OrElse
,Like
) 후에Xor
다음은 그 예입니다.Dim memoryInUse = My.Computer.Info.TotalPhysicalMemory + My.Computer.Info.TotalVirtualMemory - My.Computer.Info.AvailablePhysicalMemory - My.Computer.Info.AvailableVirtualMemory
자세한 내용은 기능별로 나열된 연산자를 참조하세요.
Is
및IsNot
연산자들 이후에. 다음은 그 예입니다.If TypeOf inStream Is IO.FileStream AndAlso inStream IsNot Nothing Then ReadFile(inStream) End If
자세한 내용은 기능별로 나열된 연산자를 참조하세요.
멤버 한정자 문자(
.
) 뒤와 멤버 이름 앞에 있습니다. 다음은 그 예입니다.Dim fileStream = My.Computer.FileSystem. OpenTextFileReader(filePath)
그러나
_
문을 사용하거나 형식의 초기화 목록에 값을 제공할 때는 멤버 한정자 문자 뒤에 줄 연속 문자(With
)를 포함해야 합니다. 대입 연산자(예를 들어=
) 뒤에 줄을 끊는 것이 좋습니다, 특히With
문 또는 개체 초기화 목록을 사용할 때. 다음은 그 예입니다.' Not allowed: ' Dim aType = New With { . ' PropertyName = "Value" ' Allowed: Dim aType = New With {.PropertyName = "Value"} Dim log As New EventLog() ' Not allowed: ' With log ' . ' Source = "Application" ' End With ' Allowed: With log .Source = "Application" End With
자세한 내용은 With...End With 문 또는 개체 이니셜라이저: 명명된 형식 및 익명 형식을 참조하세요.
XML 축 속성 한정자(
.
또는.@
또는...
) 뒤에 옵니다. 그러나_
키워드를 사용할 때 멤버 한정자를 지정하려면 줄 연속 문자(With
)를 포함해야 합니다. 다음은 그 예입니다.Dim customerName = customerXml. <Name>.Value Dim customerEmail = customerXml... <Email>.Value
자세한 내용은 XML 축 속성을 참조하세요.
특성을 지정할 때, 작은 기호(<) 다음이나 큰 기호(
>
) 앞에 위치합니다. 또한 특성을 지정할 때 보다 큰 기호(>
)가 표시됩니다. 그러나 어셈블리 수준 또는 모듈 수준 특성을 지정할 때 줄 연속 문자(_
)를 포함해야 합니다. 다음은 그 예입니다.< Serializable() > Public Class Customer Public Property Name As String Public Property Company As String Public Property Email As String End Class
자세한 내용은 특성 개요를 참조하세요.
쿼리 연산자(
Aggregate
,Distinct
,From
,Group By
,Group Join
,Join
,Let
,Order By
,Select
,Skip
,Skip While
,Take
,Take While
,Where
,In
,Into
,On
,Ascending
,Descending
) 전후. 여러 키워드(Order By
,Group Join
및Take While
Skip While
)로 구성된 쿼리 연산자의 키워드 사이에는 선을 끊을 수 없습니다. 다음은 그 예입니다.Dim vsProcesses = From proc In Process.GetProcesses Where proc.MainWindowTitle.Contains("Visual Studio") Select proc.ProcessName, proc.Id, proc.MainWindowTitle
자세한 내용은 쿼리를 참조하세요.
In
문에서For Each
키워드 뒤에. 다음은 그 예입니다.For Each p In vsProcesses Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}", p.ProcessName, p.Id, p.MainWindowTitle) Next
자세한 내용은 For Each...를 참조하세요. 다음 문입니다.
컬렉션 이니셜라이저의
From
키워드 뒤입니다. 다음은 그 예입니다.Dim days = New List(Of String) From { "Mo", "Tu", "We", "Th", "F", "Sa", "Su" }
자세한 내용은 컬렉션 이니셜라이저를 참조하세요.
메모 추가
소스 코드는 항상 자명하지 않습니다, 심지어 그것을 쓴 프로그래머에. 따라서 코드를 문서화하기 위해 대부분의 프로그래머는 포함된 주석을 자유롭게 사용합니다. 코드의 주석은 나중에 읽거나 작업하는 모든 사용자에게 프로시저 또는 특정 명령을 설명할 수 있습니다. Visual Basic은 컴파일 중에 주석을 무시하고 컴파일된 코드에 영향을 미치지 않습니다.
주석 줄은 아포스트로피('
)로 시작하거나 REM
공백으로 시작합니다. 문자열을 제외한 코드의 모든 위치에 추가할 수 있습니다. 문장에 주석을 추가하려면 문장 뒤에 주석을 삽입하기 전, 아포스트로피 또는 REM
를 삽입하십시오. 주석은 별도의 줄로 넘어갈 수도 있습니다. 다음 예제에서는 이러한 가능성을 보여 줍니다.
' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.
컴파일 오류 확인
코드 줄을 입력한 후 물결선이 파란색 밑줄로 표시되는 경우(오류 메시지도 표시될 수 있음) 문에 구문 오류가 발생합니다. 작업 목록을 보거나 마우스 포인터를 사용하여 오류 위로 마우스를 가져가서 오류 메시지를 읽어 문에 무엇이 잘못되었는지 확인하고 수정해야 합니다. 코드의 모든 구문 오류를 수정할 때까지 프로그램이 제대로 컴파일되지 않습니다.
관련 섹션
기간 | 정의 |
---|---|
대입 연산자 | 과 같은 = *= &= 할당 연산자를 포함하는 언어 참조 페이지에 대한 링크를 제공합니다. |
연산자 및 식 | 요소를 연산자를 결합하여 새 값을 생성하는 방법을 보여줍니다. |
방법: 코드에서 문장을 분리하고 결합하는 방법 | 단일 문을 여러 줄로 분리하는 방법과 동일한 줄에 여러 문을 배치하는 방법을 보여 줍니다. |
방법: 명령문에 레이블 붙이는 법 | 코드 줄에 레이블을 지정하는 방법을 보여줍니다. |
.NET